@scallop-io/sui-scallop-sdk 2.4.4 → 2.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,50 +1,49 @@
1
1
  'use strict';
2
2
 
3
3
  var client = require('@mysten/sui/client');
4
- var transactions = require('@mysten/sui/transactions');
5
4
  var utils = require('@mysten/sui/utils');
6
5
  var suiKit = require('@scallop-io/sui-kit');
7
6
  var S = require('bignumber.js');
8
7
  var zod = require('zod');
9
8
  var bcs = require('@mysten/sui/bcs');
10
- var xo = require('assert');
9
+ var ko = require('assert');
11
10
  var sha3_js = require('@noble/hashes/sha3.js');
12
11
  var pythSuiJs = require('@pythnetwork/pyth-sui-js');
13
- var Rs = require('axios');
12
+ var gs = require('axios');
14
13
  var queryCore = require('@tanstack/query-core');
15
14
 
16
15
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
16
 
18
17
  var S__default = /*#__PURE__*/_interopDefault(S);
19
- var xo__default = /*#__PURE__*/_interopDefault(xo);
20
- var Rs__default = /*#__PURE__*/_interopDefault(Rs);
18
+ var ko__default = /*#__PURE__*/_interopDefault(ko);
19
+ var gs__default = /*#__PURE__*/_interopDefault(gs);
21
20
 
22
- var jt={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var Nt="https://sui.apis.scallop.io",_t="https://sdk.api.scallop.io",Ls=false,Vs=false,Ce="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",ze="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var x={api:{getAddresses:t=>["api","getAddresses",t],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarket:()=>["api","getMarket"],getSpools:()=>["api","getSpools"],getBorrowIncentivePools:()=>["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:(t,e)=>["oracle","getPythPriceIds",e,t],getCoinPrices:t=>["oracle","getCoinPrices",t]}};var He=[client.getFullnodeUrl("mainnet"),"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 $s={core:{version:"0x72bc09c4ce413d76d07f6e712413aebbe3ce3747eadfbc2331fbdb1dbde2d43a",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xd971609b7feb6230585831e7aeb3c121fb21b9431337a30fc99185eb459a05ee",market:"0xed80ed898df1e0b7a14b78c92527b47ef88591d5722ded16050d7e101687bb20",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0x861bfea382072bdd060fa3a33f65387a71d5a75dbb0fedd92aa62f8a048b0ff9",coins:{usdc:{id:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",metaData:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",treasury:"",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",symbol:"USDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"0xaebdb50e0a95c5aa20c60bde5f574dac90aef83b508d64146cf29b5f63c35d4f ",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",symbol:"SCA",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}},deep:{id:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",metaData:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",treasury:"",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",symbol:"DEEP",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",feedObject:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed"}}},fud:{id:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",metaData:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",treasury:"",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",symbol:"FUD",decimals:5,oracle:{supra:"",switchboard:"",pyth:{feed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",feedObject:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",symbol:"haSUI",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}}},oracles:{xOracle:"0xb112727f380857fd711f89b450a3b22dc4cc55f82b2212b001f2461d6257b0b9",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",primaryPriceUpdatePolicyObject:"0xbcd908d0ee6d63d726e61676f3feeec3d19817f4849bbecf372dd3399f247f6b",secondaryPriceUpdatePolicyObject:"0x624a6f120777bb30e718b86e836c205ef4229448052377dc3d78272a6662b2c0",primaryPriceUpdatePolicyVecsetId:"0xfb1330aa028ed6a159b742c71b5a79b3b6824cf71efa40ea82b52486ad209264",secondaryPriceUpdatePolicyVecsetId:"0x4b827acc73f3f53f808dd73a7ee0a60ae61e84322176bece72b26467030b467c",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"0x9b1b415f384af6af0ff31c22decdc88b3b83d0188cf63ef9c58fd122bca77219",registryTableId:"0x9f75c071b0db2e80da3f5c98686ffdedf3a633684290499501595277a5350b8c",state:"",registryCap:""},pyth:{registry:"0xbc477946f0c8c9a09d7a9bab57eb01f0320c1d1f7f9aeee2503d0a71f50379c6",registryCap:"0xe4995aaca4e70d4203790fbd22332107131e88b92b81bc976e6fc3a7d5005efd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0xd971609b7feb6230585831e7aeb3c121fb21b9431337a30fc99185eb459a05ee",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0x15f353b593733a6eeb37f67a8a0f6e6b863ef5e813df39cb263f5f40c29a2195",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",object:"",upgradeCap:""},pyth:{id:"0xde99692957a424f4701e55b77b014cf24612ded4608225090867d1d2990eaea9",object:"0xde99692957a424f4701e55b77b014cf24612ded4608225090867d1d2990eaea9",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7"},switchboard:{id:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",object:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",upgradeCap:""},xOracle:{id:"0xe2785270b2e6179e68204dd5901a43f9a0e1c566baf656cad705d45a419c4d3a",object:"0xe2785270b2e6179e68204dd5901a43f9a0e1c566baf656cad705d45a419c4d3a",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{ssui:{id:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",rewardPoolId:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"}},config:""},borrowIncentive:{id:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",config:"0xe5fec608d3a30a1f75b24d2c67d227524075aa6f5ee22e5eccedacd9145b1d9d",object:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",incentivePools:"0xb06657692f7f4d9eb0d7b7d6ac24db30e6fdaed64b09dee49664b496f687de46",incentiveAccounts:"0x0bf8168d983c18edcc6b2c2b2e85d2bdac84764babfecf1b567f98801fbf4942",query:"0xdbc22fe051d384691634cd3b9fe473b09723084a1e4c128728c42e2de3b2228f",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c"},vesca:{id:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",object:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x5477d43c9f75faea312c0f02dd48b4e03d9cbf2b1a5436ddffb5edefbea18ff2",table:"0x06f763060ea5da3d639fb56df70674490a8354511cfe61584062aafd83b1940d",treasury:"0x934919cc31fa89b67578039bb10d5518fa23c50bc8f78500f1d1a718407a0a71",config:"0x38d3f7a1fa5071226535d4d8bfca8ccab3d24871402df1be669d7d5e9e3e9cb4",subsTable:"0x4756b716670ff62760b22bebed73c6eb2c2cb118674a2eea3a56ebea9e27ae76",subsTableId:"0x924b56d383b45445984a80002185b670aa2e72cd7df496d345f45f9407a12c07",subsWhitelist:"0xfc72adae643da4f2fe080adc1e2cca981eadcb518facb02324eeaab169752ffb"},referral:{id:"0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",object:"0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",adminCap:"0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",referralBindings:"0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",bindingTableId:"0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",referralRevenuePool:"0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",revenueTableId:"0x669dfb0f47fccbbe2ae8a0bfce2672a994ef3f1c7049621405cce2f91733bdc1",referralTiers:"0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",tiersTableId:"0xad5e36fce7358a3ef94a56eb89ee7f1968100c1a9d967c1731154083e1dda1fb",authorizedWitnessList:"0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e",version:"0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"},loyaltyProgram:{id:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",object:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",rewardPool:"0x215e1022037052407e69a5c5938f888078013c924cae97132492719ac2c53ec6",userRewardTableId:"0x574a11f8a0fbaa05b8f559cb65634e8eb20f26b1ec29e7d58de9167f3cedd0f7"},veScaLoyaltyProgram:{id:"0x51bd8c455caedad9d7fd47f9ee75876668c4d6bbede95af39c0aebde46043f00",object:"0x51bd8c455caedad9d7fd47f9ee75876668c4d6bbede95af39c0aebde46043f00",adminCap:"0xb2d52e0ebb260cb42699be6a9804e12d6fa17b79ef1e43f9996df5ca71bac0ae",veScaRewardPool:"0x4fe34992bf2261c3c6c14b2dbf9606ce65a505c45ff778ac129ce7dea9b0cadf",veScaRewardTableId:"0x85d3e557d9bbed617b9cbc09982a0c9a6f6f4fc9ecce49b59124206c409c4774"},scoin:{id:"0xde8fe7f73fcaff729de640b1a67afff5028019aefa67c151250a8d47db37aa1c",coins:{ssui:{coinType:"0x9d81d8a20e9ffc462839c23346edb69604f7b4deffc9253262e1caca473fd3e3::scallop_sui::SCALLOP_SUI",metaData:"0x13d07ec4114e36b6d9b69cab9e4722c4dc76d9f623db9fcb5b26a01cb0a861a4",symbol:"sSUI",treasury:"0x8d2cd566acf9f38629bab1e5aba888c85b177432e91cf7f9a204c3f730281059"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",metaData:"",symbol:"sSCA",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199"},susdc:{coinType:"0x55588ffc90718301696fd5497a7b6e82c0f86c15d58e41fc9750a24329ee2523::scallop_usdc::SCALLOP_USDC",treasury:"0xe028cf6c656e410502c931ed265524d48ff16e000db1f50305b54d8a6c421150",symbol:"sUSDC",metaData:"0x752b2f407601cbbc335c3d1623e0f5a2b8cb254bc35847c4586bd7cd8bcac7f8"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",metaData:"",symbol:"sDEEP",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",metaData:"",symbol:"sFUD",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d"},shasui:{coinType:"0xf2f52fede69abafa2439665bb5bebc8e60fe0f8c5d9d240dd143b5f74f73c867::scallop_ha_sui::SCALLOP_HA_SUI",metaData:"0xb174a5642133c5a7409187c80e2ef090cc0169147a1dcedce8a0f208397578d3",symbol:"shaSUI",treasury:"0x33b0013a52205955a0af9ceaa4d3f4b7cf4bd8179fe14ac2de29d8f4d656eb0a"}}}},Ws={lending:new Set(["usdc","sui","hasui"]),collateral:new Set(["usdc","sui","hasui"]),borrowing:new Set(["usdc","sui","hasui"]),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","shasui"]),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"])},Gs={usdc:{coinName:"usdc",symbol:"USDC",lendingPoolAddress:"0x9a5bc993b18fb2a27414ae7adc43f343509fd5162f796b025d08ebeca4e02317",collateralPoolAddress:"0x35275c590b5f754b67ae0da7fbf530d40e90d66076dd7f687e13f7586effba8c",borrowDynamic:"0xe7ea2c5a01a7a286d76d135896edbb1ffb199ba100a618beb9c2180c8d547d91",interestModel:"0xcde221c16ddbf7d9ea41d6d3dcbff230fc2da9d957a563194c3d9025152ed93b",riskModel:"0xa15d4c5c56f4afcd604f6db8b1b5c104d91d3ad95a743212ae270375877baa6d",borrowFeeKey:"",supplyLimitKey:"0x4be9ae54ac4d320f4f9c14cae78cb85c8e0e67791dd9bdba6d2db20614a28a24",borrowLimitKey:"0x6b01093cba95b835181f00e3a2c31ed8dfc8d64fe3db0fb80933a09f66e1ccf1",isolatedAssetKey:"",isIsolated:false,spool:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",spoolReward:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166",sCoinType:"0x55588ffc90718301696fd5497a7b6e82c0f86c15d58e41fc9750a24329ee2523::scallop_usdc::SCALLOP_USDC",sCoinTreasury:"0xe028cf6c656e410502c931ed265524d48ff16e000db1f50305b54d8a6c421150",sCoinMetadataId:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2",sCoinSymbol:"sUSDC",sCoinName:"susdc",coinMetadataId:"0x752b2f407601cbbc335c3d1623e0f5a2b8cb254bc35847c4586bd7cd8bcac7f8",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",spoolName:"susdc",decimals:6,pythFeed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",pythFeedObjectId:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab",flashloanFeeObject:"0x289c770f54b26a4175d57cc6061e3d05f96e52d352cb7c0a51e2e3bacb2aee30"},sui:{coinName:"sui",symbol:"SUI",lendingPoolAddress:"0x885330fd03acdcf7d0ba10b6722f91140bc77f6fb62a593d5d025ccd6d160c04",collateralPoolAddress:"0x1a75bdcb07a64f3a87cff0156c9d470fc9ce0be14ec8093195a27921186afbb8",borrowDynamic:"0xec6749d4fb51841a728e6f0dda1b43047ca76a89690f67c7e496f2c0b6ea67b5",interestModel:"0x769b1653eb11e85903b0834e0f83d65405e5467a60389b2d86960dc2582c6595",riskModel:"0xbaf399f7cd7c13e15cf8e5979e4b8baa13513e9068f13c0a0ccdc9e4d3739314",borrowFeeKey:"",supplyLimitKey:"0x0602418e66fb7a73fa997077bd66f248ad5b090d43344a14b9f1db598ecc1d47",borrowLimitKey:"0x2b33a7efdcf6a6df24f4d8a356dd52f58d75bc023c3f171d99502d4d008b53f0",isolatedAssetKey:"",isIsolated:false,spool:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",spoolReward:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a",sCoinType:"0x9d81d8a20e9ffc462839c23346edb69604f7b4deffc9253262e1caca473fd3e3::scallop_sui::SCALLOP_SUI",sCoinTreasury:"0x8d2cd566acf9f38629bab1e5aba888c85b177432e91cf7f9a204c3f730281059",sCoinMetadataId:"0x13d07ec4114e36b6d9b69cab9e4722c4dc76d9f623db9fcb5b26a01cb0a861a4",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"},hasui:{coinName:"hasui",symbol:"haSUI",lendingPoolAddress:"0x7e9c2b3105e0999410305dfd2c649ca473a9c04be87c53ce5e4566559f6818ea",collateralPoolAddress:"0x0446c27ce7e6fac2d0b359caad042bd436727b6f498a2efc4ceaa071d9fce4b5",borrowDynamic:"0xa1ba968ebc70685fc5fbdeb5edbd346cbc13223abef556109dc08f26962d3765",interestModel:"0x8440be8ab46d572fefaf0c21a225ebb9e6fe9239112de8de0a2654e6827fd5c7",riskModel:"0xa246e59a3686b63ce4b914c2d1c784cff0ae3288e7b3db5b146925684a6380c0",borrowFeeKey:"",supplyLimitKey:"",borrowLimitKey:"",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0xf2f52fede69abafa2439665bb5bebc8e60fe0f8c5d9d240dd143b5f74f73c867::scallop_ha_sui::SCALLOP_HA_SUI",sCoinTreasury:"0x33b0013a52205955a0af9ceaa4d3f4b7cf4bd8179fe14ac2de29d8f4d656eb0a",sCoinMetadataId:"0xb174a5642133c5a7409187c80e2ef090cc0169147a1dcedce8a0f208397578d3",sCoinSymbol:"sHASUI",sCoinName:"shasui",coinMetadataId:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",spoolName:"shasui",decimals:9,pythFeed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",pythFeedObjectId:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37",flashloanFeeObject:"0xb9f505d532de1d6c9f3a8522a2d16f2958b75c0ed939d4f80b96f584a2a8ed5e"}};var Z=86400,le=1460,$=126144e3,Xe=1e10,Ye=1e9;var Te={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 j=t=>{let e=t.blockData.sender;if(!e)throw new Error("Sender is required");return e},de=t=>{if(t===void 0)throw new Error("veSca not found")},Ze=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Je=(t,e,a)=>{de(a),Ze(a);let o=Math.floor(a/1e3);if(t<1)throw new Error("Minimum lock period is 1 day");let s=Math.floor((e-o)/86400);if(t>s)throw new Error(`Cannot extend lock period by ${t} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-s}`)},Bt=(t,e,a,o)=>{let s=o?Math.floor(o/1e3):void 0,r=!s,n=!r&&s*1e3<=new Date().getTime();if(r||n)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${n?"renewing expired veSca":"initial lock"} is 10 SCA`);if(e*86400>126144e3)throw new Error(`Maximum lock period is ~4 years (${1460} days)`)}else throw new Error(`SCA amount and lock period is required for ${n?"renewing expired veSca":"initial lock"}`);else {if(de(o),Ze(o),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");a&&e&&Je(e,a,o);}},Dt=(t,e)=>{if(de(e),Ze(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")},Mt=(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 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),o=t.getCoinDecimal(a);if(o===void 0)throw new Error(`Coin decimal not found for ${a}`);let s=24*365*3600,r=e.baseBorrowRate*s/e.borrowRateScale,n=e.borrowRateOnHighKink*s/e.borrowRateScale,i=e.borrowRateOnMidKink*s/e.borrowRateScale,c=e.maxBorrowRate*s/e.borrowRateScale,l=e.borrowRate*s/e.borrowRateScale,d=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=S__default.default(e.borrowIndex).multipliedBy(S__default.default(d).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),f=S__default.default(e.borrowIndex).plus(u),m=S__default.default(f).dividedBy(e.borrowIndex).minus(1),y=S__default.default(e.debtAmount).multipliedBy(m),p=y.plus(e.debtAmount),b=p.shiftedBy(-1*o),h=S__default.default(e.reserveAmount).plus(y.multipliedBy(e.reserveFactor)),g=h.shiftedBy(-1*o),A=S__default.default(p).plus(Math.max(e.cashAmount-h.toNumber(),0)),w=A.shiftedBy(-1*o),T=S__default.default(p).dividedBy(A);T=T.isFinite()?T:S__default.default(0);let k=S__default.default(l).multipliedBy(T).multipliedBy(1-e.reserveFactor);k=k.isFinite()?k:S__default.default(0);let R=A.dividedBy(e.marketCoinSupplyAmount);return R=R.isFinite()&&!R.isNaN()?R:S__default.default(1),{baseBorrowApr:r,baseBorrowApy:t.parseAprToApy(r),borrowAprOnHighKink:n,borrowApyOnHighKink:t.parseAprToApy(n),borrowAprOnMidKink:i,borrowApyOnMidKink:t.parseAprToApy(i),coinDecimal:o,maxBorrowApr:c,maxBorrowApy:t.parseAprToApy(c),borrowApr:Math.min(l,c),borrowApy:Math.min(t.parseAprToApy(l),t.parseAprToApy(c)),borrowIndex:f.toNumber(),growthInterest:m.toNumber(),supplyAmount:A.toNumber(),supplyCoin:w.toNumber(),borrowAmount:p.toNumber(),borrowCoin:b.toNumber(),reserveAmount:h.toNumber(),reserveCoin:g.toNumber(),utilizationRate:T.toNumber(),supplyApr:k.toNumber(),supplyApy:t.parseAprToApy(k.toNumber()),conversionRate:R.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:S__default.default(e.supplyLimit).shiftedBy(-o).toNumber(),maxBorrowCoin:S__default.default(e.borrowLimit).shiftedBy(-o).toNumber()}},ke=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)}),Ae=(t,e)=>{let a=t.parseCoinNameFromType(e.coinType),o=t.getCoinDecimal(a);if(o===void 0)throw new Error(`Coin decimal not found for ${a}`);let s=S__default.default(e.maxCollateralAmount).shiftedBy(-1*o),r=S__default.default(e.totalCollateralAmount).shiftedBy(-1*o);return {coinDecimal:o,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:s.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:r.toNumber()}},Ft=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)}),Kt=(t,e,a)=>{let s=S__default.default(t.pointPerPeriod).dividedBy(t.period),r=S__default.default(t.pointPerPeriod).dividedBy(t.period),n=r.gt(0)?S__default.default(t.maxPoint).minus(t.distributedPoint).dividedBy(r):S__default.default(0),i=t.createdAt,c=n.plus(t.lastUpdate).integerValue().toNumber(),l=S__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),d=S__default.default(t.maxPoint).minus(t.distributedPoint),u=S__default.default.minimum(S__default.default(l).multipliedBy(t.pointPerPeriod),d),f=S__default.default(t.index).plus(u.dividedBy(t.staked).isFinite()?S__default.default(1e9).multipliedBy(u).dividedBy(t.staked):0),m=S__default.default(t.distributedPoint).plus(u),y=S__default.default(t.staked),p=y.shiftedBy(-1*a),b=p.multipliedBy(e);return {distributedPointPerSec:s.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:f.toNumber(),currentTotalDistributedPoint:m.toNumber(),startDate:new Date(i*1e3),endDate:new Date(c*1e3),stakedAmount:y.toNumber(),stakedCoin:p.toNumber(),stakedValue:b.toNumber()}},Lt=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)}),Vt=(t,e,a,o,s)=>{let n=S__default.default(a.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),i=S__default.default(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=i.shiftedBy(-1*s),l=c.multipliedBy(o),d=S__default.default(e.rewards),u=d.shiftedBy(-1*s),f=u.multipliedBy(o),m=S__default.default(e.claimedRewards),y=m.shiftedBy(-1*s),p=y.multipliedBy(o),b=S__default.default(n).shiftedBy(-1*s).multipliedBy(31536e3).multipliedBy(o),h=b.dividedBy(a.stakedValue).isFinite()?b.dividedBy(a.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(h=1/0),{rewardApr:h,totalRewardAmount:i.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:l.toNumber(),remaindRewardAmount:d.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:f.toNumber(),claimedRewardAmount:m.toNumber(),claimedRewardCoin:y.toNumber(),claimedRewardValue:p.toNumber(),rewardPerSec:n.toNumber()}},to=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)}),Et=(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,o)=>{let s=to(o),r=t.parseCoinNameFromType(s.pointType);return a[r]=s,a},{})}),Ut=(t,e,a,o,s)=>{let n=S__default.default(t.distributedPointPerPeriod).dividedBy(t.period),i=S__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),c=S__default.default.minimum(S__default.default(i).multipliedBy(t.distributedPointPerPeriod),S__default.default(t.points)),l=S__default.default(t.index).plus(c.dividedBy(t.weightedAmount).isFinite()?S__default.default(1e9).multipliedBy(c).dividedBy(t.weightedAmount):0),d=S__default.default(t.distributedPoint).plus(c),u=S__default.default(t.baseWeight),f=S__default.default(t.weightedAmount),m=f.shiftedBy(-1*s),y=m.multipliedBy(o),p=365*24*60*60,b=S__default.default(n).shiftedBy(-1*a),h=S__default.default(b).multipliedBy(p).multipliedBy(e),g=S__default.default(1e12),A=S__default.default(t.baseWeight).dividedBy(g),w=h.multipliedBy(A).dividedBy(y).isFinite()&&t.points>0?h.multipliedBy(A).dividedBy(y).toNumber():1/0;return {distributedPointPerSec:n.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:l.toNumber(),currentTotalDistributedPoint:d.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:f.toNumber(),weightedStakedCoin:m.toNumber(),weightedStakedValue:y.toNumber(),rewardApr:w,rewardPerSec:b.toNumber()}},ao=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)}),qt=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((a,o)=>{let s=ao(o),r=t.parseCoinNameFromType(s.pointType);return a[r]=s,a},{})}),ue=(...t)=>S__default.default(t.reduce((e,a)=>new S__default.default(a).lt(e)?a:e));var Pe=(t,e,a)=>{let o=Math.max(1,Math.floor(Math.log10(Math.abs(t))+1)),s=Math.max(Math.floor((o-1)/e),1)+1,r=Math.pow(10,-s);return r=a==="increase"?1-r:1+r,r};var Qt=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 o=new Date().getTime();return a.getTime()-o>126144e3*1e3&&a.setUTCDate(a.getUTCDate()-1),Math.floor(a.getTime()/1e3)},xe=(t,e)=>{let a=[];for(let o=0;o<t.length;o+=e)a.push(t.slice(o,o+e));return a},pe=t=>(t.endsWith("/")&&(t=t.slice(0,-1)),t);async function oo(t,e,...a){let o=a[a.length-1];if(typeof o=="object"&&o.indexer)try{return await t.apply(e,a)}catch(s){return console.warn(`Indexer requests failed: ${s.message}. Retrying without indexer..`),await t.apply(e,[...a.slice(0,-1),{...o,indexer:false}])}return await t.apply(e,a)}function L(t){return (...e)=>oo(t,this,...e)}var 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 Oe=t=>{if(typeof t=="object"&&"objectId"in t&&"owner"in t&&t.owner&&typeof t.owner=="object"&&"Shared"in t.owner&&"initial_shared_version"in t.owner.Shared)return {objectId:t.objectId,initialSharedVersion:t.owner.Shared.initial_shared_version.toString()};throw new Error("Invalid shared object data")},re=async(t,e)=>{if(typeof t=="string"){let a=await e.queryGetObject(t,{showOwner:true,showContent:false});return Oe(a.data)}else return Oe(t)},ne=async(t,e)=>{let a=[];for(let s=0;s<t.length;s++)typeof t[s]=="string"&&a.push(t[s]);let o=new Map;if(a.length>0){let s=await e.queryGetObjects(a,{showOwner:true,showContent:false});for(let r=0;r<a.length;r++)o.set(a[r],s[r]);}return t.map(s=>Oe(typeof s=="string"?o.get(s):s))};var no=async({address:t,scallopSuiKit:e})=>{let a=t.get("borrowIncentive.query"),o=t.get("borrowIncentive.incentivePools"),s=new suiKit.SuiTxBlock,r=`${a}::incentive_pools_query::incentive_pools_data`,n=[s.sharedObjectRef({...await re(o,e),mutable:true})];return (await e.queryInspectTxn({queryTarget:r,args:n,txBlock:s,keys:x.rpc.getInspectTxn({queryTarget:r,args:[o],node:e.currentFullNode})}))?.events[0].parsedJson},Wt=async(t,e=[...t.constants.whitelist.lending],a=false,o,s)=>{let r={};o=o??(await t.getMarketPools(void 0,{coinPrices:s,indexer:a})).pools,s=s??await t.getAllCoinPrices({marketPools:o});let n=await no(t);for(let i of n?.incentive_pools??[]){let c={},l=Et(t.utils,i),d=utils.normalizeStructTag(i.pool_type.name),u=t.utils.parseCoinNameFromType(d),f=s?.[u]??0,m=t.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[h,g]of Object.entries(l.poolPoints)){if(!g)continue;let A=g.pointType,w=t.utils.parseCoinNameFromType(A),T=t.utils.getCoinDecimal(w);if(T===void 0)throw new Error(`Coin decimal not found for ${w}`);let k=s?.[w]??0,R=t.utils.parseSymbol(w),B=t.utils.getCoinDecimal(w),M=Ut(g,k,T,f,m);g.points>M.accumulatedPoints&&(c[h]={symbol:R,coinName:w,coinType:A,coinDecimal:B,coinPrice:k,points:g.points,distributedPoint:g.distributedPoint,weightedAmount:g.weightedAmount,...M});}let y=S__default.default(l.staked),p=y.shiftedBy(-1*m),b=p.multipliedBy(f);r[u]={coinName:u,symbol:t.utils.parseSymbol(u),coinType:d,coinDecimal:m,coinPrice:f,stakedAmount:y.toNumber(),stakedCoin:p.toNumber(),stakedValue:b.toNumber(),points:c};}return r},Gt=async({utils:t},e,a=[...t.constants.whitelist.lending])=>{let o=new suiKit.SuiTxBlock,s=t.address.get("borrowIncentive.query"),r=t.address.get("borrowIncentive.incentiveAccounts"),n=`${s}::incentive_account_query::incentive_account_data`,[i,c]=await ne([r,e],t.scallopSuiKit),l=[o.sharedObjectRef({...i,mutable:true}),o.sharedObjectRef({...c,mutable:true})],u=(await t.scallopSuiKit.queryInspectTxn({queryTarget:n,args:l,txBlock:o,keys:x.rpc.getInspectTxn({queryTarget:n,args:[r,e],node:t.scallopSuiKit.currentFullNode})}))?.events[0]?.parsedJson;return Object.values(u?.pool_records??[]).reduce((m,y)=>{let p=qt(t,y),b=p.poolType,h=t.parseCoinNameFromType(b);return a&&a.includes(h)&&(m[h]=p),m},{})},zt=async({address:t,scallopSuiKit:e},a)=>{let o=t.get("borrowIncentive.object"),s=t.get("borrowIncentive.incentivePools"),r=t.get("vesca.object"),n=await e.queryGetObject(s);if(n?.data?.content?.dataType!=="moveObject")return null;let c=n.data.content.fields.ve_sca_bind.fields.id.id,l=`${o}::typed_id::TypedID<${r}::ve_sca::VeScaKey>`,d=await e.queryGetDynamicFieldObject({parentId:c,name:{type:l,value:a}});return d?.data?.content?.dataType!=="moveObject"?null:d.data.content.fields.value.fields.id},Ht=async({address:t,scallopSuiKit:e},a)=>{let o=t.get("borrowIncentive.object"),s=t.get("borrowIncentive.incentiveAccounts"),r=t.get("core.object"),n=await e.queryGetObject(s);if(n?.data?.content?.dataType!=="moveObject")return null;let i=n.data.content.fields.accounts.fields.id.id,c=await e.queryGetDynamicFieldObject({parentId:i,name:{type:`${o}::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 io=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()})}),co="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Re=async(t,e)=>{try{let a=t.parseCoinType(e).slice(2),o=t.address.get("core.market");if(!o)return null;let s=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:o,name:{type:co,value:a}}),r=io.safeParse(s?.data?.content);return r.success?r.data.fields.value:"0"}catch(a){return console.error(`Error in getSupplyLimit for ${e}: ${a.message}`),"0"}};var lo=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()})}),Xt="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",Yt=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"),o=[];if(!a)return o;let s=!1,r=null,n=i=>i.name.type===Xt;do{let i=await t.scallopSuiKit.queryGetDynamicFields({parentId:a,cursor:r,limit:10});if(!i)break;let c=i.data.filter(n).map(({name:l})=>`0x${l.value.type.name}`);o.push(...c),i&&i.hasNextPage&&i.nextCursor?(s=!0,r=i.nextCursor):s=!1;}while(s);return o}catch(a){return console.error(a),[]}},ae=async(t,e,a)=>{let o=t.constants.poolAddresses[e];if(o&&!a)return o.isIsolated;let s=t.address.get("core.market"),r=t.queryClient.getQueryData(["getDynamicFields",s]);if(r){let l=t.parseCoinType(e);return r.includes(l)}let n=t.parseCoinType(e).slice(2),i=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:Xt,value:n}}),c=lo.safeParse(i?.data?.content);return c.success?c.data.fields.value:false};var uo=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()})}),po="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Ie=async(t,e)=>{try{let a=t.parseCoinType(e).slice(2),o=t.address.get("core.market");if(!o)return null;let s=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:o,name:{type:po,value:a}}),r=uo.safeParse(s?.data?.content);return r.success?r.data.fields.value:"0"}catch(a){return console.error(`Error in getBorrowLimit for ${e}: ${a.message}`),"0"}};var fo="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",Zt=async({constants:t,scallopSuiKit:e},a,o)=>{let s=new Set(a),r=Object.fromEntries(Object.entries(t.coinTypeToCoinNameMap).filter(([l,d])=>s.has(d))),n=null,i=false,c=[];do{let l=await e.queryGetDynamicFields({parentId:fo,limit:10,cursor:n});if(!l)break;let{data:d,hasNextPage:u,nextCursor:f}=l,m=d.filter(y=>{let p=`0x${y.name.value.name}`;return !!r[p]}).map(y=>y.objectId)??[];c.push(...await e.queryGetObjects(m)),i=u,n=f;}while(i);return c.reduce((l,d)=>{if(d.content?.dataType==="moveObject"){let u=`0x${d.content.fields.name.fields.name}`,f=r[u];if(!f)return l;let y=+d.content.fields.value;l[f]=y/o;}return l},{})};var ta=async({utils:t,indexer:e},a=false,o)=>{o=o??await t.getCoinPrices()??{};let s={},r={};if(a){let g=await e.getMarket(),A=T=>{T.coinPrice=o[T.coinName]??T.coinPrice,T.coinWrappedType=t.getCoinWrappedType(T.coinName),s[T.coinName]=T;},w=T=>{T.coinPrice=o[T.coinName]??T.coinPrice,T.coinWrappedType=t.getCoinWrappedType(T.coinName),r[T.coinName]=T;};return Object.values(g.pools).filter(T=>!!T).forEach(A),Object.values(g.collaterals).filter(T=>!!T).forEach(w),{pools:s,collaterals:r}}let n=new suiKit.SuiTxBlock,i=t.address.get("core.packages.query.id"),c=t.address.get("core.market"),l=`${i}::market_query::market_data`,d=[n.sharedObjectRef({...await re(c,t.scallopSuiKit),mutable:true})],f=(await t.scallopSuiKit.queryInspectTxn({queryTarget:l,args:d,txBlock:n,keys:x.rpc.getInspectTxn({queryTarget:l,args:[c],node:t.scallopSuiKit.currentFullNode})}))?.events[0]?.parsedJson,m=(f?.pools??[]).filter(g=>{let A=utils.normalizeStructTag(g.type.name),w=t.parseCoinNameFromType(A);return t.constants.whitelist.lending.has(w)}),y=(f?.collaterals??[]).filter(g=>{let A=utils.normalizeStructTag(g.type.name),w=t.parseCoinNameFromType(A);return t.constants.whitelist.collateral.has(w)}),p=m.map(g=>t.parseCoinNameFromType(utils.normalizeStructTag(g.type.name))),[b,h]=await Promise.all([Promise.all(p.map(g=>Re(t,g))),Promise.all(p.map(g=>Ie(t,g)))]);for(let g=0;g<m.length;g++){let A=m[g],w=p[g],T=o[w]??0,k=et({...A,isIsolated:await ae(t,w),supplyLimit:b[g]??"0",borrowLimit:h[g]??"0"}),R=tt(t,k);s[w]={coinName:w,symbol:t.parseSymbol(w),marketCoinType:t.parseMarketCoinType(w),sCoinType:t.parseSCoinType(t.parseMarketCoinName(w))??"",coinWrappedType:t.getCoinWrappedType(w),coinPrice:T,...k,...R};}for(let g of y){let A=utils.normalizeStructTag(g.type.name),w=t.parseCoinNameFromType(A),T=o[w]??0,k=ke({...g,liquidationPenalty:g.liquidationPanelty,isIsolated:await ae(t,w)}),R=Ae(t,k);r[w]={coinName:w,symbol:t.parseSymbol(w),marketCoinType:t.parseMarketCoinType(w),coinWrappedType:t.getCoinWrappedType(w),coinPrice:T,...k,...R};}return {pools:s,collaterals:r}},aa=async({utils:t,scallopSuiKit:e},a)=>{let o=["lendingPoolAddress","collateralPoolAddress","borrowDynamic","interestModel","riskModel","borrowFeeKey","supplyLimitKey","borrowLimitKey","isolatedAssetKey"],s=[];for(let u of a){let f=t.constants.poolAddresses[u];for(let m of o)f?.[m]&&f[m]!==""&&s.push(f[m]);}let r=xe(s,50),c=(await Promise.all(r.map(u=>e.queryGetObjects(u,{showContent:true})))).flat().reduce((u,f)=>(u[f.objectId]=f,u),{}),d={};for(let u of a){let f=t.constants.poolAddresses[u];d[u]={balanceSheet:c[f?.lendingPoolAddress??""],collateralStat:c[f?.collateralPoolAddress??""],borrowDynamic:c[f?.borrowDynamic??""],interestModel:c[f?.interestModel??""],riskModel:c[f?.riskModel??""],borrowFeeKey:c[f?.borrowFeeKey??""],supplyLimitKey:c[f?.supplyLimitKey??""],borrowLimitKey:c[f?.borrowLimitKey??""],isolatedAssetKey:c[f?.isolatedAssetKey??""]};}return d},oa=async(t,e,a=false,o)=>{o=o??await t.utils.getCoinPrices();let s={},r={};if(a){let i=await t.indexer.getMarket(),c=d=>{d.coinPrice=o[d.coinName]??d.coinPrice,d.coinWrappedType=t.utils.getCoinWrappedType(d.coinName),s[d.coinName]=d;},l=d=>{d.coinPrice=o[d.coinName]??d.coinPrice,d.coinWrappedType=t.utils.getCoinWrappedType(d.coinName),r[d.coinName]=d;};return Object.values(i.pools).filter(d=>!!d).forEach(c),Object.values(i.collaterals).filter(d=>!!d).forEach(l),{pools:s,collaterals:r}}let n=await aa(t,e);return await Promise.allSettled(e.map(async i=>{try{let c=await yo(t,i,a,o?.[i]??0,n[i]);c?.marketPool&&(s[i]=c?.marketPool),c?.collateral&&(r[i]=c.collateral);}catch(c){console.error(c);}})),{pools:s,collaterals:r}},bo=async(t,{balanceSheet:e,borrowDynamic:a,collateralStat:o,interestModel:s,riskModel:r,borrowFeeKey:n,supplyLimitKey:i,borrowLimitKey:c})=>{if(!e||!a||!s)throw new Error("Missing required market objects");let l=W(e),d=W(s),u=W(a),f=n?W(n):{value:"0"},m=i?W(i):"0",y=c?W(c):"0",p=r?W(r):void 0,b=o?W(o):void 0,h=await ae(t,t.parseCoinNameFromType(`0x${d.type.fields.name}`)),g=p&&b?{type:d.type.fields,collateralFactor:p.collateral_factor.fields,liquidationFactor:p.liquidation_factor.fields,liquidationPenalty:p.liquidation_penalty.fields,liquidationDiscount:p.liquidation_discount.fields,liquidationReserveFactor:p.liquidation_revenue_factor.fields,maxCollateralAmount:p.max_collateral_amount,totalCollateralAmount:b.amount,isIsolated:h}:void 0;return {type:d.type.fields,maxBorrowRate:d.max_borrow_rate.fields,interestRate:u.interest_rate.fields,interestRateScale:u.interest_rate_scale,borrowIndex:u.borrow_index,lastUpdated:u.last_updated,cash:l.cash,debt:l.debt,marketCoinSupply:l.market_coin_supply,reserve:l.revenue,reserveFactor:d.revenue_factor.fields,borrowWeight:d.borrow_weight.fields,borrowFeeRate:f,baseBorrowRatePerSec:d.base_borrow_rate_per_sec.fields,borrowRateOnHighKink:d.borrow_rate_on_high_kink.fields,borrowRateOnMidKink:d.borrow_rate_on_mid_kink.fields,highKink:d.high_kink.fields,midKink:d.mid_kink.fields,minBorrowAmount:d.min_borrow_amount,supplyLimit:m,borrowLimit:y,isIsolated:h,parsedOriginMarketCollateral:g}},yo=async(t,e,a=false,o,s)=>{if(o=o??(await t.utils.getCoinPrices())?.[e],a){let d=await t.indexer.getMarketPool(e);if(!d)return;d.coinPrice=o??d.coinPrice,d.coinWrappedType=t.utils.getCoinWrappedType(d.coinName);let u;return t.constants.whitelist.collateral.has(e)&&(u=await t.indexer.getMarketCollateral(e),u.coinPrice=o??u.coinPrice,u.coinWrappedType=t.utils.getCoinWrappedType(u.coinName)),{marketPool:d,collateral:u}}if(s??=(await aa(t,[e]))[e],!s)throw new Error(`Failed to fetch required market objects for ${e}`);let r=await bo(t.utils,s),n=et(r),i=tt(t.utils,n),c=r.parsedOriginMarketCollateral?ke(r.parsedOriginMarketCollateral):void 0,l=()=>({coinName:e,symbol:t.utils.parseSymbol(e),marketCoinType:t.utils.parseMarketCoinType(e),coinType:t.utils.parseCoinType(e)});return {marketPool:{...l(),sCoinType:t.utils.parseSCoinType(t.utils.parseMarketCoinName(e))??"",coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:o??0,highKink:n.highKink,midKink:n.midKink,reserveFactor:n.reserveFactor,borrowWeight:n.borrowWeight,borrowFee:n.borrowFee,marketCoinSupplyAmount:n.marketCoinSupplyAmount,minBorrowAmount:n.minBorrowAmount,...i},collateral:c?{...l(),coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:o,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...Ae(t.utils,c)}:void 0}},sa=async({utils:t,indexer:e,scallopSuiKit:a},o=[...t.constants.whitelist.collateral],s=false)=>{let r=t.address.get("core.market"),n=await t.getCoinPrices()??{},i={};if(s){let l=await e.getMarketCollaterals(),d=u=>{o.includes(u.coinName)&&(u.coinPrice=n[u.coinName]??u.coinPrice,u.coinWrappedType=t.getCoinWrappedType(u.coinName),i[u.coinName]=u);};return Object.values(l).filter(u=>!!u).forEach(d),i}let c=await a.queryGetObject(r);return await Promise.allSettled(o.map(async l=>{let d=await at({utils:t,indexer:e,scallopSuiKit:a},l,s,c?.data,n?.[l]);d&&(i[l]=d);})),i},at=async({utils:t,indexer:e,scallopSuiKit:a},o,s=false,r,n)=>{if(n=n??(await t.getCoinPrices())?.[o],s){let T=await e.getMarketCollateral(o);return T.coinPrice=n??T.coinPrice,T.coinWrappedType=t.getCoinWrappedType(T.coinName),T}let i=t.address.get("core.market");if(r=r||(await a.queryGetObject(i))?.data,!(r&&r.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let c=r.content.fields,l=t.parseCoinType(o),d=c.risk_models.fields.table.fields.id.id,u=c.collateral_stats.fields.table.fields.id.id,f={type:"0x1::type_name::TypeName",value:{name:l.substring(2)}},[m,y]=await Promise.all([a.queryGetDynamicFieldObject({parentId:d,name:f}),a.queryGetDynamicFieldObject({parentId:u,name:f})]),p=m?.data;if(!(p&&p.content&&"fields"in p.content))throw new Error(`Failed to fetch riskModelDynamicFieldObject for ${m?.error?.code.toString()}: `);let b=p.content.fields.value.fields,h=y?.data;if(!(h&&h.content&&"fields"in h.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${o}: ${y?.error?.code.toString()}`);let g=h.content.fields.value.fields,A=ke({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 ae(t,o)}),w=Ae(t,A);return {coinName:o,symbol:t.parseSymbol(o),coinType:t.parseCoinType(o),marketCoinType:t.parseMarketCoinType(o),coinWrappedType:t.getCoinWrappedType(o),coinPrice:n??0,collateralFactor:A.collateralFactor,liquidationFactor:A.liquidationFactor,liquidationDiscount:A.liquidationDiscount,liquidationPenalty:A.liquidationPenalty,liquidationReserveFactor:A.liquidationReserveFactor,...w}},ie=async({utils:t},e)=>{let a=e,o=t.constants.protocolObjectId,s=[],r=false,n=null;do{let d=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:`${o}::obligation::ObligationKey`},options:{showContent:true},cursor:n,limit:10});if(!d)break;s.push(...d.data),d.hasNextPage&&d.nextCursor?(r=true,n=d.nextCursor):r=false;}while(r);let i=s.filter(d=>!!d.data),c=[],l=await t.scallopSuiKit.queryGetObjects(i.map(d=>d.data?.content).filter(d=>d?.dataType==="moveObject").map(d=>d.fields.ownership.fields.of));return await Promise.allSettled(i.map(async({data:d},u)=>{let f=d?.objectId,m=d?.content;if(f&&m&&"fields"in m){let y=m.fields,p=String(y.ownership.fields.of),b=await ot(t,l[u]);c.push({id:p,keyId:f,locked:b});}})),c},ot=async({scallopSuiKit:t},e)=>{let a=typeof e=="string"?(await t.queryGetObject(e))?.data:e,o=false;return a&&a?.content?.dataType==="moveObject"&&"lock_key"in a.content.fields&&(o=!!a.content.fields.lock_key),o},je=async({address:t,scallopSuiKit:e},a)=>{let o=new suiKit.SuiTxBlock,s=t.get("core.packages.query.id"),r=t.get("core.version"),n=t.get("core.market"),i=`${s}::obligation_query::obligation_data`,[c,l,d]=await ne([r,n,a],e),u=[o.sharedObjectRef({...c,mutable:false}),o.sharedObjectRef({...l,mutable:true}),o.sharedObjectRef({...d,mutable:true}),{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}];return (await e.queryInspectTxn({queryTarget:i,args:u,txBlock:o,keys:x.rpc.getInspectTxn({queryTarget:i,args:[r,n,a],node:e.currentFullNode})}))?.events[0]?.parsedJson},ra=async({utils:t},e=[...t.constants.whitelist.lending],a)=>{let o=a??t.walletAddress,s={};return await Promise.allSettled(e.map(async r=>{let n=await st({utils:t},r,o);s[r]=n;})),s},st=async({utils:t},e,a)=>{let o=a??t.walletAddress,s=t.parseCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:o,coinType:s});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 o=a??t.walletAddress,s={};return await Promise.allSettled(e.map(async r=>{let n=await rt({utils:t},r,o);s[r]=n;})),s},rt=async({utils:t},e,a)=>{let o=a??t.walletAddress,s=t.parseMarketCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:o,coinType:s});return S__default.default(r?.totalBalance??"0").toNumber()},ia=async({utils:t},e,a=1e4)=>{let o=[],s={},r=e.reduce((c,l)=>{let d=t.parseCoinType(l).slice(2);return c[d]=l,c},{}),n=e.map(c=>{let l=t.constants.poolAddresses[c]?.flashloanFeeObject;return l||(o.push(c),null)}).filter(c=>!!c),i=await t.scallopSuiKit.queryGetObjects(n);if(o.length>0){let c=await Zt(t,o,a);s={...s,...c};}return s={...s,...i.reduce((c,l)=>{if(l.content?.dataType==="moveObject"){let d=l.content.fields,u=l.content.fields.name.fields.name,f=+d.value;c[r[u]]=f/a;}return c},{})},s};var go=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})),ho=zod.z.object({value:zod.z.string()}).transform(t=>S__default.default(t.value).shiftedBy(-9).toNumber()),ca=async(t,e)=>{let a=t.address.get("loyaltyProgram.rewardPool"),o=await t.scallopSuiKit.queryGetObject(a);if(o?.data?.content?.dataType!=="moveObject")return null;let s=o.data.content.fields,{isClaimEnabled:r,totalPoolReward:n}=go.parse(s),i={pendingReward:0,totalPoolReward:n,isClaimEnabled:r};if(e=e??(await t.getVeScas())[0]?.keyObject,!e)return i;let c=t.address.get("loyaltyProgram.userRewardTableId"),l=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(l?.data?.content?.dataType!=="moveObject")return i;let d=l.data.content.fields;return i.pendingReward=ho.parse(d),i},So=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})),wo=zod.z.object({value:zod.z.string()}).transform(t=>S__default.default(t.value).shiftedBy(-9).toNumber()),la=async(t,e)=>{let a=t.address.get("veScaLoyaltyProgram.veScaRewardPool"),o=await t.scallopSuiKit.queryGetObject(a);if(o?.data?.content?.dataType!=="moveObject")return null;let s=o.data.content.fields,{isClaimEnabled:r,reserveVeScaKey:n}=So.parse(s),i={pendingVeScaReward:0,pendingScaReward:0,totalPoolReward:0,isClaimEnabled:r},c;if(n&&(c=await t.getVeSca(n),i.totalPoolReward=c?.currentVeScaBalance??0),e=e??(await t.getVeScas())[0]?.keyObject,!e)return i;let l=t.address.get("veScaLoyaltyProgram.veScaRewardTableId"),d=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:l,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(d?.data?.content?.dataType!=="moveObject")return i;let u=d.data.content.fields;i.pendingScaReward=wo.parse(u);let f=Math.max((c?.unlockAt??0)-Date.now(),0);return i.pendingVeScaReward=i.pendingScaReward*(Math.floor(f/1e3)/126144e3),i};var da=async(t,e=[...t.constants.whitelist.lending],a,o,s,r=false)=>{let n=e.map(m=>t.utils.parseMarketCoinName(m)),i=n.filter(m=>t.constants.whitelist.spool.has(m));s=s??await t.utils.getCoinPrices(),o=o??(await t.getMarketPools(e,{indexer:r,coinPrices:s})).pools;let c=await t.getSpools(i,{indexer:r,marketPools:o,coinPrices:s}),[l,d,u]=await Promise.all([t.getCoinAmounts(e,a),t.getMarketCoinAmounts(n,a),t.getAllStakeAccounts(a)]),f={};return await Promise.allSettled(e.map(async m=>{let y=i.find(b=>b===t.utils.parseMarketCoinName(m)),p=t.utils.parseMarketCoinName(m);f[m]=await it(t,m,a,r,o?.[m],y?c[y]:void 0,y?u[y]:[],l?.[m],d?.[p],s?.[m]??0);})),f},it=async(t,e,a,o=false,s,r,n,i,c,l,d)=>{let u=t.utils.parseMarketCoinName(e);if(l=l??(await t.utils.getCoinPrices())?.[e]??0,s=s??await t.getMarketPool(e,{indexer:o,coinPrice:l}),!s)throw new Error(`Failed to fetch marketPool for ${e}`);r=r??t.constants.whitelist.spool.has(u)?await t.getSpool(u,{indexer:o,marketPool:s,coinPrices:{[e]:l}}):void 0,n=n||t.constants.whitelist.spool.has(u)?await t.getStakeAccounts(u,a):[],i=i||await t.getCoinAmount(e,a),c=c||await t.getMarketCoinAmount(u,a),d=d||await t.getSCoinAmount(u,a);let f=t.utils.getCoinDecimal(e),m=S__default.default(0),y=S__default.default(0),p=S__default.default(0),b=S__default.default(0),h=S__default.default(0),g=S__default.default(0),A=S__default.default(0),w=S__default.default(0),T=S__default.default(0);if(r)for(let E of n){let N=S__default.default(E.staked),_=N.shiftedBy(-1*r.coinDecimal),K=N.multipliedBy(s?.conversionRate??1),q=K.shiftedBy(-1*r.coinDecimal),D=q.multipliedBy(r.coinPrice);m=m.plus(N),y=y.plus(_),p=p.plus(K),b=b.plus(q),h=h.plus(D),g=g.plus(N),A=g.shiftedBy(-1*r.coinDecimal);let X=r.currentPointIndex?S__default.default(r.currentPointIndex-E.index).dividedBy(1e9):1;w=w.plus(N.multipliedBy(X).plus(E.points).multipliedBy(r.exchangeRateNumerator).dividedBy(r.exchangeRateDenominator)),T=w.shiftedBy(-1*r.rewardCoinDecimal);}let k=S__default.default(c).plus(S__default.default(d)).multipliedBy(s?.conversionRate??1),R=k.shiftedBy(-1*f),B=R.multipliedBy(l??0),M=S__default.default(l??0).multipliedBy(s?.conversionRate??1),J=S__default.default(c).plus(S__default.default(d)),U=J.shiftedBy(-1*f),P=S__default.default(i),O=P.shiftedBy(-1*f),I=ue(k,s?.supplyAmount??1/0).plus(p),v=ue(R,s?.supplyCoin??1/0).plus(b);return {coinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(e),marketCoinType:t.utils.parseMarketCoinType(e),sCoinType:s?.sCoinType??"",coinDecimal:f,coinPrice:l??0,conversionRate:s?.conversionRate??1,marketCoinPrice:M.toNumber(),supplyApr:s?.supplyApr??0,supplyApy:s?.supplyApy??0,rewardApr:r?.rewardApr??0,suppliedAmount:k.plus(p).toNumber(),suppliedCoin:R.plus(b).toNumber(),suppliedValue:B.plus(h).toNumber(),stakedMarketAmount:m.toNumber(),stakedMarketCoin:y.toNumber(),stakedAmount:p.toNumber(),stakedCoin:b.toNumber(),stakedValue:h.toNumber(),unstakedMarketAmount:J.toNumber(),unstakedMarketCoin:U.toNumber(),unstakedAmount:k.toNumber(),unstakedCoin:R.toNumber(),unstakedValue:B.toNumber(),availableSupplyAmount:P.toNumber(),availableSupplyCoin:O.toNumber(),availableWithdrawAmount:I.toNumber(),availableWithdrawCoin:v.toNumber(),availableStakeAmount:J.toNumber(),availableStakeCoin:U.toNumber(),availableUnstakeAmount:g.toNumber(),availableUnstakeCoin:A.toNumber(),availableClaimAmount:w.toNumber(),availableClaimCoin:T.toNumber(),isIsolated:s?s.isIsolated:false}},ua=async(t,e,a,o,s=false)=>{a=a??await t.getMarketPools(void 0,{indexer:s}),o=o??await t.getAllCoinPrices({marketPools:a.pools});let[r,n]=await Promise.all([t.getCoinAmounts(void 0,e),t.getObligations(e)]),i=await t.scallopSuiKit.queryGetObjects(n.map(l=>l.id)),c={};return await Promise.allSettled(n.map(async(l,d)=>{c[l.keyId]=await Ne(t,i[d]??l.id,e,s,a,o,r);})),c},pa=async(t,e,a,o,s=false)=>{a=a??await t.getMarketPools(void 0,{indexer:s}),o=o??await t.getAllCoinPrices({marketPools:a.pools});let r=[];return await Promise.allSettled(e.map(async n=>{let i=await Ne(t,n,"",s,a,o,{});i&&r.push(i);})),r},Ne=async(t,e,a,o=false,s,r,n)=>{s=s??await t.getMarketPools(void 0,{indexer:o}),r=r??await t.getAllCoinPrices({marketPools:s.pools}),n=n??await t.getCoinAmounts(Array.from(t.constants.whitelist.lending),a);let[i,c,l]=await Promise.all([t.queryObligation(e),t.getBorrowIncentivePools(void 0,{coinPrices:r,marketPools:s.pools}),t.getBorrowIncentiveAccounts(e)]),d={},u={},f={},m=0,y=S__default.default(0),p=S__default.default(0),b=S__default.default(0),h=0,g=0,A=S__default.default(0),w=S__default.default(0);for(let P of Array.from(t.constants.whitelist.collateral)){let O=i?.collaterals.find(N=>{let _=t.utils.parseCoinNameFromType(N.type.name);return P===_}),I=s.collaterals[P],v=t.utils.getCoinDecimal(P),F=r?.[P]??0,E=n?.[P]??0;if(I){let N=S__default.default(O?.amount??0),_=N.shiftedBy(-1*v),K=_.multipliedBy(F),q=K.multipliedBy(I.collateralFactor),D=K.multipliedBy(I.liquidationFactor),Q=S__default.default(E),X=Q.shiftedBy(-1*v);y=y.plus(K),p=p.plus(q),b=b.plus(D),N.isGreaterThan(0)&&m++,d[P]={coinName:P,coinType:t.utils.parseCoinType(P),symbol:t.utils.parseSymbol(P),coinDecimal:v,coinPrice:F,depositedAmount:N.toNumber(),depositedCoin:_.toNumber(),depositedValue:K.toNumber(),borrowCapacityValue:q.toNumber(),requiredCollateralValue:D.toNumber(),availableDepositAmount:Q.toNumber(),availableDepositCoin:X.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let T=[...new Set([...Object.values(s.pools).filter(P=>!!P).map(P=>P.coinName)])];for(let[P,O]of Object.entries(l)){if(!O)continue;let I=P,v=c[I];if(v){let F=[];Object.entries(O.pointList).forEach(([E,N])=>{let _=v.points[t.utils.parseSCoinTypeNameToMarketCoinName(E)];if(N&&_){let K=S__default.default(0),q=S__default.default(0),D=S__default.default(N.weightedAmount),X=_.currentPointIndex?Math.max(S__default.default(_.currentPointIndex-N.index).dividedBy(1e9).toNumber(),0):1;K=K.plus(D.multipliedBy(X).plus(N.points)),q=K.shiftedBy(-1*_.coinDecimal);let ee=S__default.default(1e12),se=S__default.default(_.baseWeight).dividedBy(ee),we=S__default.default(N.weightedAmount).div(S__default.default(O.debtAmount).multipliedBy(se)).isFinite()?S__default.default(N.weightedAmount).div(S__default.default(O.debtAmount).multipliedBy(se)).toNumber():1,vt=isFinite(_.rewardApr)?_.rewardApr:0;K.isGreaterThanOrEqualTo(0)&&F.push({coinName:_.coinName,coinType:_.coinType,symbol:_.symbol,coinDecimal:_.coinDecimal,coinPrice:_.coinPrice,weightedBorrowAmount:D.toNumber(),availableClaimAmount:K.toNumber(),availableClaimCoin:q.toNumber(),baseRewardApr:vt,boostedRewardApr:vt*we,maxBoost:1/se.toNumber(),boostValue:we});}}),Object.keys(v.points).some(E=>{let N=v.points[E]?.rewardApr;return N!==1/0&&typeof N=="number"&&N>0})&&O.debtAmount>0&&g++,f[I]={coinName:v.coinName,coinType:v.coinType,symbol:v.symbol,coinDecimal:v.coinDecimal,coinPrice:v.coinPrice,rewards:F};}}for(let P of T){let O=i?.debts.find(N=>{let _=t.utils.parseCoinNameFromType(N.type.name);return P===_}),I=s.pools[P],v=t.utils.getCoinDecimal(P),F=r?.[P]??0,E=n?.[P]??0;if(I){let N=O?.borrowIndex?I.borrowIndex/Number(O.borrowIndex)-1:0,_=S__default.default(O?.amount??0).multipliedBy(N+1),K=_.shiftedBy(-1*v),q=_,D=q.shiftedBy(-1*v),Q=S__default.default(E),X=Q.shiftedBy(-1*v),ee=D.multipliedBy(F),se=ee.multipliedBy(I.borrowWeight);A=A.plus(ee),w=w.plus(se),_.isGreaterThan(0)&&h++,u[P]={coinName:P,coinType:t.utils.parseCoinType(P),symbol:t.utils.parseSymbol(P),coinDecimal:v,coinPrice:F,borrowedAmount:_.toNumber(),borrowedCoin:K.toNumber(),borrowedValue:ee.toNumber(),borrowedValueWithWeight:se.toNumber(),borrowIndex:Number(O?.borrowIndex??0),requiredRepayAmount:q.toNumber(),requiredRepayCoin:D.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:Q.toNumber(),availableRepayCoin:X.toNumber(),rewards:(f[P]?.rewards??[]).filter(({weightedBorrowAmount:we})=>we>0)};}}let k=b.isZero()?w.isGreaterThan(0)?S__default.default(100):S__default.default(0):w.dividedBy(b);k=k.isLessThan(1)?k:S__default.default(1);let R=y.minus(A).isGreaterThan(0)?y.minus(A):S__default.default(0),B=p.minus(w).isGreaterThan(0)?p.minus(w):S__default.default(0),M=w.isGreaterThan(0)?b:S__default.default(0),J=w.minus(M).isGreaterThan(0)?w.minus(M):S__default.default(0),U={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:y.toNumber(),totalBorrowedValue:A.toNumber(),totalBalanceValue:R.toNumber(),totalBorrowCapacityValue:p.toNumber(),totalAvailableCollateralValue:B.toNumber(),totalBorrowedValueWithWeight:w.toNumber(),totalRequiredCollateralValue:M.toNumber(),totalUnhealthyCollateralValue:J.toNumber(),totalRiskLevel:k.toNumber(),totalDepositedPools:m,totalBorrowedPools:h,totalRewardedPools:g,collaterals:d,debts:u,borrowIncentives:f};for(let[P,O]of Object.entries(U.collaterals)){if(!O)continue;let I=s.collaterals[P];if(I){let v=S__default.default(U.totalAvailableCollateralValue).dividedBy(I.collateralFactor).dividedBy(I.coinPrice).shiftedBy(I.coinDecimal);v=U.totalBorrowedValueWithWeight===0?S__default.default(O.depositedAmount):ue(v.multipliedBy(Pe(S__default.default(U.totalAvailableCollateralValue).dividedBy(I.collateralFactor).toNumber(),3,"increase")).toNumber(),O.depositedAmount,I.depositAmount),O.availableWithdrawAmount=v.toNumber(),O.availableWithdrawCoin=v.shiftedBy(-1*O.coinDecimal).toNumber();}}for(let[P,O]of Object.entries(U.debts)){if(!O)continue;let I=s.pools[P];if(I){let v=S__default.default(O.requiredRepayAmount).multipliedBy(Pe(O.borrowedValue,3,"decrease")),F=S__default.default(U.totalAvailableCollateralValue).dividedBy(I.borrowWeight).shiftedBy(I.coinDecimal).dividedBy(I.coinPrice);F=U.totalAvailableCollateralValue!==0&&S__default.default(I.maxBorrowCoin).isGreaterThan(I.borrowCoin)?ue(F.multipliedBy(Pe(F.shiftedBy(-1*I.coinDecimal).multipliedBy(I.coinPrice).toNumber(),3,"increase")).toNumber(),I.supplyAmount):S__default.default(0),O.availableBorrowAmount=F.toNumber(),O.availableBorrowCoin=F.shiftedBy(-1*O.coinDecimal).toNumber(),O.requiredRepayAmount=v.toNumber(),O.requiredRepayCoin=v.shiftedBy(-1*O.coinDecimal).toNumber();}}return U},fa=async(t,e=false)=>{let a=S__default.default(0),o=S__default.default(0),s=S__default.default(0);if(e){let i=await t.indexer.getTotalValueLocked();return {supplyValue:i.supplyValue,supplyValueChangeRatio:i.supplyValueChangeRatio,borrowValue:i.borrowValue,borrowValueChangeRatio:i.borrowValueChangeRatio,totalValue:i.totalValue,totalValueChangeRatio:i.totalValueChangeRatio,supplyLendingValue:i.supplyLendingValue,supplyLendingValueChangeRatio:i.supplyLendingValueChangeRatio,supplyCollateralValue:i.supplyCollateralValue,supplyCollateralValueChangeRatio:i.supplyCollateralValueChangeRatio}}let r=await t.getMarketPools(void 0,{indexer:e});for(let i of Object.values(r.pools))i&&(a=a.plus(S__default.default(i.supplyCoin).multipliedBy(i.coinPrice)),s=s.plus(S__default.default(i.borrowCoin).multipliedBy(i.coinPrice)));for(let i of Object.values(r.collaterals))i&&(o=o.plus(S__default.default(i.depositCoin).multipliedBy(i.coinPrice)));return {supplyValue:a.plus(o).toNumber(),supplyLendingValue:a.toNumber(),supplyCollateralValue:o.toNumber(),borrowValue:s.toNumber(),totalValue:a.plus(o).minus(s).toNumber()}},ma=async(t,e,a=false)=>{let o=await t.getAllCoinPrices({indexer:a}),s=await t.getMarketPools(void 0,{indexer:a,coinPrices:o}),[r,n,i]=await Promise.all([t.getLendings(void 0,e,{indexer:a,marketPools:s.pools,coinPrices:o}),t.getObligationAccounts(e,{indexer:a,market:s,coinPrices:o}),t.getVeScas({walletAddress:e,excludeEmpty:true})]),c=Object.values(r).filter(p=>!!p&&p.availableWithdrawCoin>0).map(p=>({suppliedCoin:p.availableWithdrawCoin,suppliedValue:p.suppliedValue,stakedCoin:p.availableUnstakeCoin,coinName:p.coinName,symbol:p.symbol,coinType:p.coinType,coinPrice:p.coinPrice,coinDecimals:p.coinDecimal,supplyApr:p.supplyApr,supplyApy:p.supplyApy,incentiveApr:isFinite(p.rewardApr)?p.rewardApr:0})),l=Object.values(n).filter(p=>!!p&&(p.totalBorrowedValueWithWeight>0||p.totalDepositedValue>0)).map(p=>({obligationId:p.obligationId,totalDebtsInUsd:p.totalBorrowedValueWithWeight,totalCollateralInUsd:p.totalDepositedValue,riskLevel:p.totalRiskLevel,availableCollateralInUsd:p.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:p.totalUnhealthyCollateralValue,collaterals:Object.values(p.collaterals).filter(b=>!!b&&b.depositedCoin>0).map(b=>({coinName:b.coinName,symbol:b.symbol,coinDecimals:b.coinDecimal,coinType:b.coinType,coinPrice:b.coinPrice,depositedCoin:b.depositedCoin,depositedValueInUsd:b.depositedValue})),borrowedPools:Object.values(p.debts).filter(b=>!!b&&b.borrowedCoin>0).map(b=>({coinName:b.coinName,symbol:b.symbol,coinDecimals:b.coinDecimal,coinType:b.coinType,coinPrice:b.coinPrice,borrowedCoin:b.borrowedCoin,borrowedValueInUsd:b.borrowedValueWithWeight,borrowApr:s.pools[b.coinName]?.borrowApr,borrowApy:s.pools[b.coinName]?.borrowApy,incentiveInfos:(p.borrowIncentives[b.coinName]?.rewards??[]).filter(h=>!!h&&isFinite(h.baseRewardApr)).map(h=>({coinName:h.coinName,symbol:h.symbol,coinType:h.coinType,boostValue:h.boostValue,maxBoost:h.maxBoost,incentiveApr:h.baseRewardApr,boostedIncentiveApr:h.boostedRewardApr}))}))})),d="sui",u="SUI",f=Object.values(r).reduce((p,b)=>{if(b){if(b.availableClaimCoin===0)return p;p[d]?p[d].pendingRewardInCoin+=b.availableClaimCoin:p[d]={symbol:u,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:o[d]??0,pendingRewardInCoin:b.availableClaimCoin};}return p},{}),m=Object.values(n).filter(p=>!!p).reduce((p,b)=>(Object.values(b.borrowIncentives).forEach(h=>{h?.rewards.forEach(g=>{if(g.availableClaimCoin===0)return p;p[g.coinName]?p[g.coinName].pendingRewardInCoin+=g.availableClaimCoin:p[g.coinName]={symbol:g.symbol,coinType:g.coinType,coinPrice:g.coinPrice,pendingRewardInCoin:g.availableClaimCoin};});}),p),{}),y=i.map(({keyId:p,lockedScaCoin:b,currentVeScaBalance:h,unlockAt:g})=>({veScaKey:p,coinPrice:o.sca??0,lockedScaInCoin:b,lockedScaInUsd:b*(o.sca??0),currentVeScaBalance:h,remainingLockPeriodInDays:g-Date.now()>0?(g-Date.now())/864e5:0,unlockAt:g}));return {totalSupplyValue:c.reduce((p,b)=>(p+=b.suppliedValue,p),0),...l.reduce((p,b)=>(p.totalDebtValue+=b.totalDebtsInUsd,p.totalCollateralValue+=b.totalCollateralInUsd,p),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:y.reduce((p,b)=>(p+=b.lockedScaInUsd,p),0),lendings:c,borrowings:l,pendingRewards:{lendings:Object.entries(f).reduce((p,[b,h])=>(p.push({...h,coinName:"sui",pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),p),[]),borrowIncentives:Object.entries(m).reduce((p,[b,h])=>(p.push({coinName:b,...h,pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),p),[])},veScas:y}};var ba=async(t,e,a,o=false)=>{if(a=a??(o?await t.getCoinPricesByIndexer():await t.utils.getCoinPrices()),e=e??(await t.getMarketPools(void 0,{coinPrices:a,indexer:o})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let s={};return t.constants.whitelist.scoin.forEach(r=>{let n=t.utils.parseCoinName(r);s[r]=S__default.default(a[n]??0).multipliedBy(e[n]?.conversionRate??1).toNumber();}),{...a,...s}};var ya=async({address:t,scallopSuiKit:e},a)=>{let o=t.get("referral.bindingTableId"),s=await e.queryGetDynamicFieldObject({parentId:o,name:{type:"address",value:a}});return s?.data?.content?.dataType!=="moveObject"?null:s.data.content.fields.value};var ga=async({utils:t},e)=>{let a=new suiKit.SuiTxBlock,o=t.address.get("scoin.id"),s=t.getSCoinTreasury(e),r=[a.sharedObjectRef({...await re(s,t.scallopSuiKit),mutable:false})],n=[t.parseSCoinType(e),t.parseUnderlyingSCoinType(e)],i=`${o}::s_coin_converter::total_supply`,l=(await t.scallopSuiKit.queryInspectTxn({queryTarget:i,args:r,typeArgs:n,txBlock:a,keys:x.rpc.getInspectTxn({queryTarget:i,args:[s],node:t.scallopSuiKit.currentFullNode})}))?.results;if(l&&l[0]?.returnValues){let d=Uint8Array.from(l[0].returnValues[0][0]),u=l[0].returnValues[0][1];return xo__default.default(u==="u64","Result type is not u64"),S__default.default(bcs.bcs.u64().parse(d)).shiftedBy(t.getCoinDecimal(t.parseCoinName(e))).toNumber()}return 0},ha=async({utils:t},e=[...t.constants.whitelist.scoin],a)=>{let o=a||t.suiKit.currentAddress,s={};return await Promise.allSettled(e.map(async r=>{let n=await lt({utils:t},r,o);s[r]=n;})),s},lt=async({utils:t},e,a)=>{let o=a||t.suiKit.currentAddress,s=t.parseSCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:o,coinType:s});return S__default.default(r?.totalBalance??"0").toNumber()},Oo=(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")},Sa=async(t,e,a,o)=>{Oo(t.utils,e,a);let s=t.utils.parseCoinName(e),r=t.utils.parseCoinName(a),n=await Promise.all([t.getMarketPool(s),t.getMarketPool(r)]);if(n.some(u=>!u))throw new Error("Failed to fetch the lendings data");if(n.some(u=>u?.conversionRate===0))throw new Error("Conversion rate cannot be zero");let i=n[0].conversionRate,c=1/n[1].conversionRate,d=await(async()=>{let u=await t.utils.getCoinPrices();if(!u[s]||!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[s]/u[r]})();return S__default.default(i).multipliedBy(d).multipliedBy(c).toNumber()};var wa=async(t,e)=>{let a=["spool","spoolReward","sCoinTreasury"],o=[];for(let c of e){let l=t.constants.poolAddresses[c];for(let d of a)l?.[d]&&l[d]!==""&&o.push(l[d]);}let s=[],r=xe(o,50);for(let c of r){let l=await t.scallopSuiKit.queryGetObjects(c);l.length>0&&s.push(...l);}let n=s.reduce((c,l)=>(c[l.objectId]=l,c),{}),i={};for(let c of e){let l=t.constants.poolAddresses[c];for(let d of a){let u=l?.[d];u&&u!==""&&(i[c]||(i[c]={}),i[c][d]=n[u]);}}return i},Ro=({spool:t,spoolReward:e})=>{if(!t||!e)throw new Error("spool or spoolReward is undefined");let a=W(t),o=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,...o}},Ca=async(t,e=[...t.constants.whitelist.spool],a=false,o,s)=>{let r=e.map(c=>t.utils.parseCoinName(c));if(o=o??(await t.getMarketPools(r,{indexer:a})).pools,s=s??await t.getAllCoinPrices({marketPools:o})??{},!o)throw new Error(`Fail to fetch marketPools for ${r}`);let n={};if(a){let c=await t.indexer.getSpools(),l=d=>{if(!e.includes(d.marketCoinName))return;let u=t.utils.parseCoinName(d.marketCoinName),f=t.utils.getSpoolRewardCoinName();d.coinPrice=s[u]??d.coinPrice,d.marketCoinPrice=s[d.marketCoinName]??d.marketCoinPrice,d.rewardCoinPrice=s[f]??d.rewardCoinPrice,n[d.marketCoinName]=d;};return Object.values(c).filter(d=>!!d).forEach(l),n}let i=await wa(t,r);return await Promise.allSettled(e.map(async(c,l)=>{try{let d=r[l],u=await Io(t,c,a,s,i[d]);u&&(n[c]=u);}catch(d){console.error(d);}})),n},Io=async(t,e,a=false,o,s)=>{let r=t.utils.parseCoinName(e);if(o=o||await t.getAllCoinPrices(),a){let b=await t.indexer.getSpool(e),h=t.utils.parseCoinName(e),g=t.utils.getSpoolRewardCoinName();return b.coinPrice=o?.[h]??b.coinPrice,b.marketCoinPrice=o?.[e]??b.marketCoinPrice,b.rewardCoinPrice=o?.[g]??b.rewardCoinPrice,b}s??=(await wa(t,[r]))[r];let n=t.utils.getSpoolRewardCoinName();o=o||await t.utils.getCoinPrices();let i=Ro(s),c=Ft(i),l=o?.[e]??0,d=t.utils.getCoinDecimal(e),u=Kt(c,l,d),f=Lt(i),m=o?.[n]??0,y=t.utils.getCoinDecimal(n),p=Vt(c,f,u,m,y);return {marketCoinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(r),marketCoinType:t.utils.parseMarketCoinType(r),rewardCoinType:t.utils.isMarketCoin(n)?t.utils.parseMarketCoinType(n):t.utils.parseCoinType(n),sCoinType:t.utils.parseSCoinType(e)??"",coinDecimal:t.utils.getCoinDecimal(r),rewardCoinDecimal:t.utils.getCoinDecimal(n),coinPrice:o?.[r]??0,marketCoinPrice:l,rewardCoinPrice:m,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:f.exchangeRateNumerator,exchangeRateDenominator:f.exchangeRateDenominator,...p}},me=async({utils:t},e)=>{let a=e||t.suiKit.currentAddress,o=t.address.get("spool.object"),s=`${o}::spool_account::SpoolAccount`,r=[],n=false,i=null;do{let u=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:s},options:{showContent:true,showType:true},cursor:i,limit:10});u&&(r.push(...u.data),u.hasNextPage&&u.nextCursor?(n=true,i=u.nextCursor):n=false);}while(n);let c=[...t.constants.whitelist.spool].reduce((u,f)=>(u[f]=[],u),{}),l=Object.keys(c).reduce((u,f)=>{let m=t.parseCoinName(f),y=t.parseMarketCoinType(m);return u[f]=`${o}::spool_account::SpoolAccount<${y}>`,u},{}),d=Object.entries(l).reduce((u,[f,m])=>(u[m]=f,u),{});for(let u of r.map(f=>f.data)){let f=u?.objectId,m=u?.type;if(f&&u?.content&&"fields"in u.content){let y=u.content.fields,p=String(y.spool_id),b=String(y.stake_type.fields.name),h=Number(y.stakes),g=Number(y.index),A=Number(y.points),w=Number(y.total_points),T={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(m),R=T[d[k]];R&&R.push({id:f,type:k,stakePoolId:p,stakeType:utils.normalizeStructTag(b),staked:h,index:g,points:A,totalPoints:w});}}return c},dt=async({utils:t},e,a)=>{let o=t.address.get(`spool.pools.${e}.id`),s;if(a??=(await t.scallopSuiKit.queryGetObject(o)).data,a){let r=a.objectId,n=a.type;if(a.content&&"fields"in a.content){let i=a.content.fields,c=Number(i.max_distributed_point),l=Number(i.distributed_point),d=Number(i.distributed_point_per_period),u=Number(i.point_distribution_time),f=Number(i.max_stakes),m=String(i.stake_type.fields.name),y=Number(i.stakes),p=Number(i.index),b=Number(i.created_at),h=Number(i.last_update);s={id:r,type:utils.normalizeStructTag(n),maxPoint:c,distributedPoint:l,pointPerPeriod:d,period:u,maxStake:f,stakeType:utils.normalizeStructTag(m),totalStaked:y,index:p,createdAt:b,lastUpdate:h};}}return s},ut=async({utils:t},e)=>{let a=t.address.get(`spool.pools.${e}.rewardPoolId`),o,s=await t.scallopSuiKit.queryGetObject(a);if(s?.data){let r=s.data,n=r.objectId,i=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=String(c.spool_id),d=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),f=Number(c.rewards),m=Number(c.claimed_rewards);o={id:n,type:utils.normalizeStructTag(i),stakePoolId:l,ratioNumerator:d,ratioDenominator:u,rewards:f,claimedRewards:m};}}return o};var Bo=async(t,e)=>{let a=e||t.suiKit.currentAddress,s=`${t.address.get("vesca.object")}::ve_sca::VeScaKey`,r=[],n=false,i=null;do{let l=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:s},cursor:i,limit:10});l&&(r.push(...l.data),l&&l.hasNextPage&&l.nextCursor?(n=true,i=l.nextCursor):n=false);}while(n);return r.map(l=>l.data).filter(l=>!!l)},De=async({utils:t},e,a)=>{let o=await Bo(t,e),s=Array(o.length).fill(null),r=o.map(async(i,c)=>{let l=await oe(t,i);l&&(s[c]=l);});await Promise.allSettled(r);let n=s.filter(Boolean).sort((i,c)=>c.currentVeScaBalance-i.currentVeScaBalance);return a?n.filter(i=>i.lockedScaAmount!=="0"):n},Ta=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=Ta.parse(e));let o,s=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(!s)return;let r=s.data;if(r&&r.content&&r.content.dataType==="moveObject"&&"fields"in r.content){let n=r.content.fields.value.fields,i=Math.max(+n.unlock_at*1e3-Date.now(),0),c=String(n.locked_sca_amount),l=S__default.default(n.locked_sca_amount).shiftedBy(-9).toNumber(),d=l*(Math.floor(i/1e3)/126144e3);o={id:r.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:Ta.parse(s.data),lockedScaAmount:c,lockedScaCoin:l,currentVeScaBalance:d,unlockAt:S__default.default(n.unlock_at*1e3).toNumber()};}return o},Do=async(t,e)=>{let a=t.address.get("vesca.id"),o=t.address.get("vesca.config");e=e??t.address.get("vesca.treasury");let s=new suiKit.SuiTxBlock,r=s.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}),[n,i]=await ne([e,o],t.scallopSuiKit),c=s.sharedObjectRef({...n,mutable:true}),l=`${a}::treasury::refresh`,d=[s.sharedObjectRef({...i,mutable:false}),c,r],u=`${a}::treasury::total_ve_sca_amount`,f=[c,r],m=await Promise.all(d.map(async g=>typeof g=="string"?(await t.scallopSuiKit.queryGetObject(g))?.data:g)),y=await Promise.all(f.map(async g=>typeof g=="string"?(await t.scallopSuiKit.queryGetObject(g))?.data:g));s.moveCall(l,m),s.moveCall(u,y);let p=await s.txBlock.build({client:t.suiKit.client,onlyTransactionKind:true}),h=(await t.scallopSuiKit.queryClient.fetchQuery({queryKey:x.rpc.getTotalVeScaTreasuryAmount({refreshArgs:d,vescaAmountArgs:f,node:t.scallopSuiKit.currentFullNode}),queryFn:async()=>await t.suiKit.inspectTxn(p)})).results;if(h&&h[1]?.returnValues){let g=Uint8Array.from(h[1].returnValues[0][0]),A=h[1].returnValues[0][1];return xo__default.default(A==="u64","Result type is not u64"),bcs.bcs.u64().parse(g)}return "0"},ka=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 o=a.data.content.fields,s=S__default.default(o.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),r=S__default.default(await Do(t,a.data)??0).shiftedBy(-9).toNumber(),n=s>0?r/s*4:0;return {totalLockedSca:s,totalVeSca:r,averageLockingPeriod:n,averageLockingPeriodUnit:"year"}};var Ko=[client.getFullnodeUrl("mainnet"),"https://sui-mainnet-ca-2.cosmostation.io","https://sui-mainnet-eu-4.cosmostation.io","https://sui-mainnet-endpoint.blockvision.org","https://sui-rpc.publicnode.com","https://sui-mainnet-rpc.allthatnode.com","https://mainnet.suiet.app","https://mainnet.sui.rpcpool.com","https://sui1mainnet-rpc.chainode.tech","https://fullnode.mainnet.apis.scallop.io","https://sui-mainnet-us-2.cosmostation.io"],Me=async t=>{for(let e of Ko)try{return await t(new client.SuiClient({url:e}))}catch(a){if(a.status!==429)throw a;await new Promise(o=>setTimeout(o,500));}throw new Error("Failed to fetch data")},Lo=async(t,e,a="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let o=null,s=false,r={};do{let n=await t.getDynamicFields({parentId:a,limit:10,cursor:o});if(!n)break;let{data:i,hasNextPage:c,nextCursor:l}=n;i.forEach(d=>{let u=`0x${d.name.value.name}`;e.has(u)&&(r[u]=d.objectId);}),s=c,o=l;}while(s);return r},Y=async(t,e,a,o=true)=>{let s=(await Me(async r=>await r.getDynamicFieldObject({parentId:t,name:{type:e,value:a}}))).data;return o?s?.objectId:s?.content},Aa=async(t,e=[])=>{let a=new Set(e),o={},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 n=Object.keys(r.core.coins);if(n.length===0)throw new Error("Pools empty");let i=n.reduce((k,R)=>{if(a.size>0&&!a.has(R))return k;let B=r.core.coins[R];return B&&B.coinType&&k.push([R,B.coinType]),k},[]);if(i.length===0)throw new Error("No coinTypesPairs");let c=r.core.market,l=(await Me(async k=>await k.getObject({id:c,options:{showContent:!0}}))).data;if(!(l&&l.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let d=l.content.fields,u=d.vault.fields.balance_sheets.fields.table.fields.id.id,f=d.collateral_stats.fields.table.fields.id.id,m=d.borrow_dynamics.fields.table.fields.id.id,y=d.interest_models.fields.table.fields.id.id,p=d.risk_models.fields.table.fields.id.id,b="0x1::type_name::TypeName",h="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",g="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",A="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",w="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",T=await Me(async k=>await Lo(k,new Set(i.map(([,R])=>R))));return await Promise.all(i.map(async([k,R])=>{let B=R.slice(2),M=await Promise.all([Y(u,b,{name:B},true),Y(f,b,{name:B},true),Y(m,b,{name:B},true),Y(y,b,{name:B},true),Y(p,b,{name:B},true),Y(c,h,B,true),Y(c,g,B,true),Y(c,A,B,true),Y(c,w,B,false)]),{symbol:J,metaData:U}=r.core.coins[k],P={spool:"",spoolReward:""},O=r.spool.pools[`s${k}`];if(O){let{id:D,rewardPoolId:Q}=O;P={spool:D,spoolReward:Q};}let I={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},v=`s${k}`,F=r.scoin.coins[v];if(F){let{coinType:D,treasury:Q,metaData:X,symbol:ee}=F;I={sCoinType:D,sCoinTreasury:Q,sCoinMetadataId:X,sCoinSymbol:ee};}let E={pythFeed:"",pythFeedObjectId:""};if(r.core.coins[k]?.oracle.pyth){let{feed:D,feedObject:Q}=r.core.coins[k].oracle.pyth;E={pythFeed:D,pythFeedObjectId:Q};}let{feed:N,feedObject:_}=r.core.coins[k].oracle.pyth,K=(await Me(async D=>await D.getCoinMetadata({coinType:R})))?.decimals??0,q=P?`s${k}`:void 0;o[k]={coinName:k,symbol:J,lendingPoolAddress:M[0]??"",collateralPoolAddress:M[1]??"",borrowDynamic:M[2]??"",interestModel:M[3]??"",riskModel:M[4],borrowFeeKey:M[5]??"",supplyLimitKey:M[6]??"",borrowLimitKey:M[7]??"",isolatedAssetKey:M[8]?.fields?.id.id??"",isIsolated:M[8]?.fields?.value??false,...P,...I,sCoinName:v,coinMetadataId:U,coinType:R,spoolName:q,decimals:K,...E,flashloanFeeObject:T[R]??""},await new Promise(D=>setTimeout(D,1e3));})),o};var Pa=async(t,e,a=t.address.get("core.oracles.switchboard.registryTableId"))=>{let o=[],s=e.map((i,c)=>{let l=t.utils.address.get(`core.coins.${i}.oracle.switchboard`);return l||(o.push({idx:c,coinName:i}),null)});if(o.length===0)return s;let n=o.map(i=>i.coinName).map(i=>{let c=t.utils.parseCoinType(i);if(!c)throw new Error(`Invalid coin name: ${i}`);return c});return await Promise.all(n.map(async(i,c)=>{let l={type:"0x1::type_name::TypeName",value:{name:i.slice(2)}},d=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:l});if(!d?.data?.content||d.data.content.dataType!=="moveObject")throw new Error(`No on-demand aggregator found for ${i}`);let u=d.data.content;s[c]=u.fields.value;})),s};var xa=async({address:t,scallopSuiKit:e})=>{let a=`${t.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[o,s]=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:o,secondary:s}},pt=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={[`${t.address.get("core.packages.pyth.object")}::rule::Rule`]:"pyth",[`${t.address.get("core.packages.supra.object")}::rule::Rule`]:"supra",[`${t.address.get("core.packages.switchboard.object")}::rule::Rule`]:"switchboard"},o={},s=null;do{let r=await t.scallopSuiKit.queryGetDynamicFields({parentId:e==="primary"?t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"):t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),cursor:s,limit:10});if(!r)break;let{data:n,hasNextPage:i,nextCursor:c}=r;s=c;let l=n.map(u=>u.objectId);if((await t.scallopSuiKit.queryGetObjects(l)).forEach(u=>{if(!u.content||u.content.dataType!=="moveObject")return;let f=u.content.fields,m=f.name.fields.name,y=t.parseCoinNameFromType(`0x${m}`);if(!y)throw new Error(`Invalid asset name: ${y}`);o[y]||(o[y]=[]),f.value.fields.contents.forEach(b=>{o[y].push(a[`0x${b.fields.name}`]);});}),!i)break}while(s);return o};var Eo=(t,e)=>{let a=bcs.bcs.Address.serialize(t).toBytes(),o=bcs.bcs.Address.serialize(e).toBytes(),s=new Uint8Array(a.length+o.length);s.set(a,0),s.set(o,a.length);let r=sha3_js.sha3_256(s);return `0x${Array.from(r).map(i=>i.toString(16).padStart(2,"0")).join("")}`},ft=async({address:t,scallopSuiKit:e},a,o)=>{let s=t.get("obligationNaming.namingRegistry");if(!s)return null;let r=await e.queryGetObject(s);if(r?.data?.content?.dataType!=="moveObject")return null;let c=r.data.content.fields.names?.fields?.id?.id;if(!c)return null;let l=Eo(a,o);try{let d=await e.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:l}});return d?.data?.content?.dataType==="moveObject"?d.data.content.fields?.value??null:null}catch(d){let u=d;if(u.message?.includes("not found")||u.message?.includes("Cannot find"))return null;throw d}},Ra=async(t,e)=>{let a=await t.getObligations(e),o={};return await Promise.allSettled(a.map(async s=>{let r=await ft({address:t.address,scallopSuiKit:t.scallopSuiKit},s.keyId,e);r&&(o[s.keyId]=r);})),o};var mt=class extends pythSuiJs.SuiPythClient{constructor(a,o,s,r){super(a,o,s);this.params=r;}async updatePriceFeedsWithSponsoredBaseUpdateFee(a,o,s){if(!this.params)throw new Error("Please provide params");let{defaultPackageId:r,gasStationId:n}=this.params,i=await this.getPythPackageId(),c=await this.verifyVaasAndGetHotPotato(a,o,i),l=[];for(let u of s){let f=await this.getPriceFeedObjectId(u);if(!f)throw new Error(`Price feed object not found for ID: ${u}`);l.push(f);}let d=a.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});for(let u=0;u<l.length;u++){let f=l[u];[c]=a.moveCall({target:`${r}::pyth_sponsor::update_single_price_feed_with_sponsor`,arguments:[a.object(this.pythStateId),c,a.object(f),a.object(n),d]});}a.moveCall({target:`${i}::hot_potato_vector::destroy`,arguments:[c],typeArguments:[`${i}::price_info::PriceInfo`]});}},Ia=async(t,e,a,o=false)=>{let s=new mt(t.suiKit.client,t.address.get("core.oracles.pyth.state"),t.address.get("core.oracles.pyth.wormholeState"),{defaultPackageId:"0xa6f9bec2f9748656b6af8aafb5d7bc1a0d5faf25ac9645fc7f447822cd509325",gasStationId:"0xa8b8dcc9880166edb57b53e05f8df7364d31b5d9b7d107fd27f0b69cf338b687"}),r=Array.from(new Set(e.map(i=>t.address.get(`core.coins.${i}.oracle.pyth.feed`)))),n=t.utils.pythEndpoints??[...t.constants.whitelist.pythEndpoints];for(let i of n)try{let l=await new pythSuiJs.SuiPriceServiceConnection(i,{priceFeedRequestConfig:{binary:!0}}).getPriceFeedsUpdateData(r);o?await s.updatePriceFeedsWithSponsoredBaseUpdateFee(a.txBlock,l,r):await s.updatePriceFeeds(a.txBlock,l,r);return}catch(c){console.warn(`Failed to update price feeds with endpoint ${i}: ${c}`);}};var ce=async(t,e,a=[...t.constants.whitelist.lending],o)=>{let s=o?.usePythPullModel??t.usePythPullModel,r=o?.useOnChainXOracleList??t.useOnChainXOracleList,n=new Set((o?.sponsoredFeeds??t.sponsoredFeeds).filter(m=>t.constants.whitelist.lending.has(m)?true:(console.error(`Sponsored feed ${m} is not in the whitelist lending assets.`),false))),i=o?.isSponsoredTx??false,c=r?await t.query.getAssetOracles():t.xOracleList??Te,l=new Set(Object.values(c).flatMap(({primary:m,secondary:y})=>[...m,...y])),d=(m,y)=>{let p=c[m];return p&&(p.primary.includes(y)||p.secondary.includes(y))},u=[...new Set(a)],f=u.filter(m=>d(m,"pyth"));if(l.has("pyth")){let m=[];for(let y of f){let p=!s&&!n.has(y);(s||p)&&m.push(y);}m.length>0&&await Ia(t,m,e,i);}for(let m of u)$o(t,e,m,c[m]);},$o=(t,e,a,o)=>{let s=t.utils.parseCoinType(a);Wo(e,o,t.address.get("core.packages.xOracle.id"),t.address.get("core.oracles.xOracle"),t.address.get("core.packages.pyth.id"),t.address.get("core.oracles.pyth.registry"),t.address.get("core.oracles.pyth.state"),t.address.get(`core.coins.${a}.oracle.pyth.feedObject`),t.address.get("core.packages.switchboard.id"),t.address.get("core.oracles.switchboard.registry"),t.address.get(`core.coins.${a}.oracle.switchboard`),t.address.get("core.packages.supra.id"),t.address.get("core.oracles.supra.registry"),t.address.get("core.oracles.supra.holder"),s);},Wo=(t,e,a,o,s,r,n,i,c,l,d,u,f,m,y)=>{let p=Go(t,a,o,y);return Object.entries(e).forEach(([b,h])=>{h.includes("pyth")&&Yo(b,t,s,p,n,i,r,y),h.includes("supra")&&Ho(b,t,u,p,m,f,y),h.includes("switchboard")&&Xo(b,t,c,p,d,l,y);}),zo(t,a,o,p,y),t},Go=(t,e,a,o)=>{let s=`${e}::x_oracle::price_update_request`,r=[o];return t.moveCall(s,[a],r)},zo=(t,e,a,o,s)=>{let r=`${e}::x_oracle::confirm_price_update_request`,n=[s];return t.moveCall(r,[a,o,t.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],n),t},Ho=(t,e,a,o,s,r,n)=>{e.moveCall(`${a}::rule::set_price_as_${t}`,[o,s,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[n]);},Xo=(t,e,a,o,s,r,n)=>{e.moveCall(`${a}::rule::set_as_${t}_price`,[o,s,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[n]);},Yo=(t,e,a,o,s,r,n,i)=>{e.moveCall(`${a}::rule::set_price_as_${t}`,[o,s,r,n,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[i]);};var be=async(...t)=>{let[e,a,o,s]=t;if(t.length===3&&o)return {obligationId:o};if(t.length===4&&o&&s)return {obligationId:o,obligationKey:s};let r=j(a),n=await ie(e,r);if(n.length===0)throw new Error(`No obligation found for sender ${r}`);return {obligationId:n[0].id,obligationKey:n[0].keyId}},es=({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")},s=`${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[n,i,c]=t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation`,[a.version]);return [n,i,c]},returnObligation:(n,i)=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::return_obligation`,[a.version,n,i]);},openObligationEntry:()=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation_entry`,[a.version]);},addCollateral:(n,i,c)=>{let l=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::deposit_collateral::deposit_collateral`,[a.version,n,a.market,i],[l]);},takeCollateral:(n,i,c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::withdraw_collateral::withdraw_collateral`,[a.version,n,i,a.market,a.coinDecimalsRegistry,e.pure.u64(c),a.xOracle,r],[d])},deposit:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::mint::mint`,[a.version,a.market,n,r],[c])},depositEntry:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::mint::mint_entry`,[a.version,a.market,n,r],[c])},withdraw:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem`,[a.version,a.market,n,r],[c])},withdrawEntry:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem_entry`,[a.version,a.market,n,r],[c])},borrow:(n,i,c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow`,[a.version,n,i,a.market,a.coinDecimalsRegistry,c,a.xOracle,r],[d])},borrowWithReferral:(n,i,c,l,d)=>{let u=t.utils.parseCoinType(d);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_with_referral`,[a.version,n,i,a.market,a.coinDecimalsRegistry,c,typeof l=="number"?e.pure.u64(l):l,a.xOracle,r],[u,s])},borrowEntry:(n,i,c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_entry`,[a.version,n,i,a.market,a.coinDecimalsRegistry,e.pure.u64(c),a.xOracle,r],[d])},repay:(n,i,c)=>{let l=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::repay::repay`,[a.version,n,a.market,i,r],[l]);},borrowFlashLoan:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::flash_loan::borrow_flash_loan`,[a.version,a.market,n],[c])},repayFlashLoan:(n,i,c)=>{let l=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::flash_loan::repay_flash_loan`,[a.version,a.market,n,i],[l]);},liquidate:(n,i,c,l)=>{let d=t.utils.parseCoinType(c),u=t.utils.parseCoinType(l),[f,m]=t.moveCall(e,`${a.protocolPkg}::liquidate::liquidate`,[a.version,n,a.market,i,a.coinDecimalsRegistry,a.xOracle,r],[d,u]);return [f,m]}}},ts=({builder:t,txBlock:e})=>({addCollateralQuick:async(a,o,s,r=false)=>{let n=j(e),{obligationId:i}=await be(t,e,s),{takeCoin:c,leftCoin:l}=await t.selectCoin(e,o,a,n,r);l&&e.transferObjects([l],n),e.addCollateral(i,c,o);},takeCollateralQuick:async(a,o,s,r,n)=>{let i=await be(t,e,s,r),c=await t.utils.getObligationCoinNames(i.obligationId);return await ce(t,e,c,n),e.takeCollateral(i.obligationId,i.obligationKey,a,o)},depositQuick:async(a,o,s=true,r=false)=>{let n=j(e),{leftCoin:i,takeCoin:c}=await t.selectCoin(e,o,a,n,r);i&&e.transferObjects([i],n);let l=e.deposit(c,o);return s?e.mintSCoin(t.utils.parseMarketCoinName(o),l):l},withdrawQuick:async(a,o)=>{let s=j(e),r=t.utils.parseSCoinName(o);if(!r)throw new Error(`No sCoin for ${o}`);let{sCoin:n,marketCoin:i}=await t.selectSCoinOrMarketCoin(e,r,a,s);if(n){let c=e.burnSCoin(r,n);i?e.mergeCoins(i,[c]):i=c;}if(!i)throw new Error(`No market coin for ${o}`);return e.withdraw(i,o)},borrowQuick:async(a,o,s,r,n)=>{let i=await be(t,e,s,r),l=[...await t.utils.getObligationCoinNames(i.obligationId)??[],o];return await ce(t,e,l,n),e.borrow(i.obligationId,i.obligationKey,a,o)},borrowWithReferralQuick:async(a,o,s,r,n,i)=>{let c=await be(t,e,r,n),d=[...await t.utils.getObligationCoinNames(c.obligationId)??[],o];return await ce(t,e,d,i),e.borrowWithReferral(c.obligationId,c.obligationKey,s,a,o)},repayQuick:async(a,o,s,r=false)=>{let n=j(e),i=await be(t,e,s),{leftCoin:c,takeCoin:l}=await t.selectCoin(e,o,a,n,r);return c&&e.transferObjects([c],n),e.repay(i.obligationId,l,o)},updateAssetPricesQuick:async(a,o)=>await ce(t,e,a,o),liquidateQuick:async(a,o,s,r,n)=>{let i=j(e),c=await t.utils.getObligationCoinNames(r);await ce(t,e,c,n);let{takeCoin:l,leftCoin:d}=await t.selectCoin(e,o,a,i,n?.isSponsoredTx??false);d&&e.transferObjects([d],i);let u=typeof r=="string"?e.object(r):r;return e.liquidate(u,l,o,s)}}),ja=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=es({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ts({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var _a=async(...t)=>{let[e,a,o,s]=t;if(t.length===4&&s)return [s];let r=j(a),n=await me(e,r);if(n[o].length===0)throw new Error(`No stake account id found for sender ${r}`);return n[o].map(i=>i.id)},ss=async(...t)=>{let[e,a,o,s]=t,r=j(a),n=await me(e,r);if(n[o].length===0)throw new Error(`No stake account found for sender ${r}`);return s?n[o].filter(c=>c.id===s):n[o]},Ba=async(t,e,a,o,s,r,n=false)=>{try{let{takeCoin:i,leftCoin:c,totalAmount:l}=n?await t.selectSCoin(e,o,s,r):await t.selectMarketCoin(e,o,s,r);if(n){let d=e.burnSCoin(o,i);e.stake(a,d,o);}else e.stake(a,i,o);return e.transferObjects([c],r),l}catch{return 0}},rs=({builder:t,txBlock:e})=>{let a={spoolPkg:t.address.get("spool.id")},o=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {createStakeAccount:s=>{let r=t.utils.parseMarketCoinType(s),n=t.address.get(`spool.pools.${s}.id`);return t.moveCall(e,`${a.spoolPkg}::user::new_spool_account`,[n,o],[r])},stake:(s,r,n)=>{let i=t.utils.parseMarketCoinType(n),c=t.address.get(`spool.pools.${n}.id`);t.moveCall(e,`${a.spoolPkg}::user::stake`,[c,s,r,o],[i]);},unstake:(s,r,n)=>{let i=t.utils.parseMarketCoinType(n),c=t.address.get(`spool.pools.${n}.id`);return t.moveCall(e,`${a.spoolPkg}::user::unstake`,[c,s,r,o],[i])},claim:(s,r)=>{let n=t.address.get(`spool.pools.${r}.id`),i=t.address.get(`spool.pools.${r}.rewardPoolId`),c=t.utils.parseMarketCoinType(r),l=t.utils.getSpoolRewardCoinName(),d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.spoolPkg}::user::redeem_rewards`,[n,i,s,o],[c,d])}}},ns=({builder:t,txBlock:e})=>({stakeQuick:async(a,o,s)=>{let r=j(e),n=await _a(t,e,o,s);if(n.length===0)throw new Error(`No stakeAccountIds found for user ${r}`);if(typeof a=="number"){let i=await Ba(t,e,n[0],o,a,r);a-=i,a>0&&await Ba(t,e,n[0],o,a,r,true);}else e.stake(n[0],a,o);},unstakeQuick:async(a,o,s,r=true)=>{let n=await ss(t,e,o,s),i=[];for(let c of n){if(c.staked===0)continue;let l=Math.min(a,c.staked),d=e.unstake(c.id,l,o);if(r){let u=e.mintSCoin(o,d);i.push(u);}else i.push(d);if(a-=l,a<=0)break}if(i.length>0){let c=i[0];return i.length>1&&e.mergeCoins(c,i.slice(1)),c}},claimQuick:async(a,o)=>{let s=await _a(t,e,a,o),r=[];for(let n of s){let i=await e.claim(n,a);r.push(i);}return r}}),Da=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=rs({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ns({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Ke=async(...t)=>{let[e,a,o,s]=t;if(t.length===4&&o&&s&&typeof o=="string"){let c=await ot(e,o);return {obligationId:o,obligationKey:s,obligationLocked:c}}let r=j(a),n=await ie(e,r);if(n.length===0)throw new Error(`No obligation found for sender ${r}`);let i=n.find(c=>c.id===o||c.keyId===s);if(!i)throw new Error(`No obligation found for sender ${r} with id ${o} or key ${s}`);return {obligationId:i.id,obligationKey:i.keyId,obligationLocked:i.locked}},ls=({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")},o={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")},s=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {stakeObligation:(r,n)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::stake`,[a.config,a.incentivePools,a.incentiveAccounts,n,r,a.obligationAccessStore,s]);},stakeObligationWithVesca:(r,n,i)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,[a.config,a.incentivePools,a.incentiveAccounts,n,r,a.obligationAccessStore,o.config,o.treasury,o.table,i,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),s],[]);},unstakeObligation:(r,n)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::unstake_v2`,[a.config,a.incentivePools,a.incentiveAccounts,n,r,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),s]);},claimBorrowIncentive:(r,n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.borrowIncentivePkg}::user::redeem_rewards`,[a.config,a.incentivePools,a.incentiveAccounts,n,r,s],[c])},deactivateBoost:(r,n)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::deactivate_boost_v2`,[a.config,a.incentivePools,a.incentiveAccounts,r,n,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),s]);}}},ds=({builder:t,txBlock:e})=>({stakeObligationQuick:async(a,o)=>{let{obligationId:s,obligationKey:r,obligationLocked:n}=await Ke(t,e,a,o),i=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&(c.target===`${ze}::user::unstake`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||c.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));(!n||i)&&e.stakeObligation(s,r);},stakeObligationWithVeScaQuick:async(a,o,s)=>{let{obligationId:r,obligationKey:n,obligationLocked:i}=await Ke(t,e,a,o),c=!!e.txBlock.blockData.transactions.find(l=>l.kind==="MoveCall"&&(l.target===`${ze}::user::unstake`||l.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||l.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!i||c){let d=await t.query.getBindedVeScaKey(r)??s;d?e.stakeObligationWithVesca(r,n,d):e.stakeObligation(r,n);}},unstakeObligationQuick:async(a,o)=>{let{obligationId:s,obligationKey:r,obligationLocked:n}=await Ke(t,e,a,o);n&&e.unstakeObligation(s,r);},claimBorrowIncentiveQuick:async(a,o,s)=>{let{obligationId:r,obligationKey:n}=await Ke(t,e,o,s);return e.claimBorrowIncentive(r,n,a)}}),Fa=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=ls({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ds({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var ye=async(...t)=>{let[e,a,o]=t;if(t.length===3&&o&&typeof o<"u"){let n=await oe(e.utils,o);return n||void 0}let s=j(a),r=await De(e,s);if(r.length!==0)return o?r.find(({keyId:n})=>(typeof o=="string"?o:o.objectId)===n):r[0]},bt=async(...t)=>{let[e,a,o]=t;try{let s=await e.scallopSuiKit.queryGetDynamicFieldObject({parentId:o,name:{type:"0x2::object::ID",value:a}});if(!s?.data)return !1;let r=s.data.content.fields.value.fields.contents;return Array.isArray(r)&&r.length>0}catch(s){return console.error(s),false}},ps=({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")},o=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {lockSca:(s,r)=>t.moveCall(e,`${a.id}::ve_sca::mint_ve_sca_key`,[a.config,a.table,a.treasury,s,r,o],[]),extendLockPeriod:(s,r)=>{t.moveCall(e,`${a.id}::ve_sca::extend_lock_period`,[a.config,s,a.table,a.treasury,r,o],[]);},extendLockAmount:(s,r)=>{t.moveCall(e,`${a.id}::ve_sca::lock_more_sca`,[a.config,s,a.table,a.treasury,r,o],[]);},renewExpiredVeSca:(s,r,n)=>{t.moveCall(e,`${a.id}::ve_sca::renew_expired_ve_sca`,[a.config,s,a.table,a.treasury,r,n,o],[]);},redeemSca:s=>t.moveCall(e,`${a.id}::ve_sca::redeem`,[a.config,s,a.table,a.treasury,o],[]),mintEmptyVeSca:()=>t.moveCall(e,`${a.id}::ve_sca::mint_ve_sca_placeholder_key`,[a.config,a.table],[]),splitVeSca:(s,r)=>t.moveCall(e,`${a.id}::ve_sca::split`,[a.config,s,a.table,a.subsTable,e.pure.u64(r)]),mergeVeSca:(s,r)=>t.moveCall(e,`${a.id}::ve_sca::merge`,[a.config,s,r,a.table,a.subsTable,e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],[])}},fs=({builder:t,txBlock:e})=>({lockScaQuick:async({amountOrCoin:a,lockPeriodInDays:o,autoCheck:s=true,veScaKey:r})=>{let n=j(e),i=await ye(t,e,r),c,l=[];if(a!==void 0&&typeof a=="number"){let m=await t.utils.selectCoins(a,Ce,n),[y,p]=e.takeAmountFromCoins(m,a);c=y,l.push(p);}else c=a;let d=t.utils.getUnlockAt(o,i?.unlockAt);s&&Bt(a,o,d,i?.unlockAt);let u=!i,f=!u&&i.unlockAt<=new Date().getTime();if(u||f){if(c)if(u){let m=e.lockSca(c,d);l.push(m);}else {if(i.lockedScaCoin!==0){let m=e.redeemSca(i.keyId);l.push(m);}e.renewExpiredVeSca(i.keyId,c,d);}}else c&&o?(e.extendLockPeriod(i.keyId,d),e.extendLockAmount(i.keyId,c)):o?e.extendLockPeriod(i.keyId,d):c&&e.extendLockAmount(i.keyId,c);l.length>0&&e.transferObjects(l,n);},extendLockPeriodQuick:async({lockPeriodInDays:a,veScaKey:o,autoCheck:s=true})=>{let r=await ye(t,e,o),n=t.utils.getUnlockAt(a,r?.unlockAt);s&&Je(a,n,r?.unlockAt),r&&e.extendLockPeriod(r.keyId,n);},extendLockAmountQuick:async({scaAmount:a,veScaKey:o,autoCheck:s=true})=>{let r=j(e),n=await ye(t,e,o);if(s&&Dt(a,n?.unlockAt),n){let i=await t.utils.selectCoins(a,Ce,r),[c,l]=e.takeAmountFromCoins(i,a);e.extendLockAmount(n.keyId,c),e.transferObjects([l],r);}},renewExpiredVeScaQuick:async({scaAmount:a,lockPeriodInDays:o,veScaKey:s,autoCheck:r=true})=>{let n=j(e),i=await ye(t,e,s),c=t.utils.getUnlockAt(o,i?.unlockAt);if(r&&Mt(a,o,i?.unlockAt),i){let l=[];if(i.lockedScaCoin!==0){let m=e.redeemSca(i.keyId);l.push(m);}let d=await t.utils.selectCoins(a,Ce,n),[u,f]=e.takeAmountFromCoins(d,a);l.push(f),e.renewExpiredVeSca(i.keyId,u,c),e.transferObjects(l,n);}},redeemScaQuick:async({veScaKey:a,transferSca:o})=>{let s=j(e),r=await ye(t,e,a);if(de(r?.unlockAt),r){let n=e.redeemSca(r.keyId);if(o){e.transferObjects([n],s);return}return n}},splitVeScaQuick:async({splitAmount:a,veScaKey:o,transferVeScaKey:s=true})=>{let r=await bt(t,o,t.address.get("vesca.subsTable")),n=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if(r&&!n)throw new Error("Key cannot be in the subs table, please call unsubscribe vesca or unstake obligation first");let i=e.splitVeSca(o,a);if(s){e.transferObjects([i],j(e));return}else return i},mergeVeScaQuick:async({targetVeScaKey:a,sourceVeScaKey:o})=>{let s=t.address.get("vesca.subsTableId"),[r,n]=await Promise.all([bt(t,a,s),bt(t,o,s)]),i=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&d.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if((r||n)&&!i)throw new Error("Both target and source cannot be in the subs table. Please call unsubscribe vesca or unstake obligation first");let[c,l]=await Promise.all([oe(t.utils,o),oe(t.utils,a)]);if(!c||!l)throw new Error("Source or target veSCA not found");return c.unlockAt<l.unlockAt?e.extendLockPeriod(c.keyId,l.unlockAt/1e3):c.unlockAt>l.unlockAt&&e.extendLockPeriod(l.keyId,c.unlockAt/1e3),e.mergeVeSca(a,o)}}),Va=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=ps({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=fs({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};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")},o=t.address.get("vesca.table"),s=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),o,s],[]);},claimReferralTicket:r=>{let n=t.utils.parseCoinType(r);return t.moveCall(e,`${a.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[a.version,o,a.referralBindings,a.authorizedWitnessList,a.referralTiers,s],[n])},burnReferralTicket:(r,n)=>{let i=t.utils.parseCoinType(n);t.moveCall(e,`${a.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[a.version,r,a.referralRevenuePool,s],[i]);},claimReferralRevenue:(r,n)=>{let i=t.utils.parseCoinType(n);return t.moveCall(e,`${a.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[a.version,a.referralRevenuePool,r,s],[i])},unbindReferral:()=>t.moveCall(e,`${a.referralPgkId}::referral_bindings::unbind_ve_sca_referrer`,[a.referralBindings])}},gs=({builder:t,txBlock:e})=>({claimReferralRevenueQuick:async(a,o=[...t.constants.whitelist.lending])=>{let s=j(e),r=[];for(let n of o)if(n==="sui"){let i=e.claimReferralRevenue(a,n);r.push(i);}else {let i=e.claimReferralRevenue(a,n);try{let c=await t.suiKit.suiInteractor.selectCoins(s,1/0,t.utils.parseCoinType(n));e.mergeCoins(i,c.slice(0,500));}catch{}finally{r.push(i);}}r.length>0&&e.transferObjects(r,s);}}),Ua=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=ys({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=gs({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Ss=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("obligationNaming.id"),namingRegistry:t.address.get("obligationNaming.namingRegistry")};return {setObligationName:(o,s)=>{t.moveCall(e,`${a.pkgId}::obligation_naming::set_name`,[a.namingRegistry,o,e.pure.string(s)],[]);},removeObligationName:o=>{t.moveCall(e,`${a.pkgId}::obligation_naming::remove_name`,[a.namingRegistry,o],[]);}}},ws=({txBlock:t})=>({setObligationNameQuick:async(e,a)=>{t.setObligationName(e,a);},removeObligationNameQuick:async e=>{t.removeObligationName(e);}}),Qa=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=Ss({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ws({txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Ts=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("loyaltyProgram.id"),scaRewardPool:t.address.get("loyaltyProgram.rewardPool")},o={object:t.address.get("vesca.object"),protocolConfig:t.address.get("vesca.config"),veScaTable:t.address.get("vesca.table"),subsTable:t.address.get("vesca.subsTable")},s={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,`${s.pkgId}::ve_sca_reward::redeem_reward`,[s.veScaRewardPool,r,o.protocolConfig,o.veScaTable,o.subsTable])}},ks=({builder:t,txBlock:e})=>({claimLoyaltyRevenueQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyObject;let o=j(e);if(!a)throw new Error(`No veScaKey found for user ${o}`);let s=e.claimLoyaltyRevenue(a),r=t.constants.coinTypes.sca;if(!r)throw new Error("Coin type sca not found");await t.utils.mergeSimilarCoins(e,s,r,j(e)),e.transferObjects([s],o);},claimVeScaLoyaltyRewardQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyObject;let o=j(e);if(!a)throw new Error(`No veScaKey found for user ${o}`);let s=e.claimVeScaLoyaltyReward(a);e.transferObjects([s],o);}}),Wa=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=Ts({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ks({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Ps=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("scoin.id")};return {mintSCoin:(o,s)=>{let r=t.utils.parseSCoinType(o);if(!r)throw new Error(`Invalid marketCoinName name: ${o}`);return t.moveCall(e,`${a.pkgId}::s_coin_converter::mint_s_coin`,[t.utils.getSCoinTreasury(o),s],[r,t.utils.parseUnderlyingSCoinType(o)])},burnSCoin:(o,s)=>{let r=t.utils.parseSCoinType(o);if(!r)throw new Error(`Invalid sCoin name: ${o}`);return t.moveCall(e,`${a.pkgId}::s_coin_converter::burn_s_coin`,[t.utils.getSCoinTreasury(o),s],[r,t.utils.parseUnderlyingSCoinType(o)])}}},xs=({builder:t,txBlock:e})=>({mintSCoinQuick:async(a,o)=>{let s=j(e),{leftCoin:r,takeCoin:n}=await t.selectMarketCoin(e,a,o,s);return e.transferObjects([r],s),e.mintSCoin(a,n)},burnSCoinQuick:async(a,o)=>{let s=j(e),{leftCoin:r,takeCoin:n}=await t.selectSCoin(e,a,o,s);return e.transferObjects([r],s),e.burnSCoin(a,n)}}),za=(t,e)=>{let a=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=Ps({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=xs({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Ha=(t,e)=>{let a=Va(t,e),o=Wa(t,a),s=Fa(t,o),r=Ua(t,s),n=Qa(t,r),i=za(t,n),c=Da(t,i),l=ja(t,c);return new Proxy(l,{get:(d,u)=>u in a?Reflect.get(a,u):u in s?Reflect.get(s,u):u in r?Reflect.get(r,u):u in n?Reflect.get(n,u):u in c?Reflect.get(c,u):u in o?Reflect.get(o,u):u in i?Reflect.get(i,u):Reflect.get(d,u)})};var yt=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 jt}},ge=yt;var gt=class extends ge{axiosInstance;constructor(e={}){super(e),this.axiosInstance=e.axiosInstance??Rs__default.default.create({baseURL:e.baseUrl,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:e.axiosTimeout??8e3});}async post(e,a,o,s){if(Array.isArray(a)){let r=a,n=o,i=s;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.post(e,n,i).then(c=>c)})}else {let r=a,n=o;return this.axiosInstance.post(e,r,n)}}async get(e,a,o){if(Array.isArray(a)){let s=a,r=o;return this.queryClient.fetchQuery({queryKey:s,queryFn:()=>this.axiosInstance.get(e,r).then(n=>n)})}else {let s=a;return this.axiosInstance.get(e,s)}}async put(e,a,o,s){if(Array.isArray(a)){let r=a,n=o,i=s;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.put(e,n,i).then(c=>c)})}else {let r=a,n=o;return this.axiosInstance.put(e,r,n)}}async delete(e,a,o){if(Array.isArray(a)){let s=a,r=o;return this.queryClient.fetchQuery({queryKey:s,queryFn:()=>this.axiosInstance.delete(e,r).then(n=>n)})}else {let s=a;return this.axiosInstance.delete(e,s)}}},he=gt;var ht={core:{version:"",versionCap:"",object:"",market:"",adminCap:"",coinDecimalsRegistry:"",obligationAccessStore:"",coins:{cetus:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wapt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wsol:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wbtc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},weth:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},afsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},hasui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},vsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sca:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}}},oracles:{xOracle:"",xOracleCap:"",primaryPriceUpdatePolicyObject:"",secondaryPriceUpdatePolicyObject:"",primaryPriceUpdatePolicyVecsetId:"",secondaryPriceUpdatePolicyVecsetId:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:"",registryTableId:"",state:""},pyth:{registry:"",registryCap:"",state:"",wormhole:"",wormholeState:""}},packages:{coinDecimalsRegistry:{id:"",upgradeCap:""},math:{id:"",upgradeCap:""},whitelist:{id:"",upgradeCap:""},x:{id:"",upgradeCap:""},protocol:{id:"",upgradeCap:""},protocolWhitelist:{id:"",upgradeCap:""},query:{id:"",upgradeCap:""},supra:{id:"",upgradeCap:""},pyth:{id:"",upgradeCap:""},switchboard:{id:"",upgradeCap:""},xOracle:{id:"",upgradeCap:""},testCoin:{id:"",upgradeCap:""}}},spool:{id:"",adminCap:"",object:"",pools:{sweth:{id:"",rewardPoolId:""},ssui:{id:"",rewardPoolId:""},swusdc:{id:"",rewardPoolId:""},swusdt:{id:"",rewardPoolId:""},scetus:{id:"",rewardPoolId:""},safsui:{id:"",rewardPoolId:""},shasui:{id:"",rewardPoolId:""},svsui:{id:"",rewardPoolId:""}},config:""},borrowIncentive:{id:"",adminCap:"",object:"",query:"",incentivePools:"",incentiveAccounts:"",config:""},vesca:{id:"",object:"",adminCap:"",tableId:"",table:"",treasury:"",config:"",subsTable:"",subsTableId:"",subsWhitelist:""},referral:{id:"",version:"",object:"",adminCap:"",referralBindings:"",bindingTableId:"",referralRevenuePool:"",revenueTableId:"",referralTiers:"",tiersTableId:"",authorizedWitnessList:""},loyaltyProgram:{id:"",object:"",rewardPool:"",userRewardTableId:""},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:""}}}},St=class{constructor(e={}){this.params=e;this.scallopAxios=new he({...this.defaultParamValues,...e}),this.network=e.networkType??"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:"695fcdc084f790c04eb068dc",network:"mainnet"};initializeForcedAddresses(e){let a=["localnet","devnet","testnet","mainnet"];Object.entries(e).forEach(([o,s])=>{if(a.includes(o)){let r=o;this.addressMap.set(r,s),r===this.network&&(this.currentAddresses=s);}});}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((o,s)=>typeof o=="object"?o[s]:o,this.currentAddresses)||void 0}set(e,a){if(this.currentAddresses){let o=e.split(".");o.reduce((s,r,n)=>{if(n===o.length-1)s[r]=a;else return s[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 o=a||this.network;o===this.network&&(this.currentAddresses=e),this.addressMap.set(o,e);}getAllAddresses(){return Object.fromEntries(this.addressMap)}async create(e){let{addresses:a,network:o,auth:s,memo:r}=e??{},n=s||this.auth||void 0,i=o||this.network,c=a||this.currentAddresses||this.addressMap.get(i)||ht;if(n!==void 0){this.addressMap.clear(),this.setAddresses(c,i);let l=await this.axiosClient.post("/addresses",JSON.stringify({...Object.fromEntries(this.addressMap),memo:r}),{headers:{"Content-Type":"application/json","api-key":s||this.auth}});if(l.status===201){for(let[d,u]of Object.entries(l.data))["localnet","devnet","testnet","mainnet"].includes(d)&&(d===this.network&&(this.currentAddresses=u),this.addressMap.set(d,u));return this.addressId=l.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:o}){let s=await this.axiosClient.get(e,a,o);if(s.status===200)return s.data;throw Error(`Error: ${s.status}; Failed to read ${e} ${s.statusText}`)}async read(e){let a=e||this.addressId||void 0;if(a!==void 0){let o=await(async()=>{let r=(this.params.urls?.addresses??[Nt]).map(n=>`${pe(n)}/addresses/${a}`);for(let n of r)try{return await this.readApi({url:n,queryKey:x.api.getAddresses({addressId:a})})}catch(i){console.error(`${i}`);}return {id:"",mainnet:this.defaultValues?.addresses?.mainnet??ht}})(),s=r=>["localnet","devnet","testnet","mainnet"].includes(r);for(let[r,n]of Object.entries(o))s(r)&&typeof n=="object"&&(r===this.network&&(this.currentAddresses=n),this.addressMap.set(r,n));return this.addressId=o.id,this.getAllAddresses()}else throw Error("Please provide API addresses id.")}async update(e){let{id:a,addresses:o,network:s,auth:r,memo:n}=e??{},i=r||this.auth||void 0,c=a||this.addressId||void 0,l=s||this.network,d=o||this.currentAddresses||this.addressMap.get(l)||ht;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(i!==void 0){a!==this.addressId&&this.addressMap.clear(),this.setAddresses(d,l);let u=await this.axiosClient.put(`/addresses/${c}`,JSON.stringify({...Object.fromEntries(this.addressMap),memo:n}),{headers:{"Content-Type":"application/json","api-key":r||this.auth}});if(u.status===200){for(let[f,m]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(f)&&(f===this.network&&(this.currentAddresses=m),this.addressMap.set(f,m));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 o=a||this.auth||void 0,s=e||this.addressId||void 0;if(s===void 0)throw Error("Require specific addresses id to be deleted.");if(o!==void 0)if((await this.axiosClient.delete(`/addresses/${s}`,{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=St;var Xa=t=>Object.keys(t).length===0,wt={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,layerZero:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set,emerging:new Set},vs=t=>Object.entries(t).filter(([e,a])=>!!a&&(Array.isArray(a)||a instanceof Set)).reduce((e,[a,o])=>(e[a]=o instanceof Set?o:new Set(o),e),{}),Ct=class extends Le{constructor(a={}){super(a);this.params=a;}_poolAddresses={};_whitelist=wt;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()&&!Xa(this.poolAddresses)&&a.every(o=>this.whitelist[o].size>0)}get whitelist(){return new Proxy(this._whitelist,{get:(a,o)=>a[o]??wt[o]})}get poolAddresses(){return new Proxy(this._poolAddresses,{get:(a,o)=>a[o]??void 0})}get defaultValues(){return this.params.defaultValues}isAddressInitialized({networkType:a="mainnet"}={}){let o=this.getAddresses(a);return !!o&&!Xa(o)}parseToOldMarketCoin(a){return `${this.protocolObjectId}::reserve::MarketCoin<${a}>`}async init({networkType:a="mainnet",force:o=false,addressId:s,constantsParams:r=this.params}={}){let n=this.getAddresses(a);if((!n||Object.keys(n).length===0||o)&&await this.read(s),r.forcePoolAddressInterface&&(this._poolAddresses=r.forcePoolAddressInterface),r.forceWhitelistInterface&&(this._whitelist=vs(r.forceWhitelistInterface)),this.isInitialized&&!o){this.initConstants();return}let[i,c]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.keys(this._whitelist).reduce((l,d)=>{let u=d,f=i[u];return l[u]=f instanceof Set?f:Array.isArray(f)?new Set(f):new Set,l},{})),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(c).filter(([l])=>Object.values(this._whitelist).some(d=>d.has(l))).map(([l,d])=>{let u=Object.fromEntries(Object.entries(d).map(([f,m])=>[f,typeof m=="boolean"?m??false:m||void 0]));return [l,u]}))),this.initConstants();}initConstants(){this.coinDecimals=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([o,s])=>!!s).map(([o,s])=>[o,s.decimals]),...Object.entries(this.poolAddresses).filter(([o,s])=>!!s?.sCoinName).map(([o,s])=>[s.sCoinName,s.decimals])]),this.coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([o,s])=>!!s).map(([o,s])=>[o,s?.coinType]),...Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&s.sCoinName&&s.sCoinType).map(([o,s])=>[s.sCoinName,s.sCoinType])]),this.coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([o,s])=>[s,o])),this.wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&this.whitelist.wormhole.has(o)).map(([o,s])=>[s.coinType,s.coinName])),this.coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s).map(([o,s])=>[s.coinName,this.parseToOldMarketCoin(s.coinType)])),this.scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&s.sCoinType&&s.sCoinName).map(([o,s])=>[suiKit.parseStructTag(s.sCoinType).name,s.sCoinName])),this.scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&s.sCoinType&&s.sCoinName).map(([o,s])=>[s.sCoinType,s.sCoinName]));let a=this.poolAddresses.vsui?.coinType;a&&(this.voloCoinTypeToCoinNameMap={[a]:"vsui"}),this.suiBridgeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&this.whitelist.suiBridge.has(s.coinName)).map(([o,s])=>[s.coinType,s.coinName])),this.sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&s.sCoinName&&s.sCoinType).map(([o,s])=>[s.sCoinName,s.sCoinType])),this.supportedBorrowIncentiveRewards=new Set([...Object.values(this.poolAddresses).filter(o=>!!o).map(o=>o.sCoinName?[o.coinName,o.sCoinName]:[o.coinName]).flat()]);}async readWhiteList(){let a=await(async()=>{let o=(this.params.urls?.whitelist??["https://sui.apis.scallop.io/pool/whitelist"]).map(pe);for(let s of o)try{return await this.readApi({url:s,queryKey:x.api.getWhiteList()})}catch(r){console.error(`${r}`);}return this.defaultValues?.whitelist??wt})();return Object.fromEntries(Object.entries(a).filter(([o,s])=>Array.isArray(s)||s instanceof Set).map(([o,s])=>[o,s instanceof Set?s:new Set(s)]))}async readPoolAddresses(){let a=(this.params.urls?.poolAddresses??["https://sui.apis.scallop.io/pool/addresses"]).map(pe);for(let o of a)try{return await this.readApi({url:o,queryKey:x.api.getPoolAddresses()})}catch(s){console.error(`${s}`);}return this.defaultValues?.poolAddresses??{}}},Ve=Ct;var Ya=t=>{let e;return "suiClients"in t&&t.suiClients&&t.suiClients?.length>0?e={suiClients:t.suiClients}:e={fullnodeUrls:"fullnodeUrls"in t?t?.fullnodeUrls??He:He},new suiKit.SuiKit({...t,...e})};var Se=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(),o=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+o),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()}};var Bs=10,Ee=(t,e)=>{let a={...t};for(let o in e)e[o]&&typeof e[o]=="object"&&!Array.isArray(e[o])?a[o]=Ee(t[o]||{},e[o]):a[o]=e[o];return a},Tt=class extends ge{suiKit;_walletAddress;_tokensPerSecond;rateLimiter;constructor(e={}){super(e),this.suiKit=e.suiKit??Ya(e),this._tokensPerSecond=e.tokensPerSecond??Bs,this.rateLimiter=new Se(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 Se(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:o,name:s}=suiKit.parseStructTag(e);return await this.callWithRateLimiter(x.rpc.getNormalizedMoveFunction({target:e}),()=>this.client.getNormalizedMoveFunction({package:a,module:o,function:s}))}async queryGetObject(e,a){return a={...a,showOwner:true,showContent:true,showType:true},await this.callWithRateLimiter(x.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 o=await this.callWithRateLimiter(x.rpc.getObjects({objectIds:e,node:this.currentFullNode}),()=>this.suiKit.getObjects(e,{showOwner:a?.showOwner,showContent:a?.showContent,showType:a?.showType}));return o.forEach(s=>{let r=x.rpc.getObject({objectId:s.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:r}).forEach(([i,c])=>{c||(c={data:c}),this.queryClient.setQueryData(i,Ee(c,{data:s,error:null}),{updatedAt:Date.now()});});}),o}async queryGetOwnedObjects(e){let a=await this.callWithRateLimiter(x.rpc.getOwnedObjects(e),()=>this.client.getOwnedObjects(e));return a&&a.data.length>0&&a.data.filter(o=>!!o.data).forEach(o=>{let s=x.rpc.getObject({objectId:o.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:s}).forEach(([n,i])=>{this.queryClient.setQueryData(n,Ee(i,{data:o.data,error:null}),{updatedAt:Date.now()});});}),a}async queryGetDynamicFields(e){return await this.callWithRateLimiter(x.rpc.getDynamicFields(e),()=>this.client.getDynamicFields(e))}async queryGetDynamicFieldObject(e){let a=await this.callWithRateLimiter(x.rpc.getDynamicFieldObject(e),()=>this.client.getDynamicFieldObject(e));if(a?.data){let o=x.rpc.getObject({objectId:a.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:o}).forEach(([r,n])=>{this.queryClient.setQueryData(r,Ee(n,{data:a.data,error:null}),{updatedAt:Date.now()});});}return a}async queryGetAllCoinBalances(e){return await this.callWithRateLimiter(x.rpc.getAllCoinBalances({activeAddress:e,node:this.currentFullNode}),async()=>{let a=await this.client.getAllBalances({owner:e});return a?a.reduce((s,r)=>(r.totalBalance!=="0"&&(s[suiKit.normalizeStructTag(r.coinType)]=r),s),{}):{}})}async queryGetCoinBalance(e){return e.coinType?(await this.queryGetAllCoinBalances(e.owner))[suiKit.normalizeStructTag(e.coinType)]??null:null}async queryInspectTxn({queryTarget:e,args:a,typeArgs:o,txBlock:s=new suiKit.SuiTxBlock,keys:r}){if(!await this.queryGetNormalizedMoveFunction(e))throw new Error("Invalid query target");return s.moveCall(e,a,o),await this.callWithRateLimiter(r??x.rpc.getInspectTxn({queryTarget:e,args:a.map(i=>typeof i=="object"&&"objectId"in i?i.objectId:i),typeArgs:o,node:this.currentFullNode}),()=>this.suiKit.inspectTxn(s))}},Ue=Tt;var At=class{pythEndpoints;scallopSuiKit;constants;timeout;constructor(e={}){this.constants=e.scallopConstants??new Ve(e),this.scallopSuiKit=e.scallopSuiKit??new Ue({queryClient:this.constants.queryClient,...e}),this.pythEndpoints=e.pythEndpoints??["https://hermes.pyth.network"],this.timeout=e.axiosTimeout??4e3;}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)}isLayerZeroAsset(e){return this.constants.whitelist.layerZero.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"};if(this.isLayerZeroAsset(e))return {from:"LayerZero",type:"Ominchain Fungible Token from LayerZero"}}parseCoinNameFromType(e){e=suiKit.normalizeStructTag(e);let{address:a,module:o,name:s,typeParams:r}=suiKit.parseStructTag(e);return a===this.constants.protocolObjectId&&o==="reserve"&&s==="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,o){return o=o??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(o,e,a)}async mergeSimilarCoins(e,a,o,s=this.walletAddress){try{let r=await this.selectCoins(Number.MAX_SAFE_INTEGER,o,s);r.length>0&&e.mergeCoins(a,r.slice(0,500).map(e.objectRef));}catch{}}async getObligationCoinNames(e){let a=await je(this,e);if(!a)return;let o=a.collaterals.map(i=>`0x${i.type.name}`),s=a.debts.map(i=>`0x${i.type.name}`);return [...new Set([...o,...s])].map(i=>this.parseCoinNameFromType(i))}parseDataFromPythPriceFeed(e){let o=[...this.constants.whitelist.lending].find(s=>this.address.get(`core.coins.${s}.oracle.pyth.feed`)===e.id);if(o){let s=e.getPriceUnchecked();return {coinName:o,price:s.getPriceAsNumberUnchecked(),publishTime:Number(s.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${e.id}`)}async getPythPrice(e,a){let o=this.address.get(`core.coins.${e}.oracle.pyth.feedObject`);if(a=a||(await this.scallopSuiKit.queryGetObject(o))?.data,a){let s=a;if(s.content&&"fields"in s.content){let r=s.content.fields,n=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((i?-1:1)*n)*(l?-1:1)}}return 0}async getPythPrices(e){let a=e.reduce((r,n)=>{let i=this.address.get(`core.coins.${n}.oracle.pyth.feedObject`);return i&&(r[i]?r[i].push(n):r[i]=[n]),r},{}),s=(await this.scallopSuiKit.queryGetObjects(Object.keys(a))).reduce((r,n)=>(a[n.objectId].forEach(i=>{r[i]=n;}),r),{});return (await Promise.all(Object.entries(s).map(async([r,n])=>{try{let i=await this.getPythPrice(r,n);return {coinName:r,price:i}}catch(i){return console.error(i),{coinName:r,price:0}}}))).reduce((r,n)=>(r[n.coinName]=n.price,r),{})}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])],a=false){let o=new Map(e.map(c=>{let l=this.address.get(`core.coins.${c}.oracle.pyth.feed`);return l?[c,l]:void 0}).filter(c=>!!c)),s=Array.from(o.values()),r=Array.from(o.keys()),n=this.queryClient.getQueryState(x.oracle.getCoinPrices(s));if(n&&n&&Date.now()-(n.dataUpdatedAt??0)<3e4)return n.data;let i={};if(!a)for(let c of this.pythEndpoints){let l=new pythSuiJs.SuiPriceServiceConnection(c,{timeout:this.timeout,httpRetries:0});try{let d=await this.queryClient.fetchQuery({queryKey:x.oracle.getPythLatestPriceFeeds(c,s),queryFn:async()=>await l.getLatestPriceFeeds(s),retry:!1,staleTime:3e4,gcTime:3e4});if(!d)throw new Error("No feeds returned from pyth");if(d.length!==s.length)throw new Error("Incomplete feeds returned from pyth");d.forEach((u,f)=>{let m=r[f],y=this.parseDataFromPythPriceFeed(u);i[m]=y.price;}),this.queryClient.setQueryData(x.oracle.getCoinPrices(s),i);}catch(d){if("status"in d&&d.status===403){console.log("trying next pyth endpoint");continue}console.error(d.message);}}return Object.keys(i).length===0&&(i={...i,...await this.getPythPrices(Array.from(e))},this.queryClient.setQueryData(x.oracle.getCoinPrices(s),i)),{...e.reduce((c,l)=>(c[l]=i[l]||0,c),{}),...i}}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 o=Math.floor(new Date().getTime()/1e3),s=a?Math.max(Math.floor(a/1e3)-o,0):0,r=0;if(s===0){let n=(e??1)*86400;r=Math.min(o+n,o+126144e3);}else {let n=Math.min(e?e*86400+s:s,126144e3);r=o+n;}return Qt(r)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0&&this.constants.whitelist.lending.has(e.coinName)):[]}},qe=At;var Pt=class extends he{constructor(e={}){e.baseUrl=e.indexerApiUrl??_t,super(e);}async getMarket(){let e=await this.get("/api/market/migrate",x.api.getMarket());if(e.status===200)return {pools:e.data.pools.reduce((a,o)=>(a[o.coinName]=o,a),{}),collaterals:e.data.collaterals.reduce((a,o)=>(a[o.coinName]=o,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",x.api.getSpools());if(e.status===200)return e.data.spools.reduce((a,o)=>(a[o.marketCoinName]=o,a),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.get("/api/borrowIncentivePools/migrate",x.api.getBorrowIncentivePools());if(e.status===200)return e.data.borrowIncentivePools.reduce((a,o)=>(Array.isArray(o.points)&&(o.points=o.points.reduce((s,r)=>(s[r.coinName]=r,s),{})),a[o.coinName]=o,a),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.get("/api/market/tvl",x.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,[o,s])=>(s&&(a[o]=s.coinPrice),a),{})}},Qe=Pt;var xt=class{indexer;utils;constructor(e={}){this.utils=e.utils??new qe(e),this.indexer=e.indexer??new Qe({queryClient:this.utils.queryClient,...e}),this.initIndexerFallback();}initIndexerFallback(){this.queryMarket=L.call(this,this.queryMarket),this.getMarketPools=L.call(this,this.getMarketPools),this.getMarketPool=L.call(this,this.getMarketPool),this.getMarketCollaterals=L.call(this,this.getMarketCollaterals),this.getMarketCollateral=L.call(this,this.getMarketCollateral),this.getSpools=L.call(this,this.getSpools),this.getSpool=L.call(this,this.getSpool),this.getBorrowIncentivePools=L.call(this,this.getBorrowIncentivePools),this.getLendings=L.call(this,this.getLendings),this.getLending=L.call(this,this.getLending),this.getObligationAccounts=L.call(this,this.getObligationAccounts),this.getObligationAccountsByIds=L.call(this,this.getObligationAccountsByIds),this.getObligationAccountById=L.call(this,this.getObligationAccountById),this.getObligationAccount=L.call(this,this.getObligationAccount),this.getTvl=L.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 ta(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 sa(this,e,a?.indexer)}async getMarketCollateral(e,a){return await at(this,e,a?.indexer)}async getObligations(e=this.walletAddress){return await ie(this,e)}async queryObligation(e){return je(this,e)}async getCoinAmounts(e,a=this.walletAddress){return await ra(this,e,a)}async getCoinAmount(e,a=this.walletAddress){return await st(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 this.utils.getPythPrice(e)}async getPricesFromPyth(e){return await this.utils.getPythPrices(e)}async getSpools(e,a){return await Ca(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 me(this,e)}async getStakeAccounts(e,a=this.walletAddress){return (await this.getAllStakeAccounts(a))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let a=new Map,o=[];for(let n of e){let i=this.address.get(`spool.pools.${n}.id`);i&&(a.set(n,i),o.push(i));}let s=new Map;if(o.length>0){let n=await this.scallopSuiKit.queryGetObjects(o);for(let i=0;i<o.length;i++)s.set(o[i],n[i]);}let r={};return await Promise.allSettled(e.map(async n=>{let i=a.get(n),c=await dt(this,n,i?s.get(i):void 0);c&&(r[n]=c);})),r}async getStakePool(e){return await dt(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let a=e.map(s=>this.address.get(`spool.pools.${s}.rewardPoolId`)).filter(s=>!!s);a.length>0&&await this.scallopSuiKit.queryGetObjects(a);let o={};return await Promise.allSettled(e.map(async s=>{let r=await ut(this,s);r&&(o[s]=r);})),o}async getStakeRewardPool(e){return await ut(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],a){return await Wt(this,e,a?.indexer,a?.marketPools,a?.coinPrices)}async getBorrowIncentiveAccounts(e,a){return await Gt(this,e,a)}async getLendings(e,a=this.walletAddress,o){return await da(this,e,a,o?.marketPools,o?.coinPrices,o?.indexer)}async getLending(e,a=this.walletAddress,o){return await it(this,e,a,o?.indexer)}async getObligationAccounts(e=this.walletAddress,a){return await ua(this,e,a?.market,a?.coinPrices,a?.indexer)}async getObligationAccountsByIds(e,a){return await pa(this,e,a?.market,a?.coinPrices,a?.indexer)}async getObligationAccountById(e,a){return await Ne(this,e,"",a?.indexer,a?.market,a?.coinPrices,{})}async getObligationAccount(e,a=this.walletAddress,o){let s=await this.getObligationAccounts(a,o);return Object.values(s).find(r=>r?.obligationId===e)}async getTvl(e){return await fa(this,e?.indexer)}async getVeSca(e){return await oe(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:a=false}={}){return await De(this,e,a)}async getVeScaTreasuryInfo(){return await ka(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await ya(this,e)}async getBindedObligationId(e){return await zt(this,e)}async getBindedVeScaKey(e){return await Ht(this,e)}async getLoyaltyProgramInfos(e){return await ca(this,e)}async getVeScaLoyaltyProgramInfos(e){return await la(this,e)}async getSCoinTotalSupply(e){return await ga(this,e)}async getSCoinAmounts(e,a=this.walletAddress){return await ha(this,e,a)}async getSCoinAmount(e,a=this.walletAddress){let o=this.utils.parseSCoinName(e);return o?await lt(this,o,a):0}async getSCoinSwapRate(e,a){return await Sa(this,e,a)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await ia(this,e)}async getPoolSupplyLimit(e){return await Re(this.utils,e)}async getPoolBorrowLimit(e){return await Ie(this.utils,e)}async getIsolatedAssets(e=false){return await Yt(this,e)}async isIsolatedAsset(e,a=false){return ae(this.utils,e,a)}async getCoinPriceByIndexer(e){return this.indexer.getCoinPrice(e)}async getCoinPricesByIndexer(){return this.indexer.getCoinPrices()}async getAllCoinPrices(e){return ba(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return Aa(e)}async getUserPortfolio(e){return ma(this,e?.walletAddress??this.walletAddress,e?.indexer??false)}async getPriceUpdatePolicies(){return await xa(this)}async getAssetOracles(){let[e,a]=await Promise.all([pt(this.utils,"primary"),pt(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((o,s)=>(o[s]={primary:e?.[s]??[],secondary:a?.[s]??[]},o),{})}async getSwitchboardOnDemandAggregatorObjectIds(e){return await Pa(this,e)}async getObligationName(e,a=this.walletAddress){return await ft({address:this.address,scallopSuiKit:this.scallopSuiKit},e,a)}async getObligationNames(e=this.walletAddress){return await Ra(this,e)}},$e=xt;var Ot=class{query;usePythPullModel;useOnChainXOracleList;sponsoredFeeds;xOracleList=Te;constructor(e={}){this.query=e.query??new $e(e),this.usePythPullModel=e.usePythPullModel??true,this.useOnChainXOracleList=e.useOnChainXOracleList??true,this.sponsoredFeeds=e.sponsoredFeeds??[];}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 Ha(this,e)}async selectCoin(e,a,o,s=this.walletAddress,r=false){if(a==="sui"&&!r){let[n]=e.splitSUIFromGas([o]);return {takeCoin:n}}else {let n=this.utils.parseCoinType(a),i=await this.utils.selectCoins(o,n,s),c=i.reduce((u,f)=>(u+=Number(f.balance),u),0),[l,d]=e.takeAmountFromCoins(i,o);return {takeCoin:l,leftCoin:d,totalAmount:c}}}async selectMarketCoin(e,a,o,s=this.walletAddress){let r=this.utils.parseMarketCoinType(a),n=await this.utils.selectCoins(o,r,s),i=n.reduce((d,u)=>(d+=Number(u.balance),d),0),[c,l]=e.takeAmountFromCoins(n,Math.min(o,i));return {takeCoin:c,leftCoin:l,totalAmount:i}}async selectSCoin(e,a,o,s=this.walletAddress){let r=this.utils.parseSCoinType(a),n=await this.utils.selectCoins(o,r,s),i=n.reduce((d,u)=>(d+=Number(u.balance),d),0),[c,l]=e.takeAmountFromCoins(n,Math.min(i,o));return {takeCoin:c,leftCoin:l,totalAmount:i}}async selectSCoinOrMarketCoin(e,a,o,s=this.walletAddress){let r=o,n={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:l,takeCoin:d,totalAmount:u}=await this.selectSCoin(e,a,r,s);if(n.leftCoins.push(l),n.sCoins.push(d),r-=u,r>0){let{leftCoin:f,takeCoin:m}=await this.selectMarketCoin(e,a,o,s);e.transferObjects([f],s),n.marketCoins.push(m);}}catch{let{takeCoin:d,leftCoin:u}=await this.selectMarketCoin(e,a,o,s);n.leftCoins.push(u),n.marketCoins.push(d);}e.transferObjects(n.leftCoins,s);let i=n.marketCoins.length>0?n.marketCoins.length>1?e.mergeCoins(n.marketCoins[0],n.marketCoins.slice(1)):n.marketCoins[0]:void 0;return {sCoin:n.sCoins.length>0?n.sCoins.length>1?e.mergeCoins(n.sCoins[0],n.sCoins.slice(1)):n.sCoins[0]:void 0,marketCoin:i}}async signAndSendTxBlock(e){return await this.scallopSuiKit.suiKit.signAndSendTxn(e)}moveCall(e,a,o,s){return e.moveCall(a,o,s)}},We=Ot;var Rt=class{builder;networkType;constructor(e={}){this.builder=e.builder??new We(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 o=a??this.walletAddress;return await this.query.getStakeAccounts(e,o)}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,o=true,s,r,n){let i=this.builder.createTxBlock(),c=r??this.walletAddress;i.setSender(c);let l=s??(await this.query.getObligations(c))[0]?.id;if(l)await i.addCollateralQuick(a,e,l,n);else {let[d,u,f]=i.openObligation();await i.addCollateralQuick(a,e,d,n),i.returnObligation(d,f),i.transferObjects([u],c);}return o?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async withdrawCollateral(e,a,o=true,s,r,n,i){let c=this.builder.createTxBlock(),l=n??this.walletAddress;c.setSender(l);let d=await c.takeCollateralQuick(a,e,s,r,{isSponsoredTx:i});return c.transferObjects([d],l),o?await this.scallopSuiKit.signAndSendTxn(c):c.txBlock}async deposit(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i=await r.depositQuick(a,e);return r.transferObjects([i],n),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async depositAndStake(e,a,o=true,s,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=this.utils.parseMarketCoinName(e),l=await this.query.getStakeAccounts(c),d=s??l[0]?.id,u=await n.depositQuick(a,e,false);if(d)await n.stakeQuick(u,c,d);else {let f=n.createStakeAccount(c);await n.stakeQuick(u,c,f),n.transferObjects([f],i);}return o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async withdraw(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i=await r.withdrawQuick(a,e);return r.transferObjects([i],n),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async borrow(e,a,o=true,s,r,n,i){let c=this.builder.createTxBlock(),l=n??this.walletAddress;c.setSender(l);let d=this.constants.whitelist.lending.has(e);o&&d&&await c.unstakeObligationQuick(s,r);let u=await c.borrowQuick(a,e,s,r,{isSponsoredTx:i});return c.transferObjects([u],l),o&&d&&await c.stakeObligationWithVeScaQuick(s,r),o?await this.scallopSuiKit.signAndSendTxn(c):c.txBlock}async repay(e,a,o=true,s,r,n,i){let c=this.builder.createTxBlock(),l=n??this.walletAddress;c.setSender(l);let d=this.constants.whitelist.lending.has(e);return o&&d&&await c.unstakeObligationQuick(s,r),await c.repayQuick(a,e,s,i),o&&d&&await c.stakeObligationWithVeScaQuick(s,r),o?await this.scallopSuiKit.signAndSendTxn(c):c.txBlock}async flashLoan(e,a,o,s=true,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let[c,l]=n.borrowFlashLoan(a,e);return n.repayFlashLoan(await o(n,c),l,e),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async createStakeAccount(e,a=true,o){let s=this.builder.createTxBlock(),r=o??this.walletAddress;s.setSender(r);let n=s.createStakeAccount(e);return s.transferObjects([n],r),a?await this.scallopSuiKit.signAndSendTxn(s):s.txBlock}async stake(e,a,o=true,s,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await this.query.getStakeAccounts(e),l=s??c[0]?.id;if(l)await n.stakeQuick(a,e,l);else {let d=n.createStakeAccount(e);await n.stakeQuick(a,e,d),n.transferObjects([d],i);}return o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async unstake(e,a,o=true,s,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await n.unstakeQuick(a,e,s);if(c){let l=this.utils.parseSCoinType(e);if(!l)throw new Error(`Invalid sCoin type: ${e}`);await this.utils.mergeSimilarCoins(n,c,l,i);}return n.transferObjects([c],i),o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async unstakeAndWithdraw(e,a,o=true,s,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await n.unstakeQuick(a,e,s,false),l=this.utils.parseCoinName(e);if(c){let d=n.withdraw(c,l);await this.utils.mergeSimilarCoins(n,d,this.utils.parseCoinType(l),j(n)),n.transferObjects([d],i);}else throw new Error(`No stake found for ${e}`);return o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async claim(e,a=true,o,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i=await r.claimQuick(e,o);return r.transferObjects(i,n),a?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async stakeObligation(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;return r.setSender(n),await r.stakeObligationWithVeScaQuick(e,a),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async unstakeObligation(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;return r.setSender(n),await r.unstakeObligationQuick(e,a),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimBorrowIncentive(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i={},c=await this.query.getObligationAccount(e);if(!c)throw new Error("Obligation not found");let l=Object.values(c.borrowIncentives).filter(d=>!!d).flatMap(({rewards:d})=>d.filter(({availableClaimAmount:u})=>u>0)).flatMap(({coinName:d})=>d);for(let d of l){let u=await r.claimBorrowIncentiveQuick(d,e,a);i[d]?i[d].push(u):i[d]=[u];}return r.transferObjects(Object.values(i).map(d=>{let u=d[0];return d.length>1&&r.mergeCoins(u,d.slice(1)),u}),n),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async migrateAllMarketCoin(e=true,a=true,o){let s=o??this.walletAddress,r=this.builder.createTxBlock();r.setSender(s);let n=[];for(let i of this.constants.whitelist.scoin){let c=[];try{let{takeCoin:l}=await this.builder.selectMarketCoin(r,i,Number.MAX_SAFE_INTEGER,s);if(l){let d=r.mintSCoin(i,l);c.push(d);}}catch(l){if(!l.toString().includes("No valid coins found for the transaction"))throw l}if(e&&this.constants.whitelist.spool.has(i))try{let l=await r.unstakeQuick(Number.MAX_SAFE_INTEGER,i);l&&c.push(l);}catch{}if(c.length>0){let l=c[0];c.length>1&&r.mergeCoins(l,c.slice(1));let d=this.utils.parseSCoinType(i);await this.utils.mergeSimilarCoins(r,l,d,s),n.push(l);}}return n.length>0&&r.transferObjects(n,s),a?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimAllUnlockedSca(e=true,a){let o=a??this.walletAddress,s=(await this.query.getVeScas({walletAddress:o})??[]).map(({keyObject:i})=>i);if(s.length===0)throw new Error("No veSCA found in the wallet");let r=[],n=this.builder.createTxBlock();if(n.setSender(o),await Promise.all(s.map(async i=>{try{let c=await n.redeemScaQuick({veScaKey:i,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&&n.mergeCoins(r[0],r.slice(1)),await this.utils.mergeSimilarCoins(n,r[0],"sca",o),e?await this.scallopSuiKit.signAndSendTxn(n):{tx:n.txBlock,scaCoin:r[0]}}async mintTestCoin(e,a,o=true,s){if(!(this.networkType==="testnet"))throw new Error("Only be used on the test network.");let n=this.builder.createTxBlock(),i=s??this.walletAddress,c=this.address.get("core.packages.testCoin.id"),l=this.address.get(`core.coins.${e}.treasury`),d=`${c}::${e}::mint`,u=n.moveCall(d,[l,a]);return n.transferObjects([u],i),o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}},Ge=Rt;var It=class{client;constructor(e={}){this.client=e.client??new Ge(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}},Ja=It;
21
+ var Bt={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var Dt="https://sui.apis.scallop.io",Mt="https://sdk.api.scallop.io",Rs=false,Is=false,Te="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",He="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var x={api:{getAddresses:t=>["api","getAddresses",t],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarket:()=>["api","getMarket"],getSpools:()=>["api","getSpools"],getBorrowIncentivePools:()=>["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:(t,e)=>["oracle","getPythPriceIds",e,t],getCoinPrices:t=>["oracle","getCoinPrices",t]}};var Xe=[client.getFullnodeUrl("mainnet"),"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 Bs={core:{version:"0x72bc09c4ce413d76d07f6e712413aebbe3ce3747eadfbc2331fbdb1dbde2d43a",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xd971609b7feb6230585831e7aeb3c121fb21b9431337a30fc99185eb459a05ee",market:"0xed80ed898df1e0b7a14b78c92527b47ef88591d5722ded16050d7e101687bb20",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0x861bfea382072bdd060fa3a33f65387a71d5a75dbb0fedd92aa62f8a048b0ff9",coins:{usdc:{id:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",metaData:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",treasury:"",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",symbol:"USDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"0xaebdb50e0a95c5aa20c60bde5f574dac90aef83b508d64146cf29b5f63c35d4f ",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",symbol:"SCA",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}},deep:{id:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",metaData:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",treasury:"",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",symbol:"DEEP",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",feedObject:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed"}}},fud:{id:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",metaData:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",treasury:"",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",symbol:"FUD",decimals:5,oracle:{supra:"",switchboard:"",pyth:{feed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",feedObject:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",symbol:"haSUI",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}}},oracles:{xOracle:"0xb112727f380857fd711f89b450a3b22dc4cc55f82b2212b001f2461d6257b0b9",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",primaryPriceUpdatePolicyObject:"0xbcd908d0ee6d63d726e61676f3feeec3d19817f4849bbecf372dd3399f247f6b",secondaryPriceUpdatePolicyObject:"0x624a6f120777bb30e718b86e836c205ef4229448052377dc3d78272a6662b2c0",primaryPriceUpdatePolicyVecsetId:"0xfb1330aa028ed6a159b742c71b5a79b3b6824cf71efa40ea82b52486ad209264",secondaryPriceUpdatePolicyVecsetId:"0x4b827acc73f3f53f808dd73a7ee0a60ae61e84322176bece72b26467030b467c",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"0x9b1b415f384af6af0ff31c22decdc88b3b83d0188cf63ef9c58fd122bca77219",registryTableId:"0x9f75c071b0db2e80da3f5c98686ffdedf3a633684290499501595277a5350b8c",state:"",registryCap:""},pyth:{registry:"0xbc477946f0c8c9a09d7a9bab57eb01f0320c1d1f7f9aeee2503d0a71f50379c6",registryCap:"0xe4995aaca4e70d4203790fbd22332107131e88b92b81bc976e6fc3a7d5005efd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0xd971609b7feb6230585831e7aeb3c121fb21b9431337a30fc99185eb459a05ee",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0x15f353b593733a6eeb37f67a8a0f6e6b863ef5e813df39cb263f5f40c29a2195",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",object:"",upgradeCap:""},pyth:{id:"0xde99692957a424f4701e55b77b014cf24612ded4608225090867d1d2990eaea9",object:"0xde99692957a424f4701e55b77b014cf24612ded4608225090867d1d2990eaea9",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7"},switchboard:{id:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",object:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",upgradeCap:""},xOracle:{id:"0xe2785270b2e6179e68204dd5901a43f9a0e1c566baf656cad705d45a419c4d3a",object:"0xe2785270b2e6179e68204dd5901a43f9a0e1c566baf656cad705d45a419c4d3a",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{ssui:{id:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",rewardPoolId:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"}},config:""},borrowIncentive:{id:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",config:"0xe5fec608d3a30a1f75b24d2c67d227524075aa6f5ee22e5eccedacd9145b1d9d",object:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",incentivePools:"0xb06657692f7f4d9eb0d7b7d6ac24db30e6fdaed64b09dee49664b496f687de46",incentiveAccounts:"0x0bf8168d983c18edcc6b2c2b2e85d2bdac84764babfecf1b567f98801fbf4942",query:"0xdbc22fe051d384691634cd3b9fe473b09723084a1e4c128728c42e2de3b2228f",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c"},vesca:{id:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",object:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x5477d43c9f75faea312c0f02dd48b4e03d9cbf2b1a5436ddffb5edefbea18ff2",table:"0x06f763060ea5da3d639fb56df70674490a8354511cfe61584062aafd83b1940d",treasury:"0x934919cc31fa89b67578039bb10d5518fa23c50bc8f78500f1d1a718407a0a71",config:"0x38d3f7a1fa5071226535d4d8bfca8ccab3d24871402df1be669d7d5e9e3e9cb4",subsTable:"0x4756b716670ff62760b22bebed73c6eb2c2cb118674a2eea3a56ebea9e27ae76",subsTableId:"0x924b56d383b45445984a80002185b670aa2e72cd7df496d345f45f9407a12c07",subsWhitelist:"0xfc72adae643da4f2fe080adc1e2cca981eadcb518facb02324eeaab169752ffb"},referral:{id:"0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",object:"0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",adminCap:"0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",referralBindings:"0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",bindingTableId:"0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",referralRevenuePool:"0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",revenueTableId:"0x669dfb0f47fccbbe2ae8a0bfce2672a994ef3f1c7049621405cce2f91733bdc1",referralTiers:"0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",tiersTableId:"0xad5e36fce7358a3ef94a56eb89ee7f1968100c1a9d967c1731154083e1dda1fb",authorizedWitnessList:"0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e",version:"0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"},loyaltyProgram:{id:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",object:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",rewardPool:"0x215e1022037052407e69a5c5938f888078013c924cae97132492719ac2c53ec6",userRewardTableId:"0x574a11f8a0fbaa05b8f559cb65634e8eb20f26b1ec29e7d58de9167f3cedd0f7"},veScaLoyaltyProgram:{id:"0x51bd8c455caedad9d7fd47f9ee75876668c4d6bbede95af39c0aebde46043f00",object:"0x51bd8c455caedad9d7fd47f9ee75876668c4d6bbede95af39c0aebde46043f00",adminCap:"0xb2d52e0ebb260cb42699be6a9804e12d6fa17b79ef1e43f9996df5ca71bac0ae",veScaRewardPool:"0x4fe34992bf2261c3c6c14b2dbf9606ce65a505c45ff778ac129ce7dea9b0cadf",veScaRewardTableId:"0x85d3e557d9bbed617b9cbc09982a0c9a6f6f4fc9ecce49b59124206c409c4774"},scoin:{id:"0xde8fe7f73fcaff729de640b1a67afff5028019aefa67c151250a8d47db37aa1c",coins:{ssui:{coinType:"0x9d81d8a20e9ffc462839c23346edb69604f7b4deffc9253262e1caca473fd3e3::scallop_sui::SCALLOP_SUI",metaData:"0x13d07ec4114e36b6d9b69cab9e4722c4dc76d9f623db9fcb5b26a01cb0a861a4",symbol:"sSUI",treasury:"0x8d2cd566acf9f38629bab1e5aba888c85b177432e91cf7f9a204c3f730281059"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",metaData:"",symbol:"sSCA",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199"},susdc:{coinType:"0x55588ffc90718301696fd5497a7b6e82c0f86c15d58e41fc9750a24329ee2523::scallop_usdc::SCALLOP_USDC",treasury:"0xe028cf6c656e410502c931ed265524d48ff16e000db1f50305b54d8a6c421150",symbol:"sUSDC",metaData:"0x752b2f407601cbbc335c3d1623e0f5a2b8cb254bc35847c4586bd7cd8bcac7f8"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",metaData:"",symbol:"sDEEP",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",metaData:"",symbol:"sFUD",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d"},shasui:{coinType:"0xf2f52fede69abafa2439665bb5bebc8e60fe0f8c5d9d240dd143b5f74f73c867::scallop_ha_sui::SCALLOP_HA_SUI",metaData:"0xb174a5642133c5a7409187c80e2ef090cc0169147a1dcedce8a0f208397578d3",symbol:"shaSUI",treasury:"0x33b0013a52205955a0af9ceaa4d3f4b7cf4bd8179fe14ac2de29d8f4d656eb0a"}}}},Ds={lending:new Set(["usdc","sui","hasui"]),collateral:new Set(["usdc","sui","hasui"]),borrowing:new Set(["usdc","sui","hasui"]),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","shasui"]),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"])},Ms={usdc:{coinName:"usdc",symbol:"USDC",lendingPoolAddress:"0x9a5bc993b18fb2a27414ae7adc43f343509fd5162f796b025d08ebeca4e02317",collateralPoolAddress:"0x35275c590b5f754b67ae0da7fbf530d40e90d66076dd7f687e13f7586effba8c",borrowDynamic:"0xe7ea2c5a01a7a286d76d135896edbb1ffb199ba100a618beb9c2180c8d547d91",interestModel:"0xcde221c16ddbf7d9ea41d6d3dcbff230fc2da9d957a563194c3d9025152ed93b",riskModel:"0xa15d4c5c56f4afcd604f6db8b1b5c104d91d3ad95a743212ae270375877baa6d",borrowFeeKey:"",supplyLimitKey:"0x4be9ae54ac4d320f4f9c14cae78cb85c8e0e67791dd9bdba6d2db20614a28a24",borrowLimitKey:"0x6b01093cba95b835181f00e3a2c31ed8dfc8d64fe3db0fb80933a09f66e1ccf1",isolatedAssetKey:"",isIsolated:false,spool:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",spoolReward:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166",sCoinType:"0x55588ffc90718301696fd5497a7b6e82c0f86c15d58e41fc9750a24329ee2523::scallop_usdc::SCALLOP_USDC",sCoinTreasury:"0xe028cf6c656e410502c931ed265524d48ff16e000db1f50305b54d8a6c421150",sCoinMetadataId:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2",sCoinSymbol:"sUSDC",sCoinName:"susdc",coinMetadataId:"0x752b2f407601cbbc335c3d1623e0f5a2b8cb254bc35847c4586bd7cd8bcac7f8",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",spoolName:"susdc",decimals:6,pythFeed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",pythFeedObjectId:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab",flashloanFeeObject:"0x289c770f54b26a4175d57cc6061e3d05f96e52d352cb7c0a51e2e3bacb2aee30"},sui:{coinName:"sui",symbol:"SUI",lendingPoolAddress:"0x885330fd03acdcf7d0ba10b6722f91140bc77f6fb62a593d5d025ccd6d160c04",collateralPoolAddress:"0x1a75bdcb07a64f3a87cff0156c9d470fc9ce0be14ec8093195a27921186afbb8",borrowDynamic:"0xec6749d4fb51841a728e6f0dda1b43047ca76a89690f67c7e496f2c0b6ea67b5",interestModel:"0x769b1653eb11e85903b0834e0f83d65405e5467a60389b2d86960dc2582c6595",riskModel:"0xbaf399f7cd7c13e15cf8e5979e4b8baa13513e9068f13c0a0ccdc9e4d3739314",borrowFeeKey:"",supplyLimitKey:"0x0602418e66fb7a73fa997077bd66f248ad5b090d43344a14b9f1db598ecc1d47",borrowLimitKey:"0x2b33a7efdcf6a6df24f4d8a356dd52f58d75bc023c3f171d99502d4d008b53f0",isolatedAssetKey:"",isIsolated:false,spool:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",spoolReward:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a",sCoinType:"0x9d81d8a20e9ffc462839c23346edb69604f7b4deffc9253262e1caca473fd3e3::scallop_sui::SCALLOP_SUI",sCoinTreasury:"0x8d2cd566acf9f38629bab1e5aba888c85b177432e91cf7f9a204c3f730281059",sCoinMetadataId:"0x13d07ec4114e36b6d9b69cab9e4722c4dc76d9f623db9fcb5b26a01cb0a861a4",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"},hasui:{coinName:"hasui",symbol:"haSUI",lendingPoolAddress:"0x7e9c2b3105e0999410305dfd2c649ca473a9c04be87c53ce5e4566559f6818ea",collateralPoolAddress:"0x0446c27ce7e6fac2d0b359caad042bd436727b6f498a2efc4ceaa071d9fce4b5",borrowDynamic:"0xa1ba968ebc70685fc5fbdeb5edbd346cbc13223abef556109dc08f26962d3765",interestModel:"0x8440be8ab46d572fefaf0c21a225ebb9e6fe9239112de8de0a2654e6827fd5c7",riskModel:"0xa246e59a3686b63ce4b914c2d1c784cff0ae3288e7b3db5b146925684a6380c0",borrowFeeKey:"",supplyLimitKey:"",borrowLimitKey:"",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0xf2f52fede69abafa2439665bb5bebc8e60fe0f8c5d9d240dd143b5f74f73c867::scallop_ha_sui::SCALLOP_HA_SUI",sCoinTreasury:"0x33b0013a52205955a0af9ceaa4d3f4b7cf4bd8179fe14ac2de29d8f4d656eb0a",sCoinMetadataId:"0xb174a5642133c5a7409187c80e2ef090cc0169147a1dcedce8a0f208397578d3",sCoinSymbol:"sHASUI",sCoinName:"shasui",coinMetadataId:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",spoolName:"shasui",decimals:9,pythFeed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",pythFeedObjectId:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37",flashloanFeeObject:"0xb9f505d532de1d6c9f3a8522a2d16f2958b75c0ed939d4f80b96f584a2a8ed5e"}};var J=86400,de=1460,W=126144e3,Ye=1e10,Ze=1e9;var ke={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=Symbol.for("scallop.txBlock"),Ya=t=>typeof t=="object"&&t!==null&&t[et]===true,L=t=>Ya(t)||t instanceof suiKit.SuiTxBlock?t:t instanceof suiKit.Transaction?new suiKit.SuiTxBlock(t):t??new suiKit.SuiTxBlock,j=t=>{let e=t.blockData.sender;if(!e)throw new Error("Sender is required");return e},ue=t=>{if(t===void 0)throw new Error("veSca not found")},tt=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},at=(t,e,a)=>{ue(a),tt(a);let o=Math.floor(a/1e3);if(t<1)throw new Error("Minimum lock period is 1 day");let s=Math.floor((e-o)/86400);if(t>s)throw new Error(`Cannot extend lock period by ${t} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-s}`)},Ft=(t,e,a,o)=>{let s=o?Math.floor(o/1e3):void 0,r=!s,n=!r&&s*1e3<=new Date().getTime();if(r||n)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${n?"renewing expired veSca":"initial lock"} is 10 SCA`);if(e*86400>126144e3)throw new Error(`Maximum lock period is ~4 years (${1460} days)`)}else throw new Error(`SCA amount and lock period is required for ${n?"renewing expired veSca":"initial lock"}`);else {if(ue(o),tt(o),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");a&&e&&at(e,a,o);}},Kt=(t,e)=>{if(ue(e),tt(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")},Lt=(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 ot=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),o=t.getCoinDecimal(a);if(o===void 0)throw new Error(`Coin decimal not found for ${a}`);let s=24*365*3600,r=e.baseBorrowRate*s/e.borrowRateScale,n=e.borrowRateOnHighKink*s/e.borrowRateScale,i=e.borrowRateOnMidKink*s/e.borrowRateScale,c=e.maxBorrowRate*s/e.borrowRateScale,l=e.borrowRate*s/e.borrowRateScale,d=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=S__default.default(e.borrowIndex).multipliedBy(S__default.default(d).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),f=S__default.default(e.borrowIndex).plus(u),m=S__default.default(f).dividedBy(e.borrowIndex).minus(1),y=S__default.default(e.debtAmount).multipliedBy(m),p=y.plus(e.debtAmount),b=p.shiftedBy(-1*o),h=S__default.default(e.reserveAmount).plus(y.multipliedBy(e.reserveFactor)),g=h.shiftedBy(-1*o),A=S__default.default(p).plus(Math.max(e.cashAmount-h.toNumber(),0)),w=A.shiftedBy(-1*o),T=S__default.default(p).dividedBy(A);T=T.isFinite()?T:S__default.default(0);let k=S__default.default(l).multipliedBy(T).multipliedBy(1-e.reserveFactor);k=k.isFinite()?k:S__default.default(0);let R=A.dividedBy(e.marketCoinSupplyAmount);return R=R.isFinite()&&!R.isNaN()?R:S__default.default(1),{baseBorrowApr:r,baseBorrowApy:t.parseAprToApy(r),borrowAprOnHighKink:n,borrowApyOnHighKink:t.parseAprToApy(n),borrowAprOnMidKink:i,borrowApyOnMidKink:t.parseAprToApy(i),coinDecimal:o,maxBorrowApr:c,maxBorrowApy:t.parseAprToApy(c),borrowApr:Math.min(l,c),borrowApy:Math.min(t.parseAprToApy(l),t.parseAprToApy(c)),borrowIndex:f.toNumber(),growthInterest:m.toNumber(),supplyAmount:A.toNumber(),supplyCoin:w.toNumber(),borrowAmount:p.toNumber(),borrowCoin:b.toNumber(),reserveAmount:h.toNumber(),reserveCoin:g.toNumber(),utilizationRate:T.toNumber(),supplyApr:k.toNumber(),supplyApy:t.parseAprToApy(k.toNumber()),conversionRate:R.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:S__default.default(e.supplyLimit).shiftedBy(-o).toNumber(),maxBorrowCoin:S__default.default(e.borrowLimit).shiftedBy(-o).toNumber()}},Ae=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),o=t.getCoinDecimal(a);if(o===void 0)throw new Error(`Coin decimal not found for ${a}`);let s=S__default.default(e.maxCollateralAmount).shiftedBy(-1*o),r=S__default.default(e.totalCollateralAmount).shiftedBy(-1*o);return {coinDecimal:o,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:s.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:r.toNumber()}},Vt=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)}),Et=(t,e,a)=>{let s=S__default.default(t.pointPerPeriod).dividedBy(t.period),r=S__default.default(t.pointPerPeriod).dividedBy(t.period),n=r.gt(0)?S__default.default(t.maxPoint).minus(t.distributedPoint).dividedBy(r):S__default.default(0),i=t.createdAt,c=n.plus(t.lastUpdate).integerValue().toNumber(),l=S__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),d=S__default.default(t.maxPoint).minus(t.distributedPoint),u=S__default.default.minimum(S__default.default(l).multipliedBy(t.pointPerPeriod),d),f=S__default.default(t.index).plus(u.dividedBy(t.staked).isFinite()?S__default.default(1e9).multipliedBy(u).dividedBy(t.staked):0),m=S__default.default(t.distributedPoint).plus(u),y=S__default.default(t.staked),p=y.shiftedBy(-1*a),b=p.multipliedBy(e);return {distributedPointPerSec:s.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:f.toNumber(),currentTotalDistributedPoint:m.toNumber(),startDate:new Date(i*1e3),endDate:new Date(c*1e3),stakedAmount:y.toNumber(),stakedCoin:p.toNumber(),stakedValue:b.toNumber()}},Ut=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)}),qt=(t,e,a,o,s)=>{let n=S__default.default(a.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),i=S__default.default(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=i.shiftedBy(-1*s),l=c.multipliedBy(o),d=S__default.default(e.rewards),u=d.shiftedBy(-1*s),f=u.multipliedBy(o),m=S__default.default(e.claimedRewards),y=m.shiftedBy(-1*s),p=y.multipliedBy(o),b=S__default.default(n).shiftedBy(-1*s).multipliedBy(31536e3).multipliedBy(o),h=b.dividedBy(a.stakedValue).isFinite()?b.dividedBy(a.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(h=1/0),{rewardApr:h,totalRewardAmount:i.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:l.toNumber(),remaindRewardAmount:d.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:f.toNumber(),claimedRewardAmount:m.toNumber(),claimedRewardCoin:y.toNumber(),claimedRewardValue:p.toNumber(),rewardPerSec:n.toNumber()}},Za=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)}),Qt=(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,o)=>{let s=Za(o),r=t.parseCoinNameFromType(s.pointType);return a[r]=s,a},{})}),$t=(t,e,a,o,s)=>{let n=S__default.default(t.distributedPointPerPeriod).dividedBy(t.period),i=S__default.default(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),c=S__default.default.minimum(S__default.default(i).multipliedBy(t.distributedPointPerPeriod),S__default.default(t.points)),l=S__default.default(t.index).plus(c.dividedBy(t.weightedAmount).isFinite()?S__default.default(1e9).multipliedBy(c).dividedBy(t.weightedAmount):0),d=S__default.default(t.distributedPoint).plus(c),u=S__default.default(t.baseWeight),f=S__default.default(t.weightedAmount),m=f.shiftedBy(-1*s),y=m.multipliedBy(o),p=365*24*60*60,b=S__default.default(n).shiftedBy(-1*a),h=S__default.default(b).multipliedBy(p).multipliedBy(e),g=S__default.default(1e12),A=S__default.default(t.baseWeight).dividedBy(g),w=h.multipliedBy(A).dividedBy(y).isFinite()&&t.points>0?h.multipliedBy(A).dividedBy(y).toNumber():1/0;return {distributedPointPerSec:n.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:l.toNumber(),currentTotalDistributedPoint:d.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:f.toNumber(),weightedStakedCoin:m.toNumber(),weightedStakedValue:y.toNumber(),rewardApr:w,rewardPerSec:b.toNumber()}},Ja=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)}),Wt=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((a,o)=>{let s=Ja(o),r=t.parseCoinNameFromType(s.pointType);return a[r]=s,a},{})}),pe=(...t)=>S__default.default(t.reduce((e,a)=>new S__default.default(a).lt(e)?a:e));var xe=(t,e,a)=>{let o=Math.max(1,Math.floor(Math.log10(Math.abs(t))+1)),s=Math.max(Math.floor((o-1)/e),1)+1,r=Math.pow(10,-s);return r=a==="increase"?1-r:1+r,r};var Gt=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 o=new Date().getTime();return a.getTime()-o>126144e3*1e3&&a.setUTCDate(a.getUTCDate()-1),Math.floor(a.getTime()/1e3)},Oe=(t,e)=>{let a=[];for(let o=0;o<t.length;o+=e)a.push(t.slice(o,o+e));return a},fe=t=>(t.endsWith("/")&&(t=t.slice(0,-1)),t);async function eo(t,e,...a){let o=a[a.length-1];if(typeof o=="object"&&o.indexer)try{return await t.apply(e,a)}catch(s){return console.warn(`Indexer requests failed: ${s.message}. Retrying without indexer..`),await t.apply(e,[...a.slice(0,-1),{...o,indexer:false}])}return await t.apply(e,a)}function V(t){return (...e)=>eo(t,this,...e)}var G=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 Re=t=>{if(typeof t=="object"&&"objectId"in t&&"owner"in t&&t.owner&&typeof t.owner=="object"&&"Shared"in t.owner&&"initial_shared_version"in t.owner.Shared)return {objectId:t.objectId,initialSharedVersion:t.owner.Shared.initial_shared_version.toString()};throw new Error("Invalid shared object data")},ne=async(t,e)=>{if(typeof t=="string"){let a=await e.queryGetObject(t,{showOwner:true,showContent:false});return Re(a.data)}else return Re(t)},ie=async(t,e)=>{let a=[];for(let s=0;s<t.length;s++)typeof t[s]=="string"&&a.push(t[s]);let o=new Map;if(a.length>0){let s=await e.queryGetObjects(a,{showOwner:true,showContent:false});for(let r=0;r<a.length;r++)o.set(a[r],s[r]);}return t.map(s=>Re(typeof s=="string"?o.get(s):s))};var oo=async({address:t,scallopSuiKit:e})=>{let a=t.get("borrowIncentive.query"),o=t.get("borrowIncentive.incentivePools"),s=new suiKit.SuiTxBlock,r=`${a}::incentive_pools_query::incentive_pools_data`,n=[s.sharedObjectRef({...await ne(o,e),mutable:true})];return (await e.queryInspectTxn({queryTarget:r,args:n,txBlock:s,keys:x.rpc.getInspectTxn({queryTarget:r,args:[o],node:e.currentFullNode})}))?.events[0].parsedJson},Ht=async(t,e=[...t.constants.whitelist.lending],a=false,o,s)=>{let r={};o=o??(await t.getMarketPools(void 0,{coinPrices:s,indexer:a})).pools,s=s??await t.getAllCoinPrices({marketPools:o});let n=await oo(t);for(let i of n?.incentive_pools??[]){let c={},l=Qt(t.utils,i),d=utils.normalizeStructTag(i.pool_type.name),u=t.utils.parseCoinNameFromType(d),f=s?.[u]??0,m=t.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[h,g]of Object.entries(l.poolPoints)){if(!g)continue;let A=g.pointType,w=t.utils.parseCoinNameFromType(A),T=t.utils.getCoinDecimal(w);if(T===void 0)throw new Error(`Coin decimal not found for ${w}`);let k=s?.[w]??0,R=t.utils.parseSymbol(w),B=t.utils.getCoinDecimal(w),M=$t(g,k,T,f,m);g.points>M.accumulatedPoints&&(c[h]={symbol:R,coinName:w,coinType:A,coinDecimal:B,coinPrice:k,points:g.points,distributedPoint:g.distributedPoint,weightedAmount:g.weightedAmount,...M});}let y=S__default.default(l.staked),p=y.shiftedBy(-1*m),b=p.multipliedBy(f);r[u]={coinName:u,symbol:t.utils.parseSymbol(u),coinType:d,coinDecimal:m,coinPrice:f,stakedAmount:y.toNumber(),stakedCoin:p.toNumber(),stakedValue:b.toNumber(),points:c};}return r},Xt=async({utils:t},e,a=[...t.constants.whitelist.lending])=>{let o=new suiKit.SuiTxBlock,s=t.address.get("borrowIncentive.query"),r=t.address.get("borrowIncentive.incentiveAccounts"),n=`${s}::incentive_account_query::incentive_account_data`,[i,c]=await ie([r,e],t.scallopSuiKit),l=[o.sharedObjectRef({...i,mutable:true}),o.sharedObjectRef({...c,mutable:true})],u=(await t.scallopSuiKit.queryInspectTxn({queryTarget:n,args:l,txBlock:o,keys:x.rpc.getInspectTxn({queryTarget:n,args:[r,e],node:t.scallopSuiKit.currentFullNode})}))?.events[0]?.parsedJson;return Object.values(u?.pool_records??[]).reduce((m,y)=>{let p=Wt(t,y),b=p.poolType,h=t.parseCoinNameFromType(b);return a&&a.includes(h)&&(m[h]=p),m},{})},Yt=async({address:t,scallopSuiKit:e},a)=>{let o=t.get("borrowIncentive.object"),s=t.get("borrowIncentive.incentivePools"),r=t.get("vesca.object"),n=await e.queryGetObject(s);if(n?.data?.content?.dataType!=="moveObject")return null;let c=n.data.content.fields.ve_sca_bind.fields.id.id,l=`${o}::typed_id::TypedID<${r}::ve_sca::VeScaKey>`,d=await e.queryGetDynamicFieldObject({parentId:c,name:{type:l,value:a}});return d?.data?.content?.dataType!=="moveObject"?null:d.data.content.fields.value.fields.id},Zt=async({address:t,scallopSuiKit:e},a)=>{let o=t.get("borrowIncentive.object"),s=t.get("borrowIncentive.incentiveAccounts"),r=t.get("core.object"),n=await e.queryGetObject(s);if(n?.data?.content?.dataType!=="moveObject")return null;let i=n.data.content.fields.accounts.fields.id.id,c=await e.queryGetDynamicFieldObject({parentId:i,name:{type:`${o}::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({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()})}),ro="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Ie=async(t,e)=>{try{let a=t.parseCoinType(e).slice(2),o=t.address.get("core.market");if(!o)return null;let s=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:o,name:{type:ro,value:a}}),r=so.safeParse(s?.data?.content);return r.success?r.data.fields.value:"0"}catch(a){return console.error(`Error in getSupplyLimit for ${e}: ${a.message}`),"0"}};var no=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",ea=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"),o=[];if(!a)return o;let s=!1,r=null,n=i=>i.name.type===Jt;do{let i=await t.scallopSuiKit.queryGetDynamicFields({parentId:a,cursor:r,limit:10});if(!i)break;let c=i.data.filter(n).map(({name:l})=>`0x${l.value.type.name}`);o.push(...c),i&&i.hasNextPage&&i.nextCursor?(s=!0,r=i.nextCursor):s=!1;}while(s);return o}catch(a){return console.error(a),[]}},oe=async(t,e,a)=>{let o=t.constants.poolAddresses[e];if(o&&!a)return o.isIsolated;let s=t.address.get("core.market"),r=t.queryClient.getQueryData(["getDynamicFields",s]);if(r){let l=t.parseCoinType(e);return r.includes(l)}let n=t.parseCoinType(e).slice(2),i=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:Jt,value:n}}),c=no.safeParse(i?.data?.content);return c.success?c.data.fields.value:false};var io=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()})}),co="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",ve=async(t,e)=>{try{let a=t.parseCoinType(e).slice(2),o=t.address.get("core.market");if(!o)return null;let s=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:o,name:{type:co,value:a}}),r=io.safeParse(s?.data?.content);return r.success?r.data.fields.value:"0"}catch(a){return console.error(`Error in getBorrowLimit for ${e}: ${a.message}`),"0"}};var lo="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",ta=async({constants:t,scallopSuiKit:e},a,o)=>{let s=new Set(a),r=Object.fromEntries(Object.entries(t.coinTypeToCoinNameMap).filter(([l,d])=>s.has(d))),n=null,i=false,c=[];do{let l=await e.queryGetDynamicFields({parentId:lo,limit:10,cursor:n});if(!l)break;let{data:d,hasNextPage:u,nextCursor:f}=l,m=d.filter(y=>{let p=`0x${y.name.value.name}`;return !!r[p]}).map(y=>y.objectId)??[];c.push(...await e.queryGetObjects(m)),i=u,n=f;}while(i);return c.reduce((l,d)=>{if(d.content?.dataType==="moveObject"){let u=`0x${d.content.fields.name.fields.name}`,f=r[u];if(!f)return l;let y=+d.content.fields.value;l[f]=y/o;}return l},{})};var sa=async({utils:t,indexer:e},a=false,o)=>{o=o??await t.getCoinPrices()??{};let s={},r={};if(a){let g=await e.getMarket(),A=T=>{T.coinPrice=o[T.coinName]??T.coinPrice,T.coinWrappedType=t.getCoinWrappedType(T.coinName),s[T.coinName]=T;},w=T=>{T.coinPrice=o[T.coinName]??T.coinPrice,T.coinWrappedType=t.getCoinWrappedType(T.coinName),r[T.coinName]=T;};return Object.values(g.pools).filter(T=>!!T).forEach(A),Object.values(g.collaterals).filter(T=>!!T).forEach(w),{pools:s,collaterals:r}}let n=new suiKit.SuiTxBlock,i=t.address.get("core.packages.query.id"),c=t.address.get("core.market"),l=`${i}::market_query::market_data`,d=[n.sharedObjectRef({...await ne(c,t.scallopSuiKit),mutable:true})],f=(await t.scallopSuiKit.queryInspectTxn({queryTarget:l,args:d,txBlock:n,keys:x.rpc.getInspectTxn({queryTarget:l,args:[c],node:t.scallopSuiKit.currentFullNode})}))?.events[0]?.parsedJson,m=(f?.pools??[]).filter(g=>{let A=utils.normalizeStructTag(g.type.name),w=t.parseCoinNameFromType(A);return t.constants.whitelist.lending.has(w)}),y=(f?.collaterals??[]).filter(g=>{let A=utils.normalizeStructTag(g.type.name),w=t.parseCoinNameFromType(A);return t.constants.whitelist.collateral.has(w)}),p=m.map(g=>t.parseCoinNameFromType(utils.normalizeStructTag(g.type.name))),[b,h]=await Promise.all([Promise.all(p.map(g=>Ie(t,g))),Promise.all(p.map(g=>ve(t,g)))]);for(let g=0;g<m.length;g++){let A=m[g],w=p[g],T=o[w]??0,k=ot({...A,isIsolated:await oe(t,w),supplyLimit:b[g]??"0",borrowLimit:h[g]??"0"}),R=st(t,k);s[w]={coinName:w,symbol:t.parseSymbol(w),marketCoinType:t.parseMarketCoinType(w),sCoinType:t.parseSCoinType(t.parseMarketCoinName(w))??"",coinWrappedType:t.getCoinWrappedType(w),coinPrice:T,...k,...R};}for(let g of y){let A=utils.normalizeStructTag(g.type.name),w=t.parseCoinNameFromType(A),T=o[w]??0,k=Ae({...g,liquidationPenalty:g.liquidationPanelty,isIsolated:await oe(t,w)}),R=Pe(t,k);r[w]={coinName:w,symbol:t.parseSymbol(w),marketCoinType:t.parseMarketCoinType(w),coinWrappedType:t.getCoinWrappedType(w),coinPrice:T,...k,...R};}return {pools:s,collaterals:r}},ra=async({utils:t,scallopSuiKit:e},a)=>{let o=["lendingPoolAddress","collateralPoolAddress","borrowDynamic","interestModel","riskModel","borrowFeeKey","supplyLimitKey","borrowLimitKey","isolatedAssetKey"],s=[];for(let u of a){let f=t.constants.poolAddresses[u];for(let m of o)f?.[m]&&f[m]!==""&&s.push(f[m]);}let r=Oe(s,50),c=(await Promise.all(r.map(u=>e.queryGetObjects(u,{showContent:true})))).flat().reduce((u,f)=>(u[f.objectId]=f,u),{}),d={};for(let u of a){let f=t.constants.poolAddresses[u];d[u]={balanceSheet:c[f?.lendingPoolAddress??""],collateralStat:c[f?.collateralPoolAddress??""],borrowDynamic:c[f?.borrowDynamic??""],interestModel:c[f?.interestModel??""],riskModel:c[f?.riskModel??""],borrowFeeKey:c[f?.borrowFeeKey??""],supplyLimitKey:c[f?.supplyLimitKey??""],borrowLimitKey:c[f?.borrowLimitKey??""],isolatedAssetKey:c[f?.isolatedAssetKey??""]};}return d},na=async(t,e,a=false,o)=>{o=o??await t.utils.getCoinPrices();let s={},r={};if(a){let i=await t.indexer.getMarket(),c=d=>{d.coinPrice=o[d.coinName]??d.coinPrice,d.coinWrappedType=t.utils.getCoinWrappedType(d.coinName),s[d.coinName]=d;},l=d=>{d.coinPrice=o[d.coinName]??d.coinPrice,d.coinWrappedType=t.utils.getCoinWrappedType(d.coinName),r[d.coinName]=d;};return Object.values(i.pools).filter(d=>!!d).forEach(c),Object.values(i.collaterals).filter(d=>!!d).forEach(l),{pools:s,collaterals:r}}let n=await ra(t,e);return await Promise.allSettled(e.map(async i=>{try{let c=await fo(t,i,a,o?.[i]??0,n[i]);c?.marketPool&&(s[i]=c?.marketPool),c?.collateral&&(r[i]=c.collateral);}catch(c){console.error(c);}})),{pools:s,collaterals:r}},po=async(t,{balanceSheet:e,borrowDynamic:a,collateralStat:o,interestModel:s,riskModel:r,borrowFeeKey:n,supplyLimitKey:i,borrowLimitKey:c})=>{if(!e||!a||!s)throw new Error("Missing required market objects");let l=G(e),d=G(s),u=G(a),f=n?G(n):{value:"0"},m=i?G(i):"0",y=c?G(c):"0",p=r?G(r):void 0,b=o?G(o):void 0,h=await oe(t,t.parseCoinNameFromType(`0x${d.type.fields.name}`)),g=p&&b?{type:d.type.fields,collateralFactor:p.collateral_factor.fields,liquidationFactor:p.liquidation_factor.fields,liquidationPenalty:p.liquidation_penalty.fields,liquidationDiscount:p.liquidation_discount.fields,liquidationReserveFactor:p.liquidation_revenue_factor.fields,maxCollateralAmount:p.max_collateral_amount,totalCollateralAmount:b.amount,isIsolated:h}:void 0;return {type:d.type.fields,maxBorrowRate:d.max_borrow_rate.fields,interestRate:u.interest_rate.fields,interestRateScale:u.interest_rate_scale,borrowIndex:u.borrow_index,lastUpdated:u.last_updated,cash:l.cash,debt:l.debt,marketCoinSupply:l.market_coin_supply,reserve:l.revenue,reserveFactor:d.revenue_factor.fields,borrowWeight:d.borrow_weight.fields,borrowFeeRate:f,baseBorrowRatePerSec:d.base_borrow_rate_per_sec.fields,borrowRateOnHighKink:d.borrow_rate_on_high_kink.fields,borrowRateOnMidKink:d.borrow_rate_on_mid_kink.fields,highKink:d.high_kink.fields,midKink:d.mid_kink.fields,minBorrowAmount:d.min_borrow_amount,supplyLimit:m,borrowLimit:y,isIsolated:h,parsedOriginMarketCollateral:g}},fo=async(t,e,a=false,o,s)=>{if(o=o??(await t.utils.getCoinPrices())?.[e],a){let d=await t.indexer.getMarketPool(e);if(!d)return;d.coinPrice=o??d.coinPrice,d.coinWrappedType=t.utils.getCoinWrappedType(d.coinName);let u;return t.constants.whitelist.collateral.has(e)&&(u=await t.indexer.getMarketCollateral(e),u.coinPrice=o??u.coinPrice,u.coinWrappedType=t.utils.getCoinWrappedType(u.coinName)),{marketPool:d,collateral:u}}if(s??=(await ra(t,[e]))[e],!s)throw new Error(`Failed to fetch required market objects for ${e}`);let r=await po(t.utils,s),n=ot(r),i=st(t.utils,n),c=r.parsedOriginMarketCollateral?Ae(r.parsedOriginMarketCollateral):void 0,l=()=>({coinName:e,symbol:t.utils.parseSymbol(e),marketCoinType:t.utils.parseMarketCoinType(e),coinType:t.utils.parseCoinType(e)});return {marketPool:{...l(),sCoinType:t.utils.parseSCoinType(t.utils.parseMarketCoinName(e))??"",coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:o??0,highKink:n.highKink,midKink:n.midKink,reserveFactor:n.reserveFactor,borrowWeight:n.borrowWeight,borrowFee:n.borrowFee,marketCoinSupplyAmount:n.marketCoinSupplyAmount,minBorrowAmount:n.minBorrowAmount,...i},collateral:c?{...l(),coinWrappedType:t.utils.getCoinWrappedType(e),coinPrice:o,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...Pe(t.utils,c)}:void 0}},ia=async({utils:t,indexer:e,scallopSuiKit:a},o=[...t.constants.whitelist.collateral],s=false)=>{let r=t.address.get("core.market"),n=await t.getCoinPrices()??{},i={};if(s){let l=await e.getMarketCollaterals(),d=u=>{o.includes(u.coinName)&&(u.coinPrice=n[u.coinName]??u.coinPrice,u.coinWrappedType=t.getCoinWrappedType(u.coinName),i[u.coinName]=u);};return Object.values(l).filter(u=>!!u).forEach(d),i}let c=await a.queryGetObject(r);return await Promise.allSettled(o.map(async l=>{let d=await rt({utils:t,indexer:e,scallopSuiKit:a},l,s,c?.data,n?.[l]);d&&(i[l]=d);})),i},rt=async({utils:t,indexer:e,scallopSuiKit:a},o,s=false,r,n)=>{if(n=n??(await t.getCoinPrices())?.[o],s){let T=await e.getMarketCollateral(o);return T.coinPrice=n??T.coinPrice,T.coinWrappedType=t.getCoinWrappedType(T.coinName),T}let i=t.address.get("core.market");if(r=r||(await a.queryGetObject(i))?.data,!(r&&r.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let c=r.content.fields,l=t.parseCoinType(o),d=c.risk_models.fields.table.fields.id.id,u=c.collateral_stats.fields.table.fields.id.id,f={type:"0x1::type_name::TypeName",value:{name:l.substring(2)}},[m,y]=await Promise.all([a.queryGetDynamicFieldObject({parentId:d,name:f}),a.queryGetDynamicFieldObject({parentId:u,name:f})]),p=m?.data;if(!(p&&p.content&&"fields"in p.content))throw new Error(`Failed to fetch riskModelDynamicFieldObject for ${m?.error?.code.toString()}: `);let b=p.content.fields.value.fields,h=y?.data;if(!(h&&h.content&&"fields"in h.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${o}: ${y?.error?.code.toString()}`);let g=h.content.fields.value.fields,A=Ae({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 oe(t,o)}),w=Pe(t,A);return {coinName:o,symbol:t.parseSymbol(o),coinType:t.parseCoinType(o),marketCoinType:t.parseMarketCoinType(o),coinWrappedType:t.getCoinWrappedType(o),coinPrice:n??0,collateralFactor:A.collateralFactor,liquidationFactor:A.liquidationFactor,liquidationDiscount:A.liquidationDiscount,liquidationPenalty:A.liquidationPenalty,liquidationReserveFactor:A.liquidationReserveFactor,...w}},ce=async({utils:t},e)=>{let a=e,o=t.constants.protocolObjectId,s=[],r=false,n=null;do{let d=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:`${o}::obligation::ObligationKey`},options:{showContent:true},cursor:n,limit:10});if(!d)break;s.push(...d.data),d.hasNextPage&&d.nextCursor?(r=true,n=d.nextCursor):r=false;}while(r);let i=s.filter(d=>!!d.data),c=[],l=await t.scallopSuiKit.queryGetObjects(i.map(d=>d.data?.content).filter(d=>d?.dataType==="moveObject").map(d=>d.fields.ownership.fields.of));return await Promise.allSettled(i.map(async({data:d},u)=>{let f=d?.objectId,m=d?.content;if(f&&m&&"fields"in m){let y=m.fields,p=String(y.ownership.fields.of),b=await nt(t,l[u]);c.push({id:p,keyId:f,locked:b});}})),c},nt=async({scallopSuiKit:t},e)=>{let a=typeof e=="string"?(await t.queryGetObject(e))?.data:e,o=false;return a&&a?.content?.dataType==="moveObject"&&"lock_key"in a.content.fields&&(o=!!a.content.fields.lock_key),o},Ne=async({address:t,scallopSuiKit:e},a)=>{let o=new suiKit.SuiTxBlock,s=t.get("core.packages.query.id"),r=t.get("core.version"),n=t.get("core.market"),i=`${s}::obligation_query::obligation_data`,[c,l,d]=await ie([r,n,a],e),u=[o.sharedObjectRef({...c,mutable:false}),o.sharedObjectRef({...l,mutable:true}),o.sharedObjectRef({...d,mutable:true}),{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}];return (await e.queryInspectTxn({queryTarget:i,args:u,txBlock:o,keys:x.rpc.getInspectTxn({queryTarget:i,args:[r,n,a],node:e.currentFullNode})}))?.events[0]?.parsedJson},ca=async({utils:t},e=[...t.constants.whitelist.lending],a)=>{let o=a??t.walletAddress,s={};return await Promise.allSettled(e.map(async r=>{let n=await it({utils:t},r,o);s[r]=n;})),s},it=async({utils:t},e,a)=>{let o=a??t.walletAddress,s=t.parseCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:o,coinType:s});return S__default.default(r?.totalBalance??"0").toNumber()},la=async({utils:t},e,a)=>{e=e||[...t.constants.whitelist.lending].map(r=>t.parseMarketCoinName(r));let o=a??t.walletAddress,s={};return await Promise.allSettled(e.map(async r=>{let n=await ct({utils:t},r,o);s[r]=n;})),s},ct=async({utils:t},e,a)=>{let o=a??t.walletAddress,s=t.parseMarketCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:o,coinType:s});return S__default.default(r?.totalBalance??"0").toNumber()},da=async({utils:t},e,a=1e4)=>{let o=[],s={},r=e.reduce((c,l)=>{let d=t.parseCoinType(l).slice(2);return c[d]=l,c},{}),n=e.map(c=>{let l=t.constants.poolAddresses[c]?.flashloanFeeObject;return l||(o.push(c),null)}).filter(c=>!!c),i=await t.scallopSuiKit.queryGetObjects(n);if(o.length>0){let c=await ta(t,o,a);s={...s,...c};}return s={...s,...i.reduce((c,l)=>{if(l.content?.dataType==="moveObject"){let d=l.content.fields,u=l.content.fields.name.fields.name,f=+d.value;c[r[u]]=f/a;}return c},{})},s};var mo=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})),bo=zod.z.object({value:zod.z.string()}).transform(t=>S__default.default(t.value).shiftedBy(-9).toNumber()),ua=async(t,e)=>{let a=t.address.get("loyaltyProgram.rewardPool"),o=await t.scallopSuiKit.queryGetObject(a);if(o?.data?.content?.dataType!=="moveObject")return null;let s=o.data.content.fields,{isClaimEnabled:r,totalPoolReward:n}=mo.parse(s),i={pendingReward:0,totalPoolReward:n,isClaimEnabled:r};if(e=e??(await t.getVeScas())[0]?.keyObject,!e)return i;let c=t.address.get("loyaltyProgram.userRewardTableId"),l=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(l?.data?.content?.dataType!=="moveObject")return i;let d=l.data.content.fields;return i.pendingReward=bo.parse(d),i},yo=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})),go=zod.z.object({value:zod.z.string()}).transform(t=>S__default.default(t.value).shiftedBy(-9).toNumber()),pa=async(t,e)=>{let a=t.address.get("veScaLoyaltyProgram.veScaRewardPool"),o=await t.scallopSuiKit.queryGetObject(a);if(o?.data?.content?.dataType!=="moveObject")return null;let s=o.data.content.fields,{isClaimEnabled:r,reserveVeScaKey:n}=yo.parse(s),i={pendingVeScaReward:0,pendingScaReward:0,totalPoolReward:0,isClaimEnabled:r},c;if(n&&(c=await t.getVeSca(n),i.totalPoolReward=c?.currentVeScaBalance??0),e=e??(await t.getVeScas())[0]?.keyObject,!e)return i;let l=t.address.get("veScaLoyaltyProgram.veScaRewardTableId"),d=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:l,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(d?.data?.content?.dataType!=="moveObject")return i;let u=d.data.content.fields;i.pendingScaReward=go.parse(u);let f=Math.max((c?.unlockAt??0)-Date.now(),0);return i.pendingVeScaReward=i.pendingScaReward*(Math.floor(f/1e3)/126144e3),i};var fa=async(t,e=[...t.constants.whitelist.lending],a,o,s,r=false)=>{let n=e.map(m=>t.utils.parseMarketCoinName(m)),i=n.filter(m=>t.constants.whitelist.spool.has(m));s=s??await t.utils.getCoinPrices(),o=o??(await t.getMarketPools(e,{indexer:r,coinPrices:s})).pools;let c=await t.getSpools(i,{indexer:r,marketPools:o,coinPrices:s}),[l,d,u]=await Promise.all([t.getCoinAmounts(e,a),t.getMarketCoinAmounts(n,a),t.getAllStakeAccounts(a)]),f={};return await Promise.allSettled(e.map(async m=>{let y=i.find(b=>b===t.utils.parseMarketCoinName(m)),p=t.utils.parseMarketCoinName(m);f[m]=await dt(t,m,a,r,o?.[m],y?c[y]:void 0,y?u[y]:[],l?.[m],d?.[p],s?.[m]??0);})),f},dt=async(t,e,a,o=false,s,r,n,i,c,l,d)=>{let u=t.utils.parseMarketCoinName(e);if(l=l??(await t.utils.getCoinPrices())?.[e]??0,s=s??await t.getMarketPool(e,{indexer:o,coinPrice:l}),!s)throw new Error(`Failed to fetch marketPool for ${e}`);r=r??t.constants.whitelist.spool.has(u)?await t.getSpool(u,{indexer:o,marketPool:s,coinPrices:{[e]:l}}):void 0,n=n||t.constants.whitelist.spool.has(u)?await t.getStakeAccounts(u,a):[],i=i||await t.getCoinAmount(e,a),c=c||await t.getMarketCoinAmount(u,a),d=d||await t.getSCoinAmount(u,a);let f=t.utils.getCoinDecimal(e),m=S__default.default(0),y=S__default.default(0),p=S__default.default(0),b=S__default.default(0),h=S__default.default(0),g=S__default.default(0),A=S__default.default(0),w=S__default.default(0),T=S__default.default(0);if(r)for(let U of n){let N=S__default.default(U.staked),_=N.shiftedBy(-1*r.coinDecimal),K=N.multipliedBy(s?.conversionRate??1),Q=K.shiftedBy(-1*r.coinDecimal),D=Q.multipliedBy(r.coinPrice);m=m.plus(N),y=y.plus(_),p=p.plus(K),b=b.plus(Q),h=h.plus(D),g=g.plus(N),A=g.shiftedBy(-1*r.coinDecimal);let Y=r.currentPointIndex?S__default.default(r.currentPointIndex-U.index).dividedBy(1e9):1;w=w.plus(N.multipliedBy(Y).plus(U.points).multipliedBy(r.exchangeRateNumerator).dividedBy(r.exchangeRateDenominator)),T=w.shiftedBy(-1*r.rewardCoinDecimal);}let k=S__default.default(c).plus(S__default.default(d)).multipliedBy(s?.conversionRate??1),R=k.shiftedBy(-1*f),B=R.multipliedBy(l??0),M=S__default.default(l??0).multipliedBy(s?.conversionRate??1),ee=S__default.default(c).plus(S__default.default(d)),q=ee.shiftedBy(-1*f),P=S__default.default(i),O=P.shiftedBy(-1*f),I=pe(k,s?.supplyAmount??1/0).plus(p),v=pe(R,s?.supplyCoin??1/0).plus(b);return {coinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(e),marketCoinType:t.utils.parseMarketCoinType(e),sCoinType:s?.sCoinType??"",coinDecimal:f,coinPrice:l??0,conversionRate:s?.conversionRate??1,marketCoinPrice:M.toNumber(),supplyApr:s?.supplyApr??0,supplyApy:s?.supplyApy??0,rewardApr:r?.rewardApr??0,suppliedAmount:k.plus(p).toNumber(),suppliedCoin:R.plus(b).toNumber(),suppliedValue:B.plus(h).toNumber(),stakedMarketAmount:m.toNumber(),stakedMarketCoin:y.toNumber(),stakedAmount:p.toNumber(),stakedCoin:b.toNumber(),stakedValue:h.toNumber(),unstakedMarketAmount:ee.toNumber(),unstakedMarketCoin:q.toNumber(),unstakedAmount:k.toNumber(),unstakedCoin:R.toNumber(),unstakedValue:B.toNumber(),availableSupplyAmount:P.toNumber(),availableSupplyCoin:O.toNumber(),availableWithdrawAmount:I.toNumber(),availableWithdrawCoin:v.toNumber(),availableStakeAmount:ee.toNumber(),availableStakeCoin:q.toNumber(),availableUnstakeAmount:g.toNumber(),availableUnstakeCoin:A.toNumber(),availableClaimAmount:w.toNumber(),availableClaimCoin:T.toNumber(),isIsolated:s?s.isIsolated:false}},ma=async(t,e,a,o,s=false)=>{a=a??await t.getMarketPools(void 0,{indexer:s}),o=o??await t.getAllCoinPrices({marketPools:a.pools});let[r,n]=await Promise.all([t.getCoinAmounts(void 0,e),t.getObligations(e)]),i=await t.scallopSuiKit.queryGetObjects(n.map(l=>l.id)),c={};return await Promise.allSettled(n.map(async(l,d)=>{c[l.keyId]=await _e(t,i[d]??l.id,e,s,a,o,r);})),c},ba=async(t,e,a,o,s=false)=>{a=a??await t.getMarketPools(void 0,{indexer:s}),o=o??await t.getAllCoinPrices({marketPools:a.pools});let r=[];return await Promise.allSettled(e.map(async n=>{let i=await _e(t,n,"",s,a,o,{});i&&r.push(i);})),r},_e=async(t,e,a,o=false,s,r,n)=>{s=s??await t.getMarketPools(void 0,{indexer:o}),r=r??await t.getAllCoinPrices({marketPools:s.pools}),n=n??await t.getCoinAmounts(Array.from(t.constants.whitelist.lending),a);let[i,c,l]=await Promise.all([t.queryObligation(e),t.getBorrowIncentivePools(void 0,{coinPrices:r,marketPools:s.pools}),t.getBorrowIncentiveAccounts(e)]),d={},u={},f={},m=0,y=S__default.default(0),p=S__default.default(0),b=S__default.default(0),h=0,g=0,A=S__default.default(0),w=S__default.default(0);for(let P of Array.from(t.constants.whitelist.collateral)){let O=i?.collaterals.find(N=>{let _=t.utils.parseCoinNameFromType(N.type.name);return P===_}),I=s.collaterals[P],v=t.utils.getCoinDecimal(P),F=r?.[P]??0,U=n?.[P]??0;if(I){let N=S__default.default(O?.amount??0),_=N.shiftedBy(-1*v),K=_.multipliedBy(F),Q=K.multipliedBy(I.collateralFactor),D=K.multipliedBy(I.liquidationFactor),$=S__default.default(U),Y=$.shiftedBy(-1*v);y=y.plus(K),p=p.plus(Q),b=b.plus(D),N.isGreaterThan(0)&&m++,d[P]={coinName:P,coinType:t.utils.parseCoinType(P),symbol:t.utils.parseSymbol(P),coinDecimal:v,coinPrice:F,depositedAmount:N.toNumber(),depositedCoin:_.toNumber(),depositedValue:K.toNumber(),borrowCapacityValue:Q.toNumber(),requiredCollateralValue:D.toNumber(),availableDepositAmount:$.toNumber(),availableDepositCoin:Y.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let T=[...new Set([...Object.values(s.pools).filter(P=>!!P).map(P=>P.coinName)])];for(let[P,O]of Object.entries(l)){if(!O)continue;let I=P,v=c[I];if(v){let F=[];Object.entries(O.pointList).forEach(([U,N])=>{let _=v.points[t.utils.parseSCoinTypeNameToMarketCoinName(U)];if(N&&_){let K=S__default.default(0),Q=S__default.default(0),D=S__default.default(N.weightedAmount),Y=_.currentPointIndex?Math.max(S__default.default(_.currentPointIndex-N.index).dividedBy(1e9).toNumber(),0):1;K=K.plus(D.multipliedBy(Y).plus(N.points)),Q=K.shiftedBy(-1*_.coinDecimal);let te=S__default.default(1e12),re=S__default.default(_.baseWeight).dividedBy(te),Ce=S__default.default(N.weightedAmount).div(S__default.default(O.debtAmount).multipliedBy(re)).isFinite()?S__default.default(N.weightedAmount).div(S__default.default(O.debtAmount).multipliedBy(re)).toNumber():1,_t=isFinite(_.rewardApr)?_.rewardApr:0;K.isGreaterThanOrEqualTo(0)&&F.push({coinName:_.coinName,coinType:_.coinType,symbol:_.symbol,coinDecimal:_.coinDecimal,coinPrice:_.coinPrice,weightedBorrowAmount:D.toNumber(),availableClaimAmount:K.toNumber(),availableClaimCoin:Q.toNumber(),baseRewardApr:_t,boostedRewardApr:_t*Ce,maxBoost:1/re.toNumber(),boostValue:Ce});}}),Object.keys(v.points).some(U=>{let N=v.points[U]?.rewardApr;return N!==1/0&&typeof N=="number"&&N>0})&&O.debtAmount>0&&g++,f[I]={coinName:v.coinName,coinType:v.coinType,symbol:v.symbol,coinDecimal:v.coinDecimal,coinPrice:v.coinPrice,rewards:F};}}for(let P of T){let O=i?.debts.find(N=>{let _=t.utils.parseCoinNameFromType(N.type.name);return P===_}),I=s.pools[P],v=t.utils.getCoinDecimal(P),F=r?.[P]??0,U=n?.[P]??0;if(I){let N=O?.borrowIndex?I.borrowIndex/Number(O.borrowIndex)-1:0,_=S__default.default(O?.amount??0).multipliedBy(N+1),K=_.shiftedBy(-1*v),Q=_,D=Q.shiftedBy(-1*v),$=S__default.default(U),Y=$.shiftedBy(-1*v),te=D.multipliedBy(F),re=te.multipliedBy(I.borrowWeight);A=A.plus(te),w=w.plus(re),_.isGreaterThan(0)&&h++,u[P]={coinName:P,coinType:t.utils.parseCoinType(P),symbol:t.utils.parseSymbol(P),coinDecimal:v,coinPrice:F,borrowedAmount:_.toNumber(),borrowedCoin:K.toNumber(),borrowedValue:te.toNumber(),borrowedValueWithWeight:re.toNumber(),borrowIndex:Number(O?.borrowIndex??0),requiredRepayAmount:Q.toNumber(),requiredRepayCoin:D.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:$.toNumber(),availableRepayCoin:Y.toNumber(),rewards:(f[P]?.rewards??[]).filter(({weightedBorrowAmount:Ce})=>Ce>0)};}}let k=b.isZero()?w.isGreaterThan(0)?S__default.default(100):S__default.default(0):w.dividedBy(b);k=k.isLessThan(1)?k:S__default.default(1);let R=y.minus(A).isGreaterThan(0)?y.minus(A):S__default.default(0),B=p.minus(w).isGreaterThan(0)?p.minus(w):S__default.default(0),M=w.isGreaterThan(0)?b:S__default.default(0),ee=w.minus(M).isGreaterThan(0)?w.minus(M):S__default.default(0),q={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:y.toNumber(),totalBorrowedValue:A.toNumber(),totalBalanceValue:R.toNumber(),totalBorrowCapacityValue:p.toNumber(),totalAvailableCollateralValue:B.toNumber(),totalBorrowedValueWithWeight:w.toNumber(),totalRequiredCollateralValue:M.toNumber(),totalUnhealthyCollateralValue:ee.toNumber(),totalRiskLevel:k.toNumber(),totalDepositedPools:m,totalBorrowedPools:h,totalRewardedPools:g,collaterals:d,debts:u,borrowIncentives:f};for(let[P,O]of Object.entries(q.collaterals)){if(!O)continue;let I=s.collaterals[P];if(I){let v=S__default.default(q.totalAvailableCollateralValue).dividedBy(I.collateralFactor).dividedBy(I.coinPrice).shiftedBy(I.coinDecimal);v=q.totalBorrowedValueWithWeight===0?S__default.default(O.depositedAmount):pe(v.multipliedBy(xe(S__default.default(q.totalAvailableCollateralValue).dividedBy(I.collateralFactor).toNumber(),3,"increase")).toNumber(),O.depositedAmount,I.depositAmount),O.availableWithdrawAmount=v.toNumber(),O.availableWithdrawCoin=v.shiftedBy(-1*O.coinDecimal).toNumber();}}for(let[P,O]of Object.entries(q.debts)){if(!O)continue;let I=s.pools[P];if(I){let v=S__default.default(O.requiredRepayAmount).multipliedBy(xe(O.borrowedValue,3,"decrease")),F=S__default.default(q.totalAvailableCollateralValue).dividedBy(I.borrowWeight).shiftedBy(I.coinDecimal).dividedBy(I.coinPrice);F=q.totalAvailableCollateralValue!==0&&S__default.default(I.maxBorrowCoin).isGreaterThan(I.borrowCoin)?pe(F.multipliedBy(xe(F.shiftedBy(-1*I.coinDecimal).multipliedBy(I.coinPrice).toNumber(),3,"increase")).toNumber(),I.supplyAmount):S__default.default(0),O.availableBorrowAmount=F.toNumber(),O.availableBorrowCoin=F.shiftedBy(-1*O.coinDecimal).toNumber(),O.requiredRepayAmount=v.toNumber(),O.requiredRepayCoin=v.shiftedBy(-1*O.coinDecimal).toNumber();}}return q},ya=async(t,e=false)=>{let a=S__default.default(0),o=S__default.default(0),s=S__default.default(0);if(e){let i=await t.indexer.getTotalValueLocked();return {supplyValue:i.supplyValue,supplyValueChangeRatio:i.supplyValueChangeRatio,borrowValue:i.borrowValue,borrowValueChangeRatio:i.borrowValueChangeRatio,totalValue:i.totalValue,totalValueChangeRatio:i.totalValueChangeRatio,supplyLendingValue:i.supplyLendingValue,supplyLendingValueChangeRatio:i.supplyLendingValueChangeRatio,supplyCollateralValue:i.supplyCollateralValue,supplyCollateralValueChangeRatio:i.supplyCollateralValueChangeRatio}}let r=await t.getMarketPools(void 0,{indexer:e});for(let i of Object.values(r.pools))i&&(a=a.plus(S__default.default(i.supplyCoin).multipliedBy(i.coinPrice)),s=s.plus(S__default.default(i.borrowCoin).multipliedBy(i.coinPrice)));for(let i of Object.values(r.collaterals))i&&(o=o.plus(S__default.default(i.depositCoin).multipliedBy(i.coinPrice)));return {supplyValue:a.plus(o).toNumber(),supplyLendingValue:a.toNumber(),supplyCollateralValue:o.toNumber(),borrowValue:s.toNumber(),totalValue:a.plus(o).minus(s).toNumber()}},ga=async(t,e,a=false)=>{let o=await t.getAllCoinPrices({indexer:a}),s=await t.getMarketPools(void 0,{indexer:a,coinPrices:o}),[r,n,i]=await Promise.all([t.getLendings(void 0,e,{indexer:a,marketPools:s.pools,coinPrices:o}),t.getObligationAccounts(e,{indexer:a,market:s,coinPrices:o}),t.getVeScas({walletAddress:e,excludeEmpty:true})]),c=Object.values(r).filter(p=>!!p&&p.availableWithdrawCoin>0).map(p=>({suppliedCoin:p.availableWithdrawCoin,suppliedValue:p.suppliedValue,stakedCoin:p.availableUnstakeCoin,coinName:p.coinName,symbol:p.symbol,coinType:p.coinType,coinPrice:p.coinPrice,coinDecimals:p.coinDecimal,supplyApr:p.supplyApr,supplyApy:p.supplyApy,incentiveApr:isFinite(p.rewardApr)?p.rewardApr:0})),l=Object.values(n).filter(p=>!!p&&(p.totalBorrowedValueWithWeight>0||p.totalDepositedValue>0)).map(p=>({obligationId:p.obligationId,totalDebtsInUsd:p.totalBorrowedValueWithWeight,totalCollateralInUsd:p.totalDepositedValue,riskLevel:p.totalRiskLevel,availableCollateralInUsd:p.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:p.totalUnhealthyCollateralValue,collaterals:Object.values(p.collaterals).filter(b=>!!b&&b.depositedCoin>0).map(b=>({coinName:b.coinName,symbol:b.symbol,coinDecimals:b.coinDecimal,coinType:b.coinType,coinPrice:b.coinPrice,depositedCoin:b.depositedCoin,depositedValueInUsd:b.depositedValue})),borrowedPools:Object.values(p.debts).filter(b=>!!b&&b.borrowedCoin>0).map(b=>({coinName:b.coinName,symbol:b.symbol,coinDecimals:b.coinDecimal,coinType:b.coinType,coinPrice:b.coinPrice,borrowedCoin:b.borrowedCoin,borrowedValueInUsd:b.borrowedValueWithWeight,borrowApr:s.pools[b.coinName]?.borrowApr,borrowApy:s.pools[b.coinName]?.borrowApy,incentiveInfos:(p.borrowIncentives[b.coinName]?.rewards??[]).filter(h=>!!h&&isFinite(h.baseRewardApr)).map(h=>({coinName:h.coinName,symbol:h.symbol,coinType:h.coinType,boostValue:h.boostValue,maxBoost:h.maxBoost,incentiveApr:h.baseRewardApr,boostedIncentiveApr:h.boostedRewardApr}))}))})),d="sui",u="SUI",f=Object.values(r).reduce((p,b)=>{if(b){if(b.availableClaimCoin===0)return p;p[d]?p[d].pendingRewardInCoin+=b.availableClaimCoin:p[d]={symbol:u,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:o[d]??0,pendingRewardInCoin:b.availableClaimCoin};}return p},{}),m=Object.values(n).filter(p=>!!p).reduce((p,b)=>(Object.values(b.borrowIncentives).forEach(h=>{h?.rewards.forEach(g=>{if(g.availableClaimCoin===0)return p;p[g.coinName]?p[g.coinName].pendingRewardInCoin+=g.availableClaimCoin:p[g.coinName]={symbol:g.symbol,coinType:g.coinType,coinPrice:g.coinPrice,pendingRewardInCoin:g.availableClaimCoin};});}),p),{}),y=i.map(({keyId:p,lockedScaCoin:b,currentVeScaBalance:h,unlockAt:g})=>({veScaKey:p,coinPrice:o.sca??0,lockedScaInCoin:b,lockedScaInUsd:b*(o.sca??0),currentVeScaBalance:h,remainingLockPeriodInDays:g-Date.now()>0?(g-Date.now())/864e5:0,unlockAt:g}));return {totalSupplyValue:c.reduce((p,b)=>(p+=b.suppliedValue,p),0),...l.reduce((p,b)=>(p.totalDebtValue+=b.totalDebtsInUsd,p.totalCollateralValue+=b.totalCollateralInUsd,p),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:y.reduce((p,b)=>(p+=b.lockedScaInUsd,p),0),lendings:c,borrowings:l,pendingRewards:{lendings:Object.entries(f).reduce((p,[b,h])=>(p.push({...h,coinName:"sui",pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),p),[]),borrowIncentives:Object.entries(m).reduce((p,[b,h])=>(p.push({coinName:b,...h,pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),p),[])},veScas:y}};var ha=async(t,e,a,o=false)=>{if(a=a??(o?await t.getCoinPricesByIndexer():await t.utils.getCoinPrices()),e=e??(await t.getMarketPools(void 0,{coinPrices:a,indexer:o})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let s={};return t.constants.whitelist.scoin.forEach(r=>{let n=t.utils.parseCoinName(r);s[r]=S__default.default(a[n]??0).multipliedBy(e[n]?.conversionRate??1).toNumber();}),{...a,...s}};var Sa=async({address:t,scallopSuiKit:e},a)=>{let o=t.get("referral.bindingTableId"),s=await e.queryGetDynamicFieldObject({parentId:o,name:{type:"address",value:a}});return s?.data?.content?.dataType!=="moveObject"?null:s.data.content.fields.value};var wa=async({utils:t},e)=>{let a=new suiKit.SuiTxBlock,o=t.address.get("scoin.id"),s=t.getSCoinTreasury(e),r=[a.sharedObjectRef({...await ne(s,t.scallopSuiKit),mutable:false})],n=[t.parseSCoinType(e),t.parseUnderlyingSCoinType(e)],i=`${o}::s_coin_converter::total_supply`,l=(await t.scallopSuiKit.queryInspectTxn({queryTarget:i,args:r,typeArgs:n,txBlock:a,keys:x.rpc.getInspectTxn({queryTarget:i,args:[s],node:t.scallopSuiKit.currentFullNode})}))?.results;if(l&&l[0]?.returnValues){let d=Uint8Array.from(l[0].returnValues[0][0]),u=l[0].returnValues[0][1];return ko__default.default(u==="u64","Result type is not u64"),S__default.default(bcs.bcs.u64().parse(d)).shiftedBy(t.getCoinDecimal(t.parseCoinName(e))).toNumber()}return 0},Ca=async({utils:t},e=[...t.constants.whitelist.scoin],a)=>{let o=a||t.suiKit.currentAddress,s={};return await Promise.allSettled(e.map(async r=>{let n=await pt({utils:t},r,o);s[r]=n;})),s},pt=async({utils:t},e,a)=>{let o=a||t.suiKit.currentAddress,s=t.parseSCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:o,coinType:s});return S__default.default(r?.totalBalance??"0").toNumber()},Ao=(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")},Ta=async(t,e,a,o)=>{Ao(t.utils,e,a);let s=t.utils.parseCoinName(e),r=t.utils.parseCoinName(a),n=await Promise.all([t.getMarketPool(s),t.getMarketPool(r)]);if(n.some(u=>!u))throw new Error("Failed to fetch the lendings data");if(n.some(u=>u?.conversionRate===0))throw new Error("Conversion rate cannot be zero");let i=n[0].conversionRate,c=1/n[1].conversionRate,d=await(async()=>{let u=await t.utils.getCoinPrices();if(!u[s]||!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[s]/u[r]})();return S__default.default(i).multipliedBy(d).multipliedBy(c).toNumber()};var ka=async(t,e)=>{let a=["spool","spoolReward","sCoinTreasury"],o=[];for(let c of e){let l=t.constants.poolAddresses[c];for(let d of a)l?.[d]&&l[d]!==""&&o.push(l[d]);}let s=[],r=Oe(o,50);for(let c of r){let l=await t.scallopSuiKit.queryGetObjects(c);l.length>0&&s.push(...l);}let n=s.reduce((c,l)=>(c[l.objectId]=l,c),{}),i={};for(let c of e){let l=t.constants.poolAddresses[c];for(let d of a){let u=l?.[d];u&&u!==""&&(i[c]||(i[c]={}),i[c][d]=n[u]);}}return i},Po=({spool:t,spoolReward:e})=>{if(!t||!e)throw new Error("spool or spoolReward is undefined");let a=G(t),o=G(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,...o}},Aa=async(t,e=[...t.constants.whitelist.spool],a=false,o,s)=>{let r=e.map(c=>t.utils.parseCoinName(c));if(o=o??(await t.getMarketPools(r,{indexer:a})).pools,s=s??await t.getAllCoinPrices({marketPools:o})??{},!o)throw new Error(`Fail to fetch marketPools for ${r}`);let n={};if(a){let c=await t.indexer.getSpools(),l=d=>{if(!e.includes(d.marketCoinName))return;let u=t.utils.parseCoinName(d.marketCoinName),f=t.utils.getSpoolRewardCoinName();d.coinPrice=s[u]??d.coinPrice,d.marketCoinPrice=s[d.marketCoinName]??d.marketCoinPrice,d.rewardCoinPrice=s[f]??d.rewardCoinPrice,n[d.marketCoinName]=d;};return Object.values(c).filter(d=>!!d).forEach(l),n}let i=await ka(t,r);return await Promise.allSettled(e.map(async(c,l)=>{try{let d=r[l],u=await xo(t,c,a,s,i[d]);u&&(n[c]=u);}catch(d){console.error(d);}})),n},xo=async(t,e,a=false,o,s)=>{let r=t.utils.parseCoinName(e);if(o=o||await t.getAllCoinPrices(),a){let b=await t.indexer.getSpool(e),h=t.utils.parseCoinName(e),g=t.utils.getSpoolRewardCoinName();return b.coinPrice=o?.[h]??b.coinPrice,b.marketCoinPrice=o?.[e]??b.marketCoinPrice,b.rewardCoinPrice=o?.[g]??b.rewardCoinPrice,b}s??=(await ka(t,[r]))[r];let n=t.utils.getSpoolRewardCoinName();o=o||await t.utils.getCoinPrices();let i=Po(s),c=Vt(i),l=o?.[e]??0,d=t.utils.getCoinDecimal(e),u=Et(c,l,d),f=Ut(i),m=o?.[n]??0,y=t.utils.getCoinDecimal(n),p=qt(c,f,u,m,y);return {marketCoinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(r),marketCoinType:t.utils.parseMarketCoinType(r),rewardCoinType:t.utils.isMarketCoin(n)?t.utils.parseMarketCoinType(n):t.utils.parseCoinType(n),sCoinType:t.utils.parseSCoinType(e)??"",coinDecimal:t.utils.getCoinDecimal(r),rewardCoinDecimal:t.utils.getCoinDecimal(n),coinPrice:o?.[r]??0,marketCoinPrice:l,rewardCoinPrice:m,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:f.exchangeRateNumerator,exchangeRateDenominator:f.exchangeRateDenominator,...p}},be=async({utils:t},e)=>{let a=e||t.suiKit.currentAddress,o=t.address.get("spool.object"),s=`${o}::spool_account::SpoolAccount`,r=[],n=false,i=null;do{let u=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:s},options:{showContent:true,showType:true},cursor:i,limit:10});u&&(r.push(...u.data),u.hasNextPage&&u.nextCursor?(n=true,i=u.nextCursor):n=false);}while(n);let c=[...t.constants.whitelist.spool].reduce((u,f)=>(u[f]=[],u),{}),l=Object.keys(c).reduce((u,f)=>{let m=t.parseCoinName(f),y=t.parseMarketCoinType(m);return u[f]=`${o}::spool_account::SpoolAccount<${y}>`,u},{}),d=Object.entries(l).reduce((u,[f,m])=>(u[m]=f,u),{});for(let u of r.map(f=>f.data)){let f=u?.objectId,m=u?.type;if(f&&u?.content&&"fields"in u.content){let y=u.content.fields,p=String(y.spool_id),b=String(y.stake_type.fields.name),h=Number(y.stakes),g=Number(y.index),A=Number(y.points),w=Number(y.total_points),T={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(m),R=T[d[k]];R&&R.push({id:f,type:k,stakePoolId:p,stakeType:utils.normalizeStructTag(b),staked:h,index:g,points:A,totalPoints:w});}}return c},ft=async({utils:t},e,a)=>{let o=t.address.get(`spool.pools.${e}.id`),s;if(a??=(await t.scallopSuiKit.queryGetObject(o)).data,a){let r=a.objectId,n=a.type;if(a.content&&"fields"in a.content){let i=a.content.fields,c=Number(i.max_distributed_point),l=Number(i.distributed_point),d=Number(i.distributed_point_per_period),u=Number(i.point_distribution_time),f=Number(i.max_stakes),m=String(i.stake_type.fields.name),y=Number(i.stakes),p=Number(i.index),b=Number(i.created_at),h=Number(i.last_update);s={id:r,type:utils.normalizeStructTag(n),maxPoint:c,distributedPoint:l,pointPerPeriod:d,period:u,maxStake:f,stakeType:utils.normalizeStructTag(m),totalStaked:y,index:p,createdAt:b,lastUpdate:h};}}return s},mt=async({utils:t},e)=>{let a=t.address.get(`spool.pools.${e}.rewardPoolId`),o,s=await t.scallopSuiKit.queryGetObject(a);if(s?.data){let r=s.data,n=r.objectId,i=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=String(c.spool_id),d=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),f=Number(c.rewards),m=Number(c.claimed_rewards);o={id:n,type:utils.normalizeStructTag(i),stakePoolId:l,ratioNumerator:d,ratioDenominator:u,rewards:f,claimedRewards:m};}}return o};var jo=async(t,e)=>{let a=e||t.suiKit.currentAddress,s=`${t.address.get("vesca.object")}::ve_sca::VeScaKey`,r=[],n=false,i=null;do{let l=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:s},cursor:i,limit:10});l&&(r.push(...l.data),l&&l.hasNextPage&&l.nextCursor?(n=true,i=l.nextCursor):n=false);}while(n);return r.map(l=>l.data).filter(l=>!!l)},Me=async({utils:t},e,a)=>{let o=await jo(t,e),s=Array(o.length).fill(null),r=o.map(async(i,c)=>{let l=await se(t,i);l&&(s[c]=l);});await Promise.allSettled(r);let n=s.filter(Boolean).sort((i,c)=>c.currentVeScaBalance-i.currentVeScaBalance);return a?n.filter(i=>i.lockedScaAmount!=="0"):n},Pa=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),se=async(t,e)=>{let a=t.address.get("vesca.tableId");if(!e)return;typeof e=="object"&&(e=Pa.parse(e));let o,s=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(!s)return;let r=s.data;if(r&&r.content&&r.content.dataType==="moveObject"&&"fields"in r.content){let n=r.content.fields.value.fields,i=Math.max(+n.unlock_at*1e3-Date.now(),0),c=String(n.locked_sca_amount),l=S__default.default(n.locked_sca_amount).shiftedBy(-9).toNumber(),d=l*(Math.floor(i/1e3)/126144e3);o={id:r.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:Pa.parse(s.data),lockedScaAmount:c,lockedScaCoin:l,currentVeScaBalance:d,unlockAt:S__default.default(n.unlock_at*1e3).toNumber()};}return o},No=async(t,e)=>{let a=t.address.get("vesca.id"),o=t.address.get("vesca.config");e=e??t.address.get("vesca.treasury");let s=new suiKit.SuiTxBlock,r=s.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}),[n,i]=await ie([e,o],t.scallopSuiKit),c=s.sharedObjectRef({...n,mutable:true}),l=`${a}::treasury::refresh`,d=[s.sharedObjectRef({...i,mutable:false}),c,r],u=`${a}::treasury::total_ve_sca_amount`,f=[c,r],m=await Promise.all(d.map(async g=>typeof g=="string"?(await t.scallopSuiKit.queryGetObject(g))?.data:g)),y=await Promise.all(f.map(async g=>typeof g=="string"?(await t.scallopSuiKit.queryGetObject(g))?.data:g));s.moveCall(l,m),s.moveCall(u,y);let p=await s.txBlock.build({client:t.suiKit.client,onlyTransactionKind:true}),h=(await t.scallopSuiKit.queryClient.fetchQuery({queryKey:x.rpc.getTotalVeScaTreasuryAmount({refreshArgs:d,vescaAmountArgs:f,node:t.scallopSuiKit.currentFullNode}),queryFn:async()=>await t.suiKit.inspectTxn(p)})).results;if(h&&h[1]?.returnValues){let g=Uint8Array.from(h[1].returnValues[0][0]),A=h[1].returnValues[0][1];return ko__default.default(A==="u64","Result type is not u64"),bcs.bcs.u64().parse(g)}return "0"},xa=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 o=a.data.content.fields,s=S__default.default(o.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),r=S__default.default(await No(t,a.data)??0).shiftedBy(-9).toNumber(),n=s>0?r/s*4:0;return {totalLockedSca:s,totalVeSca:r,averageLockingPeriod:n,averageLockingPeriodUnit:"year"}};var Do=[client.getFullnodeUrl("mainnet"),"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"],Fe=async t=>{for(let e of Do)try{return await t(new client.SuiClient({url:e}))}catch(a){if(a.status!==429)throw a;await new Promise(o=>setTimeout(o,500));}throw new Error("Failed to fetch data")},Mo=async(t,e,a="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let o=null,s=false,r={};do{let n=await t.getDynamicFields({parentId:a,limit:10,cursor:o});if(!n)break;let{data:i,hasNextPage:c,nextCursor:l}=n;i.forEach(d=>{let u=`0x${d.name.value.name}`;e.has(u)&&(r[u]=d.objectId);}),s=c,o=l;}while(s);return r},Z=async(t,e,a,o=true)=>{let s=(await Fe(async r=>await r.getDynamicFieldObject({parentId:t,name:{type:e,value:a}}))).data;return o?s?.objectId:s?.content},Oa=async(t,e=[])=>{let a=new Set(e),o={},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 n=Object.keys(r.core.coins);if(n.length===0)throw new Error("Pools empty");let i=n.reduce((k,R)=>{if(a.size>0&&!a.has(R))return k;let B=r.core.coins[R];return B&&B.coinType&&k.push([R,B.coinType]),k},[]);if(i.length===0)throw new Error("No coinTypesPairs");let c=r.core.market,l=(await Fe(async k=>await k.getObject({id:c,options:{showContent:!0}}))).data;if(!(l&&l.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let d=l.content.fields,u=d.vault.fields.balance_sheets.fields.table.fields.id.id,f=d.collateral_stats.fields.table.fields.id.id,m=d.borrow_dynamics.fields.table.fields.id.id,y=d.interest_models.fields.table.fields.id.id,p=d.risk_models.fields.table.fields.id.id,b="0x1::type_name::TypeName",h="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",g="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",A="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",w="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",T=await Fe(async k=>await Mo(k,new Set(i.map(([,R])=>R))));return await Promise.all(i.map(async([k,R])=>{let B=R.slice(2),M=await Promise.all([Z(u,b,{name:B},true),Z(f,b,{name:B},true),Z(m,b,{name:B},true),Z(y,b,{name:B},true),Z(p,b,{name:B},true),Z(c,h,B,true),Z(c,g,B,true),Z(c,A,B,true),Z(c,w,B,false)]),{symbol:ee,metaData:q}=r.core.coins[k],P={spool:"",spoolReward:""},O=r.spool.pools[`s${k}`];if(O){let{id:D,rewardPoolId:$}=O;P={spool:D,spoolReward:$};}let I={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},v=`s${k}`,F=r.scoin.coins[v];if(F){let{coinType:D,treasury:$,metaData:Y,symbol:te}=F;I={sCoinType:D,sCoinTreasury:$,sCoinMetadataId:Y,sCoinSymbol:te};}let U={pythFeed:"",pythFeedObjectId:""};if(r.core.coins[k]?.oracle.pyth){let{feed:D,feedObject:$}=r.core.coins[k].oracle.pyth;U={pythFeed:D,pythFeedObjectId:$};}let{feed:N,feedObject:_}=r.core.coins[k].oracle.pyth,K=(await Fe(async D=>await D.getCoinMetadata({coinType:R})))?.decimals??0,Q=P?`s${k}`:void 0;o[k]={coinName:k,symbol:ee,lendingPoolAddress:M[0]??"",collateralPoolAddress:M[1]??"",borrowDynamic:M[2]??"",interestModel:M[3]??"",riskModel:M[4],borrowFeeKey:M[5]??"",supplyLimitKey:M[6]??"",borrowLimitKey:M[7]??"",isolatedAssetKey:M[8]?.fields?.id.id??"",isIsolated:M[8]?.fields?.value??false,...P,...I,sCoinName:v,coinMetadataId:q,coinType:R,spoolName:Q,decimals:K,...U,flashloanFeeObject:T[R]??""},await new Promise(D=>setTimeout(D,1e3));})),o};var Ra=async(t,e,a=t.address.get("core.oracles.switchboard.registryTableId"))=>{let o=[],s=e.map((i,c)=>{let l=t.utils.address.get(`core.coins.${i}.oracle.switchboard`);return l||(o.push({idx:c,coinName:i}),null)});if(o.length===0)return s;let n=o.map(i=>i.coinName).map(i=>{let c=t.utils.parseCoinType(i);if(!c)throw new Error(`Invalid coin name: ${i}`);return c});return await Promise.all(n.map(async(i,c)=>{let l={type:"0x1::type_name::TypeName",value:{name:i.slice(2)}},d=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:l});if(!d?.data?.content||d.data.content.dataType!=="moveObject")throw new Error(`No on-demand aggregator found for ${i}`);let u=d.data.content;s[c]=u.fields.value;})),s};var Ia=async({address:t,scallopSuiKit:e})=>{let a=`${t.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[o,s]=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:o,secondary:s}},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={[`${t.address.get("core.packages.pyth.object")}::rule::Rule`]:"pyth",[`${t.address.get("core.packages.supra.object")}::rule::Rule`]:"supra",[`${t.address.get("core.packages.switchboard.object")}::rule::Rule`]:"switchboard"},o={},s=null;do{let r=await t.scallopSuiKit.queryGetDynamicFields({parentId:e==="primary"?t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"):t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),cursor:s,limit:10});if(!r)break;let{data:n,hasNextPage:i,nextCursor:c}=r;s=c;let l=n.map(u=>u.objectId);if((await t.scallopSuiKit.queryGetObjects(l)).forEach(u=>{if(!u.content||u.content.dataType!=="moveObject")return;let f=u.content.fields,m=f.name.fields.name,y=t.parseCoinNameFromType(`0x${m}`);if(!y)throw new Error(`Invalid asset name: ${y}`);o[y]||(o[y]=[]),f.value.fields.contents.forEach(b=>{o[y].push(a[`0x${b.fields.name}`]);});}),!i)break}while(s);return o};var Ko=(t,e)=>{let a=bcs.bcs.Address.serialize(t).toBytes(),o=bcs.bcs.Address.serialize(e).toBytes(),s=new Uint8Array(a.length+o.length);s.set(a,0),s.set(o,a.length);let r=sha3_js.sha3_256(s);return `0x${Array.from(r).map(i=>i.toString(16).padStart(2,"0")).join("")}`},yt=async({address:t,scallopSuiKit:e},a,o)=>{let s=t.get("obligationNaming.namingRegistry");if(!s)return null;let r=await e.queryGetObject(s);if(r?.data?.content?.dataType!=="moveObject")return null;let c=r.data.content.fields.names?.fields?.id?.id;if(!c)return null;let l=Ko(a,o);try{let d=await e.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:l}});return d?.data?.content?.dataType==="moveObject"?d.data.content.fields?.value??null:null}catch(d){let u=d;if(u.message?.includes("not found")||u.message?.includes("Cannot find"))return null;throw d}},ja=async(t,e)=>{let a=await t.getObligations(e),o={};return await Promise.allSettled(a.map(async s=>{let r=await yt({address:t.address,scallopSuiKit:t.scallopSuiKit},s.keyId,e);r&&(o[s.keyId]=r);})),o};var gt=class extends pythSuiJs.SuiPythClient{constructor(a,o,s,r){super(a,o,s);this.params=r;}async updatePriceFeedsWithSponsoredBaseUpdateFee(a,o,s){if(!this.params)throw new Error("Please provide params");let{defaultPackageId:r,gasStationId:n}=this.params,i=await this.getPythPackageId(),c=await this.verifyVaasAndGetHotPotato(a,o,i),l=[];for(let u of s){let f=await this.getPriceFeedObjectId(u);if(!f)throw new Error(`Price feed object not found for ID: ${u}`);l.push(f);}let d=a.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});for(let u=0;u<l.length;u++){let f=l[u];[c]=a.moveCall({target:`${r}::pyth_sponsor::update_single_price_feed_with_sponsor`,arguments:[a.object(this.pythStateId),c,a.object(f),a.object(n),d]});}a.moveCall({target:`${i}::hot_potato_vector::destroy`,arguments:[c],typeArguments:[`${i}::price_info::PriceInfo`]});}},Na=async(t,e,a,o=false)=>{let s=new gt(t.suiKit.client,t.address.get("core.oracles.pyth.state"),t.address.get("core.oracles.pyth.wormholeState"),{defaultPackageId:"0xa6f9bec2f9748656b6af8aafb5d7bc1a0d5faf25ac9645fc7f447822cd509325",gasStationId:"0xa8b8dcc9880166edb57b53e05f8df7364d31b5d9b7d107fd27f0b69cf338b687"}),r=Array.from(new Set(e.map(i=>t.address.get(`core.coins.${i}.oracle.pyth.feed`)))),n=t.utils.pythEndpoints??[...t.constants.whitelist.pythEndpoints];for(let i of n)try{let l=await new pythSuiJs.SuiPriceServiceConnection(i,{priceFeedRequestConfig:{binary:!0}}).getPriceFeedsUpdateData(r);o?await s.updatePriceFeedsWithSponsoredBaseUpdateFee(a.txBlock,l,r):await s.updatePriceFeeds(a.txBlock,l,r);return}catch(c){console.warn(`Failed to update price feeds with endpoint ${i}: ${c}`);}};var le=async(t,e,a=[...t.constants.whitelist.lending],o)=>{let s=o?.usePythPullModel??t.usePythPullModel,r=o?.useOnChainXOracleList??t.useOnChainXOracleList,n=new Set((o?.sponsoredFeeds??t.sponsoredFeeds).filter(m=>t.constants.whitelist.lending.has(m)?true:(console.error(`Sponsored feed ${m} is not in the whitelist lending assets.`),false))),i=o?.isSponsoredTx??false,c=r?await t.query.getAssetOracles():t.xOracleList??ke,l=new Set(Object.values(c).flatMap(({primary:m,secondary:y})=>[...m,...y])),d=(m,y)=>{let p=c[m];return p&&(p.primary.includes(y)||p.secondary.includes(y))},u=[...new Set(a)],f=u.filter(m=>d(m,"pyth"));if(l.has("pyth")){let m=[];for(let y of f){let p=!s&&!n.has(y);(s||p)&&m.push(y);}m.length>0&&await Na(t,m,e,i);}for(let m of u)Uo(t,e,m,c[m]);},Uo=(t,e,a,o)=>{let s=t.utils.parseCoinType(a);qo(e,o,t.address.get("core.packages.xOracle.id"),t.address.get("core.oracles.xOracle"),t.address.get("core.packages.pyth.id"),t.address.get("core.oracles.pyth.registry"),t.address.get("core.oracles.pyth.state"),t.address.get(`core.coins.${a}.oracle.pyth.feedObject`),t.address.get("core.packages.switchboard.id"),t.address.get("core.oracles.switchboard.registry"),t.address.get(`core.coins.${a}.oracle.switchboard`),t.address.get("core.packages.supra.id"),t.address.get("core.oracles.supra.registry"),t.address.get("core.oracles.supra.holder"),s);},qo=(t,e,a,o,s,r,n,i,c,l,d,u,f,m,y)=>{let p=Qo(t,a,o,y);return Object.entries(e).forEach(([b,h])=>{h.includes("pyth")&&zo(b,t,s,p,n,i,r,y),h.includes("supra")&&Wo(b,t,u,p,m,f,y),h.includes("switchboard")&&Go(b,t,c,p,d,l,y);}),$o(t,a,o,p,y),t},Qo=(t,e,a,o)=>{let s=`${e}::x_oracle::price_update_request`,r=[o];return t.moveCall(s,[a],r)},$o=(t,e,a,o,s)=>{let r=`${e}::x_oracle::confirm_price_update_request`,n=[s];return t.moveCall(r,[a,o,t.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],n),t},Wo=(t,e,a,o,s,r,n)=>{e.moveCall(`${a}::rule::set_price_as_${t}`,[o,s,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[n]);},Go=(t,e,a,o,s,r,n)=>{e.moveCall(`${a}::rule::set_as_${t}_price`,[o,s,r,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[n]);},zo=(t,e,a,o,s,r,n,i)=>{e.moveCall(`${a}::rule::set_price_as_${t}`,[o,s,r,n,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[i]);};var ye=async(...t)=>{let[e,a,o,s]=t;if(t.length===3&&o)return {obligationId:o};if(t.length===4&&o&&s)return {obligationId:o,obligationKey:s};let r=j(a),n=await ce(e,r);if(n.length===0)throw new Error(`No obligation found for sender ${r}`);return {obligationId:n[0].id,obligationKey:n[0].keyId}},Xo=({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")},s=`${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[n,i,c]=t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation`,[a.version]);return [n,i,c]},returnObligation:(n,i)=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::return_obligation`,[a.version,n,i]);},openObligationEntry:()=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation_entry`,[a.version]);},addCollateral:(n,i,c)=>{let l=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::deposit_collateral::deposit_collateral`,[a.version,n,a.market,i],[l]);},takeCollateral:(n,i,c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::withdraw_collateral::withdraw_collateral`,[a.version,n,i,a.market,a.coinDecimalsRegistry,e.pure.u64(c),a.xOracle,r],[d])},deposit:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::mint::mint`,[a.version,a.market,n,r],[c])},depositEntry:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::mint::mint_entry`,[a.version,a.market,n,r],[c])},withdraw:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem`,[a.version,a.market,n,r],[c])},withdrawEntry:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem_entry`,[a.version,a.market,n,r],[c])},borrow:(n,i,c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow`,[a.version,n,i,a.market,a.coinDecimalsRegistry,c,a.xOracle,r],[d])},borrowWithReferral:(n,i,c,l,d)=>{let u=t.utils.parseCoinType(d);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_with_referral`,[a.version,n,i,a.market,a.coinDecimalsRegistry,c,typeof l=="number"?e.pure.u64(l):l,a.xOracle,r],[u,s])},borrowEntry:(n,i,c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_entry`,[a.version,n,i,a.market,a.coinDecimalsRegistry,e.pure.u64(c),a.xOracle,r],[d])},repay:(n,i,c)=>{let l=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::repay::repay`,[a.version,n,a.market,i,r],[l]);},borrowFlashLoan:(n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.protocolPkg}::flash_loan::borrow_flash_loan`,[a.version,a.market,n],[c])},repayFlashLoan:(n,i,c)=>{let l=t.utils.parseCoinType(c);t.moveCall(e,`${a.protocolPkg}::flash_loan::repay_flash_loan`,[a.version,a.market,n,i],[l]);},liquidate:(n,i,c,l)=>{let d=t.utils.parseCoinType(c),u=t.utils.parseCoinType(l),[f,m]=t.moveCall(e,`${a.protocolPkg}::liquidate::liquidate`,[a.version,n,a.market,i,a.coinDecimalsRegistry,a.xOracle,r],[d,u]);return [f,m]}}},Yo=({builder:t,txBlock:e})=>({addCollateralQuick:async(a,o,s,r=false)=>{let n=j(e),{obligationId:i}=await ye(t,e,s),{takeCoin:c,leftCoin:l}=await t.selectCoin(e,o,a,n,r);l&&e.transferObjects([l],n),e.addCollateral(i,c,o);},takeCollateralQuick:async(a,o,s,r,n)=>{let i=await ye(t,e,s,r),c=await t.utils.getObligationCoinNames(i.obligationId);return await le(t,e,c,n),e.takeCollateral(i.obligationId,i.obligationKey,a,o)},depositQuick:async(a,o,s=true,r=false)=>{let n=j(e),{leftCoin:i,takeCoin:c}=await t.selectCoin(e,o,a,n,r);i&&e.transferObjects([i],n);let l=e.deposit(c,o);return s?e.mintSCoin(t.utils.parseMarketCoinName(o),l):l},withdrawQuick:async(a,o)=>{let s=j(e),r=t.utils.parseSCoinName(o);if(!r)throw new Error(`No sCoin for ${o}`);let{sCoin:n,marketCoin:i}=await t.selectSCoinOrMarketCoin(e,r,a,s);if(n){let c=e.burnSCoin(r,n);i?e.mergeCoins(i,[c]):i=c;}if(!i)throw new Error(`No market coin for ${o}`);return e.withdraw(i,o)},borrowQuick:async(a,o,s,r,n)=>{let i=await ye(t,e,s,r),l=[...await t.utils.getObligationCoinNames(i.obligationId)??[],o];return await le(t,e,l,n),e.borrow(i.obligationId,i.obligationKey,a,o)},borrowWithReferralQuick:async(a,o,s,r,n,i)=>{let c=await ye(t,e,r,n),d=[...await t.utils.getObligationCoinNames(c.obligationId)??[],o];return await le(t,e,d,i),e.borrowWithReferral(c.obligationId,c.obligationKey,s,a,o)},repayQuick:async(a,o,s,r=false)=>{let n=j(e),i=await ye(t,e,s),{leftCoin:c,takeCoin:l}=await t.selectCoin(e,o,a,n,r);return c&&e.transferObjects([c],n),e.repay(i.obligationId,l,o)},updateAssetPricesQuick:async(a,o)=>await le(t,e,a,o),liquidateQuick:async(a,o,s,r,n)=>{let i=j(e),c=await t.utils.getObligationCoinNames(r);await le(t,e,c,n);let{takeCoin:l,leftCoin:d}=await t.selectCoin(e,o,a,i,n?.isSponsoredTx??false);d&&e.transferObjects([d],i);let u=typeof r=="string"?e.object(r):r;return e.liquidate(u,l,o,s)}}),_a=(t,e)=>{let a=L(e),o=Xo({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=Yo({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Ba=async(...t)=>{let[e,a,o,s]=t;if(t.length===4&&s)return [s];let r=j(a),n=await be(e,r);if(n[o].length===0)throw new Error(`No stake account id found for sender ${r}`);return n[o].map(i=>i.id)},Jo=async(...t)=>{let[e,a,o,s]=t,r=j(a),n=await be(e,r);if(n[o].length===0)throw new Error(`No stake account found for sender ${r}`);return s?n[o].filter(c=>c.id===s):n[o]},Da=async(t,e,a,o,s,r,n=false)=>{try{let{takeCoin:i,leftCoin:c,totalAmount:l}=n?await t.selectSCoin(e,o,s,r):await t.selectMarketCoin(e,o,s,r);if(n){let d=e.burnSCoin(o,i);e.stake(a,d,o);}else e.stake(a,i,o);return e.transferObjects([c],r),l}catch{return 0}},es=({builder:t,txBlock:e})=>{let a={spoolPkg:t.address.get("spool.id")},o=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {createStakeAccount:s=>{let r=t.utils.parseMarketCoinType(s),n=t.address.get(`spool.pools.${s}.id`);return t.moveCall(e,`${a.spoolPkg}::user::new_spool_account`,[n,o],[r])},stake:(s,r,n)=>{let i=t.utils.parseMarketCoinType(n),c=t.address.get(`spool.pools.${n}.id`);t.moveCall(e,`${a.spoolPkg}::user::stake`,[c,s,r,o],[i]);},unstake:(s,r,n)=>{let i=t.utils.parseMarketCoinType(n),c=t.address.get(`spool.pools.${n}.id`);return t.moveCall(e,`${a.spoolPkg}::user::unstake`,[c,s,r,o],[i])},claim:(s,r)=>{let n=t.address.get(`spool.pools.${r}.id`),i=t.address.get(`spool.pools.${r}.rewardPoolId`),c=t.utils.parseMarketCoinType(r),l=t.utils.getSpoolRewardCoinName(),d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.spoolPkg}::user::redeem_rewards`,[n,i,s,o],[c,d])}}},ts=({builder:t,txBlock:e})=>({stakeQuick:async(a,o,s)=>{let r=j(e),n=await Ba(t,e,o,s);if(n.length===0)throw new Error(`No stakeAccountIds found for user ${r}`);if(typeof a=="number"){let i=await Da(t,e,n[0],o,a,r);a-=i,a>0&&await Da(t,e,n[0],o,a,r,true);}else e.stake(n[0],a,o);},unstakeQuick:async(a,o,s,r=true)=>{let n=await Jo(t,e,o,s),i=[];for(let c of n){if(c.staked===0)continue;let l=Math.min(a,c.staked),d=e.unstake(c.id,l,o);if(r){let u=e.mintSCoin(o,d);i.push(u);}else i.push(d);if(a-=l,a<=0)break}if(i.length>0){let c=i[0];return i.length>1&&e.mergeCoins(c,i.slice(1)),c}},claimQuick:async(a,o)=>{let s=await Ba(t,e,a,o),r=[];for(let n of s){let i=await e.claim(n,a);r.push(i);}return r}}),Ma=(t,e)=>{let a=L(e),o=es({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ts({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Le=async(...t)=>{let[e,a,o,s]=t;if(t.length===4&&o&&s&&typeof o=="string"){let c=await nt(e,o);return {obligationId:o,obligationKey:s,obligationLocked:c}}let r=j(a),n=await ce(e,r);if(n.length===0)throw new Error(`No obligation found for sender ${r}`);let i=n.find(c=>c.id===o||c.keyId===s);if(!i)throw new Error(`No obligation found for sender ${r} with id ${o} or key ${s}`);return {obligationId:i.id,obligationKey:i.keyId,obligationLocked:i.locked}},os=({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")},o={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")},s=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {stakeObligation:(r,n)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::stake`,[a.config,a.incentivePools,a.incentiveAccounts,n,r,a.obligationAccessStore,s]);},stakeObligationWithVesca:(r,n,i)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,[a.config,a.incentivePools,a.incentiveAccounts,n,r,a.obligationAccessStore,o.config,o.treasury,o.table,i,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),s],[]);},unstakeObligation:(r,n)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::unstake_v2`,[a.config,a.incentivePools,a.incentiveAccounts,n,r,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),s]);},claimBorrowIncentive:(r,n,i)=>{let c=t.utils.parseCoinType(i);return t.moveCall(e,`${a.borrowIncentivePkg}::user::redeem_rewards`,[a.config,a.incentivePools,a.incentiveAccounts,n,r,s],[c])},deactivateBoost:(r,n)=>{t.moveCall(e,`${a.borrowIncentivePkg}::user::deactivate_boost_v2`,[a.config,a.incentivePools,a.incentiveAccounts,r,n,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),s]);}}},ss=({builder:t,txBlock:e})=>({stakeObligationQuick:async(a,o)=>{let{obligationId:s,obligationKey:r,obligationLocked:n}=await Le(t,e,a,o),i=!!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`));(!n||i)&&e.stakeObligation(s,r);},stakeObligationWithVeScaQuick:async(a,o,s)=>{let{obligationId:r,obligationKey:n,obligationLocked:i}=await Le(t,e,a,o),c=!!e.txBlock.blockData.transactions.find(l=>l.kind==="MoveCall"&&(l.target===`${He}::user::unstake`||l.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||l.target===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!i||c){let d=await t.query.getBindedVeScaKey(r)??s;d?e.stakeObligationWithVesca(r,n,d):e.stakeObligation(r,n);}},unstakeObligationQuick:async(a,o)=>{let{obligationId:s,obligationKey:r,obligationLocked:n}=await Le(t,e,a,o);n&&e.unstakeObligation(s,r);},claimBorrowIncentiveQuick:async(a,o,s)=>{let{obligationId:r,obligationKey:n}=await Le(t,e,o,s);return e.claimBorrowIncentive(r,n,a)}}),Fa=(t,e)=>{let a=L(e),o=os({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ss({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var ge=async(...t)=>{let[e,a,o]=t;if(t.length===3&&o&&typeof o<"u"){let n=await se(e.utils,o);return n||void 0}let s=j(a),r=await Me(e,s);if(r.length!==0)return o?r.find(({keyId:n})=>(typeof o=="string"?o:o.objectId)===n):r[0]},ht=async(...t)=>{let[e,a,o]=t;try{let s=await e.scallopSuiKit.queryGetDynamicFieldObject({parentId:o,name:{type:"0x2::object::ID",value:a}});if(!s?.data)return !1;let r=s.data.content.fields.value.fields.contents;return Array.isArray(r)&&r.length>0}catch(s){return console.error(s),false}},rs=({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")},o=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {lockSca:(s,r)=>t.moveCall(e,`${a.id}::ve_sca::mint_ve_sca_key`,[a.config,a.table,a.treasury,s,r,o],[]),extendLockPeriod:(s,r)=>{t.moveCall(e,`${a.id}::ve_sca::extend_lock_period`,[a.config,s,a.table,a.treasury,r,o],[]);},extendLockAmount:(s,r)=>{t.moveCall(e,`${a.id}::ve_sca::lock_more_sca`,[a.config,s,a.table,a.treasury,r,o],[]);},renewExpiredVeSca:(s,r,n)=>{t.moveCall(e,`${a.id}::ve_sca::renew_expired_ve_sca`,[a.config,s,a.table,a.treasury,r,n,o],[]);},redeemSca:s=>t.moveCall(e,`${a.id}::ve_sca::redeem`,[a.config,s,a.table,a.treasury,o],[]),mintEmptyVeSca:()=>t.moveCall(e,`${a.id}::ve_sca::mint_ve_sca_placeholder_key`,[a.config,a.table],[]),splitVeSca:(s,r)=>t.moveCall(e,`${a.id}::ve_sca::split`,[a.config,s,a.table,a.subsTable,e.pure.u64(r)]),mergeVeSca:(s,r)=>t.moveCall(e,`${a.id}::ve_sca::merge`,[a.config,s,r,a.table,a.subsTable,e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],[])}},ns=({builder:t,txBlock:e})=>({lockScaQuick:async({amountOrCoin:a,lockPeriodInDays:o,autoCheck:s=true,veScaKey:r})=>{let n=j(e),i=await ge(t,e,r),c,l=[];if(a!==void 0&&typeof a=="number"){let m=await t.utils.selectCoins(a,Te,n),[y,p]=e.takeAmountFromCoins(m,a);c=y,l.push(p);}else c=a;let d=t.utils.getUnlockAt(o,i?.unlockAt);s&&Ft(a,o,d,i?.unlockAt);let u=!i,f=!u&&i.unlockAt<=new Date().getTime();if(u||f){if(c)if(u){let m=e.lockSca(c,d);l.push(m);}else {if(i.lockedScaCoin!==0){let m=e.redeemSca(i.keyId);l.push(m);}e.renewExpiredVeSca(i.keyId,c,d);}}else c&&o?(e.extendLockPeriod(i.keyId,d),e.extendLockAmount(i.keyId,c)):o?e.extendLockPeriod(i.keyId,d):c&&e.extendLockAmount(i.keyId,c);l.length>0&&e.transferObjects(l,n);},extendLockPeriodQuick:async({lockPeriodInDays:a,veScaKey:o,autoCheck:s=true})=>{let r=await ge(t,e,o),n=t.utils.getUnlockAt(a,r?.unlockAt);s&&at(a,n,r?.unlockAt),r&&e.extendLockPeriod(r.keyId,n);},extendLockAmountQuick:async({scaAmount:a,veScaKey:o,autoCheck:s=true})=>{let r=j(e),n=await ge(t,e,o);if(s&&Kt(a,n?.unlockAt),n){let i=await t.utils.selectCoins(a,Te,r),[c,l]=e.takeAmountFromCoins(i,a);e.extendLockAmount(n.keyId,c),e.transferObjects([l],r);}},renewExpiredVeScaQuick:async({scaAmount:a,lockPeriodInDays:o,veScaKey:s,autoCheck:r=true})=>{let n=j(e),i=await ge(t,e,s),c=t.utils.getUnlockAt(o,i?.unlockAt);if(r&&Lt(a,o,i?.unlockAt),i){let l=[];if(i.lockedScaCoin!==0){let m=e.redeemSca(i.keyId);l.push(m);}let d=await t.utils.selectCoins(a,Te,n),[u,f]=e.takeAmountFromCoins(d,a);l.push(f),e.renewExpiredVeSca(i.keyId,u,c),e.transferObjects(l,n);}},redeemScaQuick:async({veScaKey:a,transferSca:o})=>{let s=j(e),r=await ge(t,e,a);if(ue(r?.unlockAt),r){let n=e.redeemSca(r.keyId);if(o){e.transferObjects([n],s);return}return n}},splitVeScaQuick:async({splitAmount:a,veScaKey:o,transferVeScaKey:s=true})=>{let r=await ht(t,o,t.address.get("vesca.subsTable")),n=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&c.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if(r&&!n)throw new Error("Key cannot be in the subs table, please call unsubscribe vesca or unstake obligation first");let i=e.splitVeSca(o,a);if(s){e.transferObjects([i],j(e));return}else return i},mergeVeScaQuick:async({targetVeScaKey:a,sourceVeScaKey:o})=>{let s=t.address.get("vesca.subsTableId"),[r,n]=await Promise.all([ht(t,a,s),ht(t,o,s)]),i=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&d.target===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if((r||n)&&!i)throw new Error("Both target and source cannot be in the subs table. Please call unsubscribe vesca or unstake obligation first");let[c,l]=await Promise.all([se(t.utils,o),se(t.utils,a)]);if(!c||!l)throw new Error("Source or target veSCA not found");return c.unlockAt<l.unlockAt?e.extendLockPeriod(c.keyId,l.unlockAt/1e3):c.unlockAt>l.unlockAt&&e.extendLockPeriod(l.keyId,c.unlockAt/1e3),e.mergeVeSca(a,o)}}),La=(t,e)=>{let a=L(e),o=rs({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ns({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var cs=({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")},o=t.address.get("vesca.table"),s=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),o,s],[]);},claimReferralTicket:r=>{let n=t.utils.parseCoinType(r);return t.moveCall(e,`${a.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[a.version,o,a.referralBindings,a.authorizedWitnessList,a.referralTiers,s],[n])},burnReferralTicket:(r,n)=>{let i=t.utils.parseCoinType(n);t.moveCall(e,`${a.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[a.version,r,a.referralRevenuePool,s],[i]);},claimReferralRevenue:(r,n)=>{let i=t.utils.parseCoinType(n);return t.moveCall(e,`${a.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[a.version,a.referralRevenuePool,r,s],[i])},unbindReferral:()=>t.moveCall(e,`${a.referralPgkId}::referral_bindings::unbind_ve_sca_referrer`,[a.referralBindings])}},ls=({builder:t,txBlock:e})=>({claimReferralRevenueQuick:async(a,o=[...t.constants.whitelist.lending])=>{let s=j(e),r=[];for(let n of o)if(n==="sui"){let i=e.claimReferralRevenue(a,n);r.push(i);}else {let i=e.claimReferralRevenue(a,n);try{let c=await t.suiKit.suiInteractor.selectCoins(s,1/0,t.utils.parseCoinType(n));e.mergeCoins(i,c.slice(0,500));}catch{}finally{r.push(i);}}r.length>0&&e.transferObjects(r,s);}}),Va=(t,e)=>{let a=L(e),o=cs({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=ls({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var ds=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("obligationNaming.id"),namingRegistry:t.address.get("obligationNaming.namingRegistry")};return {setObligationName:(o,s)=>{t.moveCall(e,`${a.pkgId}::obligation_naming::set_name`,[a.namingRegistry,o,e.pure.string(s)],[]);},removeObligationName:o=>{t.moveCall(e,`${a.pkgId}::obligation_naming::remove_name`,[a.namingRegistry,o],[]);}}},us=({txBlock:t})=>({setObligationNameQuick:async(e,a)=>{t.setObligationName(e,a);},removeObligationNameQuick:async e=>{t.removeObligationName(e);}}),Ea=(t,e)=>{let a=L(e),o=ds({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=us({txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var ps=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("loyaltyProgram.id"),scaRewardPool:t.address.get("loyaltyProgram.rewardPool")},o={object:t.address.get("vesca.object"),protocolConfig:t.address.get("vesca.config"),veScaTable:t.address.get("vesca.table"),subsTable:t.address.get("vesca.subsTable")},s={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,`${s.pkgId}::ve_sca_reward::redeem_reward`,[s.veScaRewardPool,r,o.protocolConfig,o.veScaTable,o.subsTable])}},fs=({builder:t,txBlock:e})=>({claimLoyaltyRevenueQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyObject;let o=j(e);if(!a)throw new Error(`No veScaKey found for user ${o}`);let s=e.claimLoyaltyRevenue(a),r=t.constants.coinTypes.sca;if(!r)throw new Error("Coin type sca not found");await t.utils.mergeSimilarCoins(e,s,r,j(e)),e.transferObjects([s],o);},claimVeScaLoyaltyRewardQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyObject;let o=j(e);if(!a)throw new Error(`No veScaKey found for user ${o}`);let s=e.claimVeScaLoyaltyReward(a);e.transferObjects([s],o);}}),Ua=(t,e)=>{let a=L(e),o=ps({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=fs({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var ms=({builder:t,txBlock:e})=>{let a={pkgId:t.address.get("scoin.id")};return {mintSCoin:(o,s)=>{let r=t.utils.parseSCoinType(o);if(!r)throw new Error(`Invalid marketCoinName name: ${o}`);return t.moveCall(e,`${a.pkgId}::s_coin_converter::mint_s_coin`,[t.utils.getSCoinTreasury(o),s],[r,t.utils.parseUnderlyingSCoinType(o)])},burnSCoin:(o,s)=>{let r=t.utils.parseSCoinType(o);if(!r)throw new Error(`Invalid sCoin name: ${o}`);return t.moveCall(e,`${a.pkgId}::s_coin_converter::burn_s_coin`,[t.utils.getSCoinTreasury(o),s],[r,t.utils.parseUnderlyingSCoinType(o)])}}},bs=({builder:t,txBlock:e})=>({mintSCoinQuick:async(a,o)=>{let s=j(e),{leftCoin:r,takeCoin:n}=await t.selectMarketCoin(e,a,o,s);return e.transferObjects([r],s),e.mintSCoin(a,n)},burnSCoinQuick:async(a,o)=>{let s=j(e),{leftCoin:r,takeCoin:n}=await t.selectSCoin(e,a,o,s);return e.transferObjects([r],s),e.burnSCoin(a,n)}}),qa=(t,e)=>{let a=L(e),o=ms({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=bs({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Qa=(t,e)=>{let a=La(t,e),o=Ua(t,a),s=Fa(t,o),r=Va(t,s),n=Ea(t,r),i=qa(t,n),c=Ma(t,i),l=_a(t,c);return new Proxy(l,{get:(d,u)=>u===et?true:u in a?Reflect.get(a,u):u in s?Reflect.get(s,u):u in r?Reflect.get(r,u):u in n?Reflect.get(n,u):u in c?Reflect.get(c,u):u in o?Reflect.get(o,u):u in i?Reflect.get(i,u):Reflect.get(d,u)})};var St=class{_queryClient;constructor(e={}){this._queryClient=e.queryClient??new queryCore.QueryClient(this.defaultQueryClientConfig);}get queryClient(){return this._queryClient}set queryClient(e){this._queryClient=e;}get defaultQueryClientConfig(){return Bt}},he=St;var wt=class extends he{axiosInstance;constructor(e={}){super(e),this.axiosInstance=e.axiosInstance??gs__default.default.create({baseURL:e.baseUrl,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:e.axiosTimeout??8e3});}async post(e,a,o,s){if(Array.isArray(a)){let r=a,n=o,i=s;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.post(e,n,i).then(c=>c)})}else {let r=a,n=o;return this.axiosInstance.post(e,r,n)}}async get(e,a,o){if(Array.isArray(a)){let s=a,r=o;return this.queryClient.fetchQuery({queryKey:s,queryFn:()=>this.axiosInstance.get(e,r).then(n=>n)})}else {let s=a;return this.axiosInstance.get(e,s)}}async put(e,a,o,s){if(Array.isArray(a)){let r=a,n=o,i=s;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.put(e,n,i).then(c=>c)})}else {let r=a,n=o;return this.axiosInstance.put(e,r,n)}}async delete(e,a,o){if(Array.isArray(a)){let s=a,r=o;return this.queryClient.fetchQuery({queryKey:s,queryFn:()=>this.axiosInstance.delete(e,r).then(n=>n)})}else {let s=a;return this.axiosInstance.delete(e,s)}}},Se=wt;var Ct={core:{version:"",versionCap:"",object:"",market:"",adminCap:"",coinDecimalsRegistry:"",obligationAccessStore:"",coins:{cetus:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wapt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wsol:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wbtc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},weth:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},afsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},hasui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},vsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sca:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}}},oracles:{xOracle:"",xOracleCap:"",primaryPriceUpdatePolicyObject:"",secondaryPriceUpdatePolicyObject:"",primaryPriceUpdatePolicyVecsetId:"",secondaryPriceUpdatePolicyVecsetId:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:"",registryTableId:"",state:""},pyth:{registry:"",registryCap:"",state:"",wormhole:"",wormholeState:""}},packages:{coinDecimalsRegistry:{id:"",upgradeCap:""},math:{id:"",upgradeCap:""},whitelist:{id:"",upgradeCap:""},x:{id:"",upgradeCap:""},protocol:{id:"",upgradeCap:""},protocolWhitelist:{id:"",upgradeCap:""},query:{id:"",upgradeCap:""},supra:{id:"",upgradeCap:""},pyth:{id:"",upgradeCap:""},switchboard:{id:"",upgradeCap:""},xOracle:{id:"",upgradeCap:""},testCoin:{id:"",upgradeCap:""}}},spool:{id:"",adminCap:"",object:"",pools:{sweth:{id:"",rewardPoolId:""},ssui:{id:"",rewardPoolId:""},swusdc:{id:"",rewardPoolId:""},swusdt:{id:"",rewardPoolId:""},scetus:{id:"",rewardPoolId:""},safsui:{id:"",rewardPoolId:""},shasui:{id:"",rewardPoolId:""},svsui:{id:"",rewardPoolId:""}},config:""},borrowIncentive:{id:"",adminCap:"",object:"",query:"",incentivePools:"",incentiveAccounts:"",config:""},vesca:{id:"",object:"",adminCap:"",tableId:"",table:"",treasury:"",config:"",subsTable:"",subsTableId:"",subsWhitelist:""},referral:{id:"",version:"",object:"",adminCap:"",referralBindings:"",bindingTableId:"",referralRevenuePool:"",revenueTableId:"",referralTiers:"",tiersTableId:"",authorizedWitnessList:""},loyaltyProgram:{id:"",object:"",rewardPool:"",userRewardTableId:""},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:""}}}},Tt=class{constructor(e={}){this.params=e;this.scallopAxios=new Se({...this.defaultParamValues,...e}),this.network=e.networkType??"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:"695fcdc084f790c04eb068dc",network:"mainnet"};initializeForcedAddresses(e){let a=["localnet","devnet","testnet","mainnet"];Object.entries(e).forEach(([o,s])=>{if(a.includes(o)){let r=o;this.addressMap.set(r,s),r===this.network&&(this.currentAddresses=s);}});}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((o,s)=>typeof o=="object"?o[s]:o,this.currentAddresses)||void 0}set(e,a){if(this.currentAddresses){let o=e.split(".");o.reduce((s,r,n)=>{if(n===o.length-1)s[r]=a;else return s[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 o=a||this.network;o===this.network&&(this.currentAddresses=e),this.addressMap.set(o,e);}getAllAddresses(){return Object.fromEntries(this.addressMap)}async create(e){let{addresses:a,network:o,auth:s,memo:r}=e??{},n=s||this.auth||void 0,i=o||this.network,c=a||this.currentAddresses||this.addressMap.get(i)||Ct;if(n!==void 0){this.addressMap.clear(),this.setAddresses(c,i);let l=await this.axiosClient.post("/addresses",JSON.stringify({...Object.fromEntries(this.addressMap),memo:r}),{headers:{"Content-Type":"application/json","api-key":s||this.auth}});if(l.status===201){for(let[d,u]of Object.entries(l.data))["localnet","devnet","testnet","mainnet"].includes(d)&&(d===this.network&&(this.currentAddresses=u),this.addressMap.set(d,u));return this.addressId=l.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:o}){let s=await this.axiosClient.get(e,a,o);if(s.status===200)return s.data;throw Error(`Error: ${s.status}; Failed to read ${e} ${s.statusText}`)}async read(e){let a=e||this.addressId||void 0;if(a!==void 0){let o=await(async()=>{let r=(this.params.urls?.addresses??[Dt]).map(n=>`${fe(n)}/addresses/${a}`);for(let n of r)try{return await this.readApi({url:n,queryKey:x.api.getAddresses({addressId:a})})}catch(i){console.error(`${i}`);}return {id:"",mainnet:this.defaultValues?.addresses?.mainnet??Ct}})(),s=r=>["localnet","devnet","testnet","mainnet"].includes(r);for(let[r,n]of Object.entries(o))s(r)&&typeof n=="object"&&(r===this.network&&(this.currentAddresses=n),this.addressMap.set(r,n));return this.addressId=o.id,this.getAllAddresses()}else throw Error("Please provide API addresses id.")}async update(e){let{id:a,addresses:o,network:s,auth:r,memo:n}=e??{},i=r||this.auth||void 0,c=a||this.addressId||void 0,l=s||this.network,d=o||this.currentAddresses||this.addressMap.get(l)||Ct;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(i!==void 0){a!==this.addressId&&this.addressMap.clear(),this.setAddresses(d,l);let u=await this.axiosClient.put(`/addresses/${c}`,JSON.stringify({...Object.fromEntries(this.addressMap),memo:n}),{headers:{"Content-Type":"application/json","api-key":r||this.auth}});if(u.status===200){for(let[f,m]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(f)&&(f===this.network&&(this.currentAddresses=m),this.addressMap.set(f,m));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 o=a||this.auth||void 0,s=e||this.addressId||void 0;if(s===void 0)throw Error("Require specific addresses id to be deleted.");if(o!==void 0)if((await this.axiosClient.delete(`/addresses/${s}`,{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.")}},Ve=Tt;var $a=t=>Object.keys(t).length===0,kt={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,layerZero:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set,emerging:new Set},Ss=t=>Object.entries(t).filter(([e,a])=>!!a&&(Array.isArray(a)||a instanceof Set)).reduce((e,[a,o])=>(e[a]=o instanceof Set?o:new Set(o),e),{}),At=class extends Ve{constructor(a={}){super(a);this.params=a;}_poolAddresses={};_whitelist=kt;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()&&!$a(this.poolAddresses)&&a.every(o=>this.whitelist[o].size>0)}get whitelist(){return new Proxy(this._whitelist,{get:(a,o)=>a[o]??kt[o]})}get poolAddresses(){return new Proxy(this._poolAddresses,{get:(a,o)=>a[o]??void 0})}get defaultValues(){return this.params.defaultValues}isAddressInitialized({networkType:a="mainnet"}={}){let o=this.getAddresses(a);return !!o&&!$a(o)}parseToOldMarketCoin(a){return `${this.protocolObjectId}::reserve::MarketCoin<${a}>`}async init({networkType:a="mainnet",force:o=false,addressId:s,constantsParams:r=this.params}={}){let n=this.getAddresses(a);if((!n||Object.keys(n).length===0||o)&&await this.read(s),r.forcePoolAddressInterface&&(this._poolAddresses=r.forcePoolAddressInterface),r.forceWhitelistInterface&&(this._whitelist=Ss(r.forceWhitelistInterface)),this.isInitialized&&!o){this.initConstants();return}let[i,c]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.keys(this._whitelist).reduce((l,d)=>{let u=d,f=i[u];return l[u]=f instanceof Set?f:Array.isArray(f)?new Set(f):new Set,l},{})),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(c).filter(([l])=>Object.values(this._whitelist).some(d=>d.has(l))).map(([l,d])=>{let u=Object.fromEntries(Object.entries(d).map(([f,m])=>[f,typeof m=="boolean"?m??false:m||void 0]));return [l,u]}))),this.initConstants();}initConstants(){this.coinDecimals=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([o,s])=>!!s).map(([o,s])=>[o,s.decimals]),...Object.entries(this.poolAddresses).filter(([o,s])=>!!s?.sCoinName).map(([o,s])=>[s.sCoinName,s.decimals])]),this.coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([o,s])=>!!s).map(([o,s])=>[o,s?.coinType]),...Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&s.sCoinName&&s.sCoinType).map(([o,s])=>[s.sCoinName,s.sCoinType])]),this.coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([o,s])=>[s,o])),this.wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&this.whitelist.wormhole.has(o)).map(([o,s])=>[s.coinType,s.coinName])),this.coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s).map(([o,s])=>[s.coinName,this.parseToOldMarketCoin(s.coinType)])),this.scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&s.sCoinType&&s.sCoinName).map(([o,s])=>[suiKit.parseStructTag(s.sCoinType).name,s.sCoinName])),this.scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&s.sCoinType&&s.sCoinName).map(([o,s])=>[s.sCoinType,s.sCoinName]));let a=this.poolAddresses.vsui?.coinType;a&&(this.voloCoinTypeToCoinNameMap={[a]:"vsui"}),this.suiBridgeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&this.whitelist.suiBridge.has(s.coinName)).map(([o,s])=>[s.coinType,s.coinName])),this.sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([o,s])=>!!s&&s.sCoinName&&s.sCoinType).map(([o,s])=>[s.sCoinName,s.sCoinType])),this.supportedBorrowIncentiveRewards=new Set([...Object.values(this.poolAddresses).filter(o=>!!o).map(o=>o.sCoinName?[o.coinName,o.sCoinName]:[o.coinName]).flat()]);}async readWhiteList(){let a=await(async()=>{let o=(this.params.urls?.whitelist??["https://sui.apis.scallop.io/pool/whitelist"]).map(fe);for(let s of o)try{return await this.readApi({url:s,queryKey:x.api.getWhiteList()})}catch(r){console.error(`${r}`);}return this.defaultValues?.whitelist??kt})();return Object.fromEntries(Object.entries(a).filter(([o,s])=>Array.isArray(s)||s instanceof Set).map(([o,s])=>[o,s instanceof Set?s:new Set(s)]))}async readPoolAddresses(){let a=(this.params.urls?.poolAddresses??["https://sui.apis.scallop.io/pool/addresses"]).map(fe);for(let o of a)try{return await this.readApi({url:o,queryKey:x.api.getPoolAddresses()})}catch(s){console.error(`${s}`);}return this.defaultValues?.poolAddresses??{}}},Ee=At;var Wa=t=>{let e;return "suiClients"in t&&t.suiClients&&t.suiClients?.length>0?e={suiClients:t.suiClients}:e={fullnodeUrls:"fullnodeUrls"in t?t?.fullnodeUrls??Xe:Xe},new suiKit.SuiKit({...t,...e})};var we=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(),o=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+o),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()}};var ks=10,Ue=(t,e)=>{let a={...t};for(let o in e)e[o]&&typeof e[o]=="object"&&!Array.isArray(e[o])?a[o]=Ue(t[o]||{},e[o]):a[o]=e[o];return a},Pt=class extends he{suiKit;_walletAddress;_tokensPerSecond;rateLimiter;constructor(e={}){super(e),this.suiKit=e.suiKit??Wa(e),this._tokensPerSecond=e.tokensPerSecond??ks,this.rateLimiter=new we(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 we(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:o,name:s}=suiKit.parseStructTag(e);return await this.callWithRateLimiter(x.rpc.getNormalizedMoveFunction({target:e}),()=>this.client.getNormalizedMoveFunction({package:a,module:o,function:s}))}async queryGetObject(e,a){return a={...a,showOwner:true,showContent:true,showType:true},await this.callWithRateLimiter(x.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 o=await this.callWithRateLimiter(x.rpc.getObjects({objectIds:e,node:this.currentFullNode}),()=>this.suiKit.getObjects(e,{showOwner:a?.showOwner,showContent:a?.showContent,showType:a?.showType}));return o.forEach(s=>{let r=x.rpc.getObject({objectId:s.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:r}).forEach(([i,c])=>{c||(c={data:c}),this.queryClient.setQueryData(i,Ue(c,{data:s,error:null}),{updatedAt:Date.now()});});}),o}async queryGetOwnedObjects(e){let a=await this.callWithRateLimiter(x.rpc.getOwnedObjects(e),()=>this.client.getOwnedObjects(e));return a&&a.data.length>0&&a.data.filter(o=>!!o.data).forEach(o=>{let s=x.rpc.getObject({objectId:o.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:s}).forEach(([n,i])=>{this.queryClient.setQueryData(n,Ue(i,{data:o.data,error:null}),{updatedAt:Date.now()});});}),a}async queryGetDynamicFields(e){return await this.callWithRateLimiter(x.rpc.getDynamicFields(e),()=>this.client.getDynamicFields(e))}async queryGetDynamicFieldObject(e){let a=await this.callWithRateLimiter(x.rpc.getDynamicFieldObject(e),()=>this.client.getDynamicFieldObject(e));if(a?.data){let o=x.rpc.getObject({objectId:a.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:o}).forEach(([r,n])=>{this.queryClient.setQueryData(r,Ue(n,{data:a.data,error:null}),{updatedAt:Date.now()});});}return a}async queryGetAllCoinBalances(e){return await this.callWithRateLimiter(x.rpc.getAllCoinBalances({activeAddress:e,node:this.currentFullNode}),async()=>{let a=await this.client.getAllBalances({owner:e});return a?a.reduce((s,r)=>(r.totalBalance!=="0"&&(s[suiKit.normalizeStructTag(r.coinType)]=r),s),{}):{}})}async queryGetCoinBalance(e){return e.coinType?(await this.queryGetAllCoinBalances(e.owner))[suiKit.normalizeStructTag(e.coinType)]??null:null}async queryInspectTxn({queryTarget:e,args:a,typeArgs:o,txBlock:s=new suiKit.SuiTxBlock,keys:r}){if(!await this.queryGetNormalizedMoveFunction(e))throw new Error("Invalid query target");return s.moveCall(e,a,o),await this.callWithRateLimiter(r??x.rpc.getInspectTxn({queryTarget:e,args:a.map(i=>typeof i=="object"&&"objectId"in i?i.objectId:i),typeArgs:o,node:this.currentFullNode}),()=>this.suiKit.inspectTxn(s))}},qe=Pt;var Ot=class{pythEndpoints;scallopSuiKit;constants;timeout;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"],this.timeout=e.axiosTimeout??4e3;}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)}isLayerZeroAsset(e){return this.constants.whitelist.layerZero.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"};if(this.isLayerZeroAsset(e))return {from:"LayerZero",type:"Ominchain Fungible Token from LayerZero"}}parseCoinNameFromType(e){e=suiKit.normalizeStructTag(e);let{address:a,module:o,name:s,typeParams:r}=suiKit.parseStructTag(e);return a===this.constants.protocolObjectId&&o==="reserve"&&s==="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,o){return o=o??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(o,e,a)}async mergeSimilarCoins(e,a,o,s=this.walletAddress){try{let r=await this.selectCoins(Number.MAX_SAFE_INTEGER,o,s);r.length>0&&e.mergeCoins(a,r.slice(0,500).map(e.objectRef));}catch{}}async getObligationCoinNames(e){let a=await Ne(this,e);if(!a)return;let o=a.collaterals.map(i=>`0x${i.type.name}`),s=a.debts.map(i=>`0x${i.type.name}`);return [...new Set([...o,...s])].map(i=>this.parseCoinNameFromType(i))}parseDataFromPythPriceFeed(e){let o=[...this.constants.whitelist.lending].find(s=>this.address.get(`core.coins.${s}.oracle.pyth.feed`)===e.id);if(o){let s=e.getPriceUnchecked();return {coinName:o,price:s.getPriceAsNumberUnchecked(),publishTime:Number(s.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${e.id}`)}async getPythPrice(e,a){let o=this.address.get(`core.coins.${e}.oracle.pyth.feedObject`);if(a=a||(await this.scallopSuiKit.queryGetObject(o))?.data,a){let s=a;if(s.content&&"fields"in s.content){let r=s.content.fields,n=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((i?-1:1)*n)*(l?-1:1)}}return 0}async getPythPrices(e){let a=e.reduce((r,n)=>{let i=this.address.get(`core.coins.${n}.oracle.pyth.feedObject`);return i&&(r[i]?r[i].push(n):r[i]=[n]),r},{}),s=(await this.scallopSuiKit.queryGetObjects(Object.keys(a))).reduce((r,n)=>(a[n.objectId].forEach(i=>{r[i]=n;}),r),{});return (await Promise.all(Object.entries(s).map(async([r,n])=>{try{let i=await this.getPythPrice(r,n);return {coinName:r,price:i}}catch(i){return console.error(i),{coinName:r,price:0}}}))).reduce((r,n)=>(r[n.coinName]=n.price,r),{})}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])],a=false){let o=new Map(e.map(c=>{let l=this.address.get(`core.coins.${c}.oracle.pyth.feed`);return l?[c,l]:void 0}).filter(c=>!!c)),s=Array.from(o.values()),r=Array.from(o.keys()),n=this.queryClient.getQueryState(x.oracle.getCoinPrices(s));if(n&&n&&Date.now()-(n.dataUpdatedAt??0)<3e4)return n.data;let i={};if(!a)for(let c of this.pythEndpoints){let l=new pythSuiJs.SuiPriceServiceConnection(c,{timeout:this.timeout,httpRetries:0});try{let d=await this.queryClient.fetchQuery({queryKey:x.oracle.getPythLatestPriceFeeds(c,s),queryFn:async()=>await l.getLatestPriceFeeds(s),retry:!1,staleTime:3e4,gcTime:3e4});if(!d)throw new Error("No feeds returned from pyth");if(d.length!==s.length)throw new Error("Incomplete feeds returned from pyth");d.forEach((u,f)=>{let m=r[f],y=this.parseDataFromPythPriceFeed(u);i[m]=y.price;}),this.queryClient.setQueryData(x.oracle.getCoinPrices(s),i);}catch(d){if("status"in d&&d.status===403){console.log("trying next pyth endpoint");continue}console.error(d.message);}}return Object.keys(i).length===0&&(i={...i,...await this.getPythPrices(Array.from(e))},this.queryClient.setQueryData(x.oracle.getCoinPrices(s),i)),{...e.reduce((c,l)=>(c[l]=i[l]||0,c),{}),...i}}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 o=Math.floor(new Date().getTime()/1e3),s=a?Math.max(Math.floor(a/1e3)-o,0):0,r=0;if(s===0){let n=(e??1)*86400;r=Math.min(o+n,o+126144e3);}else {let n=Math.min(e?e*86400+s:s,126144e3);r=o+n;}return Gt(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??Mt,super(e);}async getMarket(){let e=await this.get("/api/market/migrate",x.api.getMarket());if(e.status===200)return {pools:e.data.pools.reduce((a,o)=>(a[o.coinName]=o,a),{}),collaterals:e.data.collaterals.reduce((a,o)=>(a[o.coinName]=o,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",x.api.getSpools());if(e.status===200)return e.data.spools.reduce((a,o)=>(a[o.marketCoinName]=o,a),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.get("/api/borrowIncentivePools/migrate",x.api.getBorrowIncentivePools());if(e.status===200)return e.data.borrowIncentivePools.reduce((a,o)=>(Array.isArray(o.points)&&(o.points=o.points.reduce((s,r)=>(s[r.coinName]=r,s),{})),a[o.coinName]=o,a),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.get("/api/market/tvl",x.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,[o,s])=>(s&&(a[o]=s.coinPrice),a),{})}},$e=Rt;var It=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=V.call(this,this.queryMarket),this.getMarketPools=V.call(this,this.getMarketPools),this.getMarketPool=V.call(this,this.getMarketPool),this.getMarketCollaterals=V.call(this,this.getMarketCollaterals),this.getMarketCollateral=V.call(this,this.getMarketCollateral),this.getSpools=V.call(this,this.getSpools),this.getSpool=V.call(this,this.getSpool),this.getBorrowIncentivePools=V.call(this,this.getBorrowIncentivePools),this.getLendings=V.call(this,this.getLendings),this.getLending=V.call(this,this.getLending),this.getObligationAccounts=V.call(this,this.getObligationAccounts),this.getObligationAccountsByIds=V.call(this,this.getObligationAccountsByIds),this.getObligationAccountById=V.call(this,this.getObligationAccountById),this.getObligationAccount=V.call(this,this.getObligationAccount),this.getTvl=V.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 na(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 rt(this,e,a?.indexer)}async getObligations(e=this.walletAddress){return await ce(this,e)}async queryObligation(e){return Ne(this,e)}async getCoinAmounts(e,a=this.walletAddress){return await ca(this,e,a)}async getCoinAmount(e,a=this.walletAddress){return await it(this,e,a)}async getMarketCoinAmounts(e,a=this.walletAddress){return await la(this,e,a)}async getMarketCoinAmount(e,a=this.walletAddress){return await ct(this,e,a)}async getPriceFromPyth(e){return await this.utils.getPythPrice(e)}async getPricesFromPyth(e){return await this.utils.getPythPrices(e)}async getSpools(e,a){return await Aa(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 be(this,e)}async getStakeAccounts(e,a=this.walletAddress){return (await this.getAllStakeAccounts(a))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let a=new Map,o=[];for(let n of e){let i=this.address.get(`spool.pools.${n}.id`);i&&(a.set(n,i),o.push(i));}let s=new Map;if(o.length>0){let n=await this.scallopSuiKit.queryGetObjects(o);for(let i=0;i<o.length;i++)s.set(o[i],n[i]);}let r={};return await Promise.allSettled(e.map(async n=>{let i=a.get(n),c=await ft(this,n,i?s.get(i):void 0);c&&(r[n]=c);})),r}async getStakePool(e){return await ft(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let a=e.map(s=>this.address.get(`spool.pools.${s}.rewardPoolId`)).filter(s=>!!s);a.length>0&&await this.scallopSuiKit.queryGetObjects(a);let o={};return await Promise.allSettled(e.map(async s=>{let r=await mt(this,s);r&&(o[s]=r);})),o}async getStakeRewardPool(e){return await mt(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],a){return await Ht(this,e,a?.indexer,a?.marketPools,a?.coinPrices)}async getBorrowIncentiveAccounts(e,a){return await Xt(this,e,a)}async getLendings(e,a=this.walletAddress,o){return await fa(this,e,a,o?.marketPools,o?.coinPrices,o?.indexer)}async getLending(e,a=this.walletAddress,o){return await dt(this,e,a,o?.indexer)}async getObligationAccounts(e=this.walletAddress,a){return await ma(this,e,a?.market,a?.coinPrices,a?.indexer)}async getObligationAccountsByIds(e,a){return await ba(this,e,a?.market,a?.coinPrices,a?.indexer)}async getObligationAccountById(e,a){return await _e(this,e,"",a?.indexer,a?.market,a?.coinPrices,{})}async getObligationAccount(e,a=this.walletAddress,o){let s=await this.getObligationAccounts(a,o);return Object.values(s).find(r=>r?.obligationId===e)}async getTvl(e){return await ya(this,e?.indexer)}async getVeSca(e){return await se(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:a=false}={}){return await Me(this,e,a)}async getVeScaTreasuryInfo(){return await xa(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await Sa(this,e)}async getBindedObligationId(e){return await Yt(this,e)}async getBindedVeScaKey(e){return await Zt(this,e)}async getLoyaltyProgramInfos(e){return await ua(this,e)}async getVeScaLoyaltyProgramInfos(e){return await pa(this,e)}async getSCoinTotalSupply(e){return await wa(this,e)}async getSCoinAmounts(e,a=this.walletAddress){return await Ca(this,e,a)}async getSCoinAmount(e,a=this.walletAddress){let o=this.utils.parseSCoinName(e);return o?await pt(this,o,a):0}async getSCoinSwapRate(e,a){return await Ta(this,e,a)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await da(this,e)}async getPoolSupplyLimit(e){return await Ie(this.utils,e)}async getPoolBorrowLimit(e){return await ve(this.utils,e)}async getIsolatedAssets(e=false){return await ea(this,e)}async isIsolatedAsset(e,a=false){return oe(this.utils,e,a)}async getCoinPriceByIndexer(e){return this.indexer.getCoinPrice(e)}async getCoinPricesByIndexer(){return this.indexer.getCoinPrices()}async getAllCoinPrices(e){return ha(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return Oa(e)}async getUserPortfolio(e){return ga(this,e?.walletAddress??this.walletAddress,e?.indexer??false)}async getPriceUpdatePolicies(){return await Ia(this)}async getAssetOracles(){let[e,a]=await Promise.all([bt(this.utils,"primary"),bt(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((o,s)=>(o[s]={primary:e?.[s]??[],secondary:a?.[s]??[]},o),{})}async getSwitchboardOnDemandAggregatorObjectIds(e){return await Ra(this,e)}async getObligationName(e,a=this.walletAddress){return await yt({address:this.address,scallopSuiKit:this.scallopSuiKit},e,a)}async getObligationNames(e=this.walletAddress){return await ja(this,e)}},We=It;var vt=class{query;usePythPullModel;useOnChainXOracleList;sponsoredFeeds;xOracleList=ke;constructor(e={}){this.query=e.query??new We(e),this.usePythPullModel=e.usePythPullModel??true,this.useOnChainXOracleList=e.useOnChainXOracleList??true,this.sponsoredFeeds=e.sponsoredFeeds??[];}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 Qa(this,e)}async selectCoin(e,a,o,s=this.walletAddress,r=false){if(a==="sui"&&!r){let[n]=e.splitSUIFromGas([o]);return {takeCoin:n}}else {let n=this.utils.parseCoinType(a),i=await this.utils.selectCoins(o,n,s),c=i.reduce((u,f)=>(u+=Number(f.balance),u),0),[l,d]=e.takeAmountFromCoins(i,o);return {takeCoin:l,leftCoin:d,totalAmount:c}}}async selectMarketCoin(e,a,o,s=this.walletAddress){let r=this.utils.parseMarketCoinType(a),n=await this.utils.selectCoins(o,r,s),i=n.reduce((d,u)=>(d+=Number(u.balance),d),0),[c,l]=e.takeAmountFromCoins(n,Math.min(o,i));return {takeCoin:c,leftCoin:l,totalAmount:i}}async selectSCoin(e,a,o,s=this.walletAddress){let r=this.utils.parseSCoinType(a),n=await this.utils.selectCoins(o,r,s),i=n.reduce((d,u)=>(d+=Number(u.balance),d),0),[c,l]=e.takeAmountFromCoins(n,Math.min(i,o));return {takeCoin:c,leftCoin:l,totalAmount:i}}async selectSCoinOrMarketCoin(e,a,o,s=this.walletAddress){let r=o,n={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:l,takeCoin:d,totalAmount:u}=await this.selectSCoin(e,a,r,s);if(n.leftCoins.push(l),n.sCoins.push(d),r-=u,r>0){let{leftCoin:f,takeCoin:m}=await this.selectMarketCoin(e,a,o,s);e.transferObjects([f],s),n.marketCoins.push(m);}}catch{let{takeCoin:d,leftCoin:u}=await this.selectMarketCoin(e,a,o,s);n.leftCoins.push(u),n.marketCoins.push(d);}e.transferObjects(n.leftCoins,s);let i=n.marketCoins.length>0?n.marketCoins.length>1?e.mergeCoins(n.marketCoins[0],n.marketCoins.slice(1)):n.marketCoins[0]:void 0;return {sCoin:n.sCoins.length>0?n.sCoins.length>1?e.mergeCoins(n.sCoins[0],n.sCoins.slice(1)):n.sCoins[0]:void 0,marketCoin:i}}async signAndSendTxBlock(e){return await this.scallopSuiKit.suiKit.signAndSendTxn(e)}moveCall(e,a,o,s){return e.moveCall(a,o,s)}},Ge=vt;var jt=class{builder;networkType;constructor(e={}){this.builder=e.builder??new Ge(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 o=a??this.walletAddress;return await this.query.getStakeAccounts(e,o)}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,o=true,s,r,n){let i=this.builder.createTxBlock(),c=r??this.walletAddress;i.setSender(c);let l=s??(await this.query.getObligations(c))[0]?.id;if(l)await i.addCollateralQuick(a,e,l,n);else {let[d,u,f]=i.openObligation();await i.addCollateralQuick(a,e,d,n),i.returnObligation(d,f),i.transferObjects([u],c);}return o?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async withdrawCollateral(e,a,o=true,s,r,n,i){let c=this.builder.createTxBlock(),l=n??this.walletAddress;c.setSender(l);let d=await c.takeCollateralQuick(a,e,s,r,{isSponsoredTx:i});return c.transferObjects([d],l),o?await this.scallopSuiKit.signAndSendTxn(c):c.txBlock}async deposit(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i=await r.depositQuick(a,e);return r.transferObjects([i],n),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async depositAndStake(e,a,o=true,s,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=this.utils.parseMarketCoinName(e),l=await this.query.getStakeAccounts(c),d=s??l[0]?.id,u=await n.depositQuick(a,e,false);if(d)await n.stakeQuick(u,c,d);else {let f=n.createStakeAccount(c);await n.stakeQuick(u,c,f),n.transferObjects([f],i);}return o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async withdraw(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i=await r.withdrawQuick(a,e);return r.transferObjects([i],n),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async borrow(e,a,o=true,s,r,n,i){let c=this.builder.createTxBlock(),l=n??this.walletAddress;c.setSender(l);let d=this.constants.whitelist.lending.has(e);o&&d&&await c.unstakeObligationQuick(s,r);let u=await c.borrowQuick(a,e,s,r,{isSponsoredTx:i});return c.transferObjects([u],l),o&&d&&await c.stakeObligationWithVeScaQuick(s,r),o?await this.scallopSuiKit.signAndSendTxn(c):c.txBlock}async repay(e,a,o=true,s,r,n,i){let c=this.builder.createTxBlock(),l=n??this.walletAddress;c.setSender(l);let d=this.constants.whitelist.lending.has(e);return o&&d&&await c.unstakeObligationQuick(s,r),await c.repayQuick(a,e,s,i),o&&d&&await c.stakeObligationWithVeScaQuick(s,r),o?await this.scallopSuiKit.signAndSendTxn(c):c.txBlock}async flashLoan(e,a,o,s=true,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let[c,l]=n.borrowFlashLoan(a,e);return n.repayFlashLoan(await o(n,c),l,e),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async createStakeAccount(e,a=true,o){let s=this.builder.createTxBlock(),r=o??this.walletAddress;s.setSender(r);let n=s.createStakeAccount(e);return s.transferObjects([n],r),a?await this.scallopSuiKit.signAndSendTxn(s):s.txBlock}async stake(e,a,o=true,s,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await this.query.getStakeAccounts(e),l=s??c[0]?.id;if(l)await n.stakeQuick(a,e,l);else {let d=n.createStakeAccount(e);await n.stakeQuick(a,e,d),n.transferObjects([d],i);}return o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async unstake(e,a,o=true,s,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await n.unstakeQuick(a,e,s);if(c){let l=this.utils.parseSCoinType(e);if(!l)throw new Error(`Invalid sCoin type: ${e}`);await this.utils.mergeSimilarCoins(n,c,l,i);}return n.transferObjects([c],i),o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async unstakeAndWithdraw(e,a,o=true,s,r){let n=this.builder.createTxBlock(),i=r??this.walletAddress;n.setSender(i);let c=await n.unstakeQuick(a,e,s,false),l=this.utils.parseCoinName(e);if(c){let d=n.withdraw(c,l);await this.utils.mergeSimilarCoins(n,d,this.utils.parseCoinType(l),j(n)),n.transferObjects([d],i);}else throw new Error(`No stake found for ${e}`);return o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async claim(e,a=true,o,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i=await r.claimQuick(e,o);return r.transferObjects(i,n),a?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async stakeObligation(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;return r.setSender(n),await r.stakeObligationWithVeScaQuick(e,a),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async unstakeObligation(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;return r.setSender(n),await r.unstakeObligationQuick(e,a),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimBorrowIncentive(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i={},c=await this.query.getObligationAccount(e);if(!c)throw new Error("Obligation not found");let l=Object.values(c.borrowIncentives).filter(d=>!!d).flatMap(({rewards:d})=>d.filter(({availableClaimAmount:u})=>u>0)).flatMap(({coinName:d})=>d);for(let d of l){let u=await r.claimBorrowIncentiveQuick(d,e,a);i[d]?i[d].push(u):i[d]=[u];}return r.transferObjects(Object.values(i).map(d=>{let u=d[0];return d.length>1&&r.mergeCoins(u,d.slice(1)),u}),n),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async migrateAllMarketCoin(e=true,a=true,o){let s=o??this.walletAddress,r=this.builder.createTxBlock();r.setSender(s);let n=[];for(let i of this.constants.whitelist.scoin){let c=[];try{let{takeCoin:l}=await this.builder.selectMarketCoin(r,i,Number.MAX_SAFE_INTEGER,s);if(l){let d=r.mintSCoin(i,l);c.push(d);}}catch(l){if(!l.toString().includes("No valid coins found for the transaction"))throw l}if(e&&this.constants.whitelist.spool.has(i))try{let l=await r.unstakeQuick(Number.MAX_SAFE_INTEGER,i);l&&c.push(l);}catch{}if(c.length>0){let l=c[0];c.length>1&&r.mergeCoins(l,c.slice(1));let d=this.utils.parseSCoinType(i);await this.utils.mergeSimilarCoins(r,l,d,s),n.push(l);}}return n.length>0&&r.transferObjects(n,s),a?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async claimAllUnlockedSca(e=true,a){let o=a??this.walletAddress,s=(await this.query.getVeScas({walletAddress:o})??[]).map(({keyObject:i})=>i);if(s.length===0)throw new Error("No veSCA found in the wallet");let r=[],n=this.builder.createTxBlock();if(n.setSender(o),await Promise.all(s.map(async i=>{try{let c=await n.redeemScaQuick({veScaKey:i,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&&n.mergeCoins(r[0],r.slice(1)),await this.utils.mergeSimilarCoins(n,r[0],"sca",o),e?await this.scallopSuiKit.signAndSendTxn(n):{tx:n.txBlock,scaCoin:r[0]}}async mintTestCoin(e,a,o=true,s){if(!(this.networkType==="testnet"))throw new Error("Only be used on the test network.");let n=this.builder.createTxBlock(),i=s??this.walletAddress,c=this.address.get("core.packages.testCoin.id"),l=this.address.get(`core.coins.${e}.treasury`),d=`${c}::${e}::mint`,u=n.moveCall(d,[l,a]);return n.transferObjects([u],i),o?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}},ze=jt;var Nt=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}},za=Nt;
23
22
 
24
- exports.API_BASE_URL = Nt;
25
- exports.DEFAULT_CACHE_OPTIONS = jt;
26
- exports.IS_VE_SCA_TEST = Ls;
27
- exports.MAX_LOCK_DURATION = $;
28
- exports.MAX_LOCK_ROUNDS = le;
29
- exports.MIN_INITIAL_LOCK_AMOUNT = Xe;
30
- exports.MIN_TOP_UP_AMOUNT = Ye;
31
- exports.OLD_BORROW_INCENTIVE_PROTOCOL_ID = ze;
32
- exports.POOL_ADDRESSES = Gs;
33
- exports.RPC_PROVIDERS = He;
34
- exports.SCA_COIN_TYPE = Ce;
35
- exports.SDK_API_BASE_URL = _t;
36
- exports.Scallop = Ja;
37
- exports.ScallopAddress = Le;
38
- exports.ScallopBuilder = We;
39
- exports.ScallopClient = Ge;
40
- exports.ScallopConstants = Ve;
41
- exports.ScallopIndexer = Qe;
42
- exports.ScallopQuery = $e;
43
- exports.ScallopSuiKit = Ue;
44
- exports.ScallopUtils = qe;
45
- exports.TEST_ADDRESSES = $s;
46
- exports.UNLOCK_ROUND_DURATION = Z;
47
- exports.USE_TEST_ADDRESS = Vs;
48
- exports.WHITELIST = Ws;
23
+ exports.API_BASE_URL = Dt;
24
+ exports.DEFAULT_CACHE_OPTIONS = Bt;
25
+ exports.IS_VE_SCA_TEST = Rs;
26
+ exports.MAX_LOCK_DURATION = W;
27
+ exports.MAX_LOCK_ROUNDS = de;
28
+ exports.MIN_INITIAL_LOCK_AMOUNT = Ye;
29
+ exports.MIN_TOP_UP_AMOUNT = Ze;
30
+ exports.OLD_BORROW_INCENTIVE_PROTOCOL_ID = He;
31
+ exports.POOL_ADDRESSES = Ms;
32
+ exports.RPC_PROVIDERS = Xe;
33
+ exports.SCA_COIN_TYPE = Te;
34
+ exports.SDK_API_BASE_URL = Mt;
35
+ exports.Scallop = za;
36
+ exports.ScallopAddress = Ve;
37
+ exports.ScallopBuilder = Ge;
38
+ exports.ScallopClient = ze;
39
+ exports.ScallopConstants = Ee;
40
+ exports.ScallopIndexer = $e;
41
+ exports.ScallopQuery = We;
42
+ exports.ScallopSuiKit = qe;
43
+ exports.ScallopUtils = Qe;
44
+ exports.TEST_ADDRESSES = Bs;
45
+ exports.UNLOCK_ROUND_DURATION = J;
46
+ exports.USE_TEST_ADDRESS = Is;
47
+ exports.WHITELIST = Ds;
49
48
  exports.queryKeys = x;
50
- exports.xOracleList = Te;
49
+ exports.xOracleList = ke;