@scallop-io/sui-scallop-sdk 3.0.2 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Logger-Cg2iFdpH.d.ts +8 -0
- package/dist/builder.cjs +22 -0
- package/dist/builder.d.cts +28 -0
- package/dist/builder.d.ts +28 -0
- package/dist/builder.js +4 -0
- package/dist/chunk-33AK5RWM.js +15 -0
- package/dist/chunk-6UQ4NWEU.js +3 -0
- package/dist/chunk-DIC6P5HB.js +11 -0
- package/dist/chunk-S34VOEZN.js +3 -0
- package/dist/chunk-VTGQACWU.js +6 -0
- package/dist/client.cjs +21 -0
- package/dist/client.d.cts +401 -0
- package/dist/client.d.ts +401 -0
- package/dist/client.js +5 -0
- package/dist/errors.cjs +10 -0
- package/dist/errors.d.cts +32 -0
- package/dist/errors.d.ts +32 -0
- package/dist/errors.js +1 -0
- package/dist/index.cjs +51 -34
- package/dist/index.d.cts +130 -3145
- package/dist/index.d.ts +130 -3145
- package/dist/index.js +8 -12
- package/dist/logger.cjs +6 -0
- package/dist/logger.d.cts +7 -0
- package/dist/logger.d.ts +7 -0
- package/dist/logger.js +1 -0
- package/dist/query-DkitepDi.d.ts +3305 -0
- package/dist/query.cjs +19 -0
- package/dist/query.d.cts +9 -0
- package/dist/query.d.ts +9 -0
- package/dist/query.js +3 -0
- package/dist/types.cjs +2 -0
- package/dist/types.d.cts +90 -0
- package/dist/types.d.ts +90 -0
- package/dist/types.js +1 -0
- package/package.json +98 -56
- package/src/constants/api.ts +2 -0
- package/src/constants/coinType.ts +2 -0
- package/src/constants/common.ts +0 -7
- package/src/constants/index.ts +2 -0
- package/src/constants/queryKeys.ts +14 -7
- package/src/constants/testAddress.ts +1 -0
- package/src/datasources/api.ts +34 -0
- package/src/datasources/indexer.ts +8 -0
- package/src/datasources/onchain.ts +121 -0
- package/src/entries/builder.ts +5 -0
- package/src/entries/client.ts +3 -0
- package/src/entries/errors.ts +2 -0
- package/src/entries/index.ts +17 -0
- package/src/entries/logger.ts +2 -0
- package/src/entries/query.ts +6 -0
- package/src/entries/types.ts +2 -0
- package/src/errors/ScallopConfigError.ts +8 -0
- package/src/errors/ScallopError.ts +30 -0
- package/src/errors/ScallopIndexerError.ts +8 -0
- package/src/errors/ScallopParseError.ts +8 -0
- package/src/errors/ScallopRpcError.ts +8 -0
- package/src/errors/ScallopTransactionBuildError.ts +8 -0
- package/src/errors/index.ts +6 -0
- package/src/logger/Logger.ts +6 -0
- package/src/logger/consoleLogger.ts +13 -0
- package/src/logger/index.ts +3 -0
- package/src/logger/noopLogger.ts +8 -0
- package/src/mappers/index.ts +1 -0
- package/src/mappers/moveTypeMapper.ts +48 -0
- package/src/models/index.ts +8 -10
- package/src/models/interface.ts +9 -9
- package/src/models/scallop.ts +9 -16
- package/src/models/scallopAddress/const.ts +416 -0
- package/src/models/scallopAddress/index.ts +188 -0
- package/src/models/scallopAddress/types.ts +212 -0
- package/src/models/{scallopBuilder.ts → scallopBuilder/index.ts} +65 -29
- package/src/models/scallopBuilder/types.ts +37 -0
- package/src/models/{scallopClient.ts → scallopClient/index.ts} +157 -598
- package/src/models/scallopClient/types.ts +25 -0
- package/src/models/scallopConstants/config/AddressConfigSource.ts +13 -0
- package/src/models/scallopConstants/config/ConfigValidator.ts +70 -0
- package/src/models/scallopConstants/config/PoolAddressConfigSource.ts +12 -0
- package/src/models/scallopConstants/config/ScallopConfig.ts +80 -0
- package/src/models/scallopConstants/config/ScallopConfigSnapshot.ts +46 -0
- package/src/models/scallopConstants/config/WhitelistConfigSource.ts +16 -0
- package/src/models/scallopConstants/config/index.ts +6 -0
- package/src/models/scallopConstants/const.ts +19 -0
- package/src/models/scallopConstants/constantsSource.ts +98 -0
- package/src/models/scallopConstants/deriveConstants.ts +150 -0
- package/src/models/scallopConstants/index.ts +257 -0
- package/src/models/scallopConstants/loadConstantsState.ts +135 -0
- package/src/models/scallopConstants/types.ts +77 -0
- package/src/models/scallopConstants/utils.ts +69 -0
- package/src/models/scallopQuery/index.ts +1279 -0
- package/src/models/scallopQuery/types.ts +9 -0
- package/src/models/scallopQuery/utils.ts +13 -0
- package/src/models/scallopUtils/index.ts +505 -0
- package/src/models/scallopUtils/types.ts +30 -0
- package/src/models/transactionExecutor.ts +122 -0
- package/src/repositories/addressApi/helpers.ts +14 -0
- package/src/repositories/addressApi/index.ts +24 -0
- package/src/repositories/addressApi/schema.ts +0 -0
- package/src/repositories/addressApi/types.ts +177 -0
- package/src/repositories/base.ts +38 -0
- package/src/repositories/borrowIncentive/bcs.ts +11 -0
- package/src/repositories/borrowIncentive/helpers.ts +396 -0
- package/src/repositories/borrowIncentive/index.ts +52 -0
- package/src/{types/query/borrowIncentive.ts → repositories/borrowIncentive/types.ts} +69 -23
- package/src/repositories/borrowIncentive/utils.ts +234 -0
- package/src/repositories/cache.ts +4 -0
- package/src/repositories/coinBalance/helpers.ts +394 -0
- package/src/repositories/coinBalance/index.ts +69 -0
- package/src/repositories/coinBalance/types.ts +33 -0
- package/src/repositories/flashloan/const.ts +3 -0
- package/src/repositories/flashloan/helpers.ts +107 -0
- package/src/repositories/flashloan/index.ts +34 -0
- package/src/repositories/flashloan/types.ts +16 -0
- package/src/repositories/isolatedAssets/bcs.ts +4 -0
- package/src/repositories/isolatedAssets/const.ts +2 -0
- package/src/repositories/isolatedAssets/helpers.ts +91 -0
- package/src/repositories/isolatedAssets/index.ts +42 -0
- package/src/repositories/isolatedAssets/types.ts +35 -0
- package/src/repositories/loyaltyProgram/bcs.ts +7 -0
- package/src/repositories/loyaltyProgram/helpers.ts +117 -0
- package/src/repositories/loyaltyProgram/index.ts +28 -0
- package/src/repositories/loyaltyProgram/schema.ts +18 -0
- package/src/repositories/loyaltyProgram/types.ts +37 -0
- package/src/repositories/market/const.ts +6 -0
- package/src/repositories/market/helpers.ts +740 -0
- package/src/repositories/market/index.ts +137 -0
- package/src/repositories/market/mapper.ts +30 -0
- package/src/repositories/market/types.ts +443 -0
- package/src/repositories/market/utils.ts +285 -0
- package/src/repositories/obligation/helpers.ts +228 -0
- package/src/repositories/obligation/index.ts +51 -0
- package/src/repositories/obligation/types.ts +71 -0
- package/src/repositories/obligation/utils.ts +57 -0
- package/src/repositories/poolAddresses/const.ts +5 -0
- package/src/repositories/poolAddresses/helpers.ts +422 -0
- package/src/repositories/poolAddresses/index.ts +56 -0
- package/src/repositories/poolAddresses/schema.ts +34 -0
- package/src/repositories/poolAddresses/types.ts +69 -0
- package/src/repositories/price/const.ts +1 -0
- package/src/repositories/price/helpers.ts +237 -0
- package/src/repositories/price/index.ts +91 -0
- package/src/repositories/price/schema.ts +24 -0
- package/src/repositories/price/types.ts +56 -0
- package/src/repositories/price/utils.ts +21 -0
- package/src/repositories/referral/bcs.ts +3 -0
- package/src/repositories/referral/helper.ts +24 -0
- package/src/repositories/referral/index.ts +31 -0
- package/src/repositories/referral/types.ts +33 -0
- package/src/repositories/spool/const.ts +1 -0
- package/src/repositories/spool/helpers.ts +471 -0
- package/src/repositories/spool/index.ts +135 -0
- package/src/{types/query/spool.ts → repositories/spool/types.ts} +67 -2
- package/src/repositories/spool/utils.ts +215 -0
- package/src/repositories/types.ts +39 -0
- package/src/repositories/utils.ts +137 -0
- package/src/repositories/veSca/bcs.ts +6 -0
- package/src/repositories/veSca/helpers.ts +341 -0
- package/src/repositories/veSca/index.ts +57 -0
- package/src/repositories/veSca/types.ts +79 -0
- package/src/repositories/veScaLoyaltyProgram/bcs.ts +3 -0
- package/src/repositories/veScaLoyaltyProgram/helpers.ts +135 -0
- package/src/repositories/veScaLoyaltyProgram/index.ts +28 -0
- package/src/repositories/veScaLoyaltyProgram/schema.ts +15 -0
- package/src/repositories/veScaLoyaltyProgram/types.ts +47 -0
- package/src/repositories/wiring/datasources.ts +42 -0
- package/src/repositories/wiring/metadata.ts +292 -0
- package/src/repositories/wiring/registry.ts +194 -0
- package/src/repositories/wiring/source.ts +63 -0
- package/src/repositories/xOracle/bcs.ts +7 -0
- package/src/repositories/xOracle/const.ts +1 -0
- package/src/repositories/xOracle/helpers.ts +304 -0
- package/src/repositories/xOracle/index.ts +45 -0
- package/src/repositories/xOracle/types.ts +96 -0
- package/src/repositories/xOracle/utils.ts +3 -0
- package/src/services/client/BorrowService.ts +229 -0
- package/src/services/client/CollateralService.ts +76 -0
- package/src/services/client/LendingService.ts +75 -0
- package/src/services/client/ReferralService.ts +71 -0
- package/src/services/client/SpoolService.ts +170 -0
- package/src/services/client/VeScaService.ts +142 -0
- package/src/services/client/types.ts +44 -0
- package/src/services/index.ts +8 -0
- package/src/services/query/portfolioCalculations.ts +1171 -0
- package/src/txBuilders/borrowIncentive/index.ts +80 -0
- package/src/txBuilders/borrowIncentive/moveCalls.ts +124 -0
- package/src/txBuilders/borrowIncentive/quick.ts +207 -0
- package/src/txBuilders/context.ts +62 -0
- package/src/txBuilders/core/index.ts +95 -0
- package/src/txBuilders/core/moveCalls.ts +241 -0
- package/src/txBuilders/core/quick.ts +306 -0
- package/src/{builders → txBuilders}/index.ts +35 -9
- package/src/txBuilders/loyaltyProgram/index.ts +78 -0
- package/src/txBuilders/loyaltyProgram/moveCalls.ts +44 -0
- package/src/txBuilders/loyaltyProgram/quick.ts +58 -0
- package/src/txBuilders/manifest.ts +160 -0
- package/src/txBuilders/modules.ts +70 -0
- package/src/{builders → txBuilders}/oracles/index.ts +3 -2
- package/src/{builders → txBuilders}/oracles/pyth.ts +4 -3
- package/src/txBuilders/referral/index.ts +72 -0
- package/src/txBuilders/referral/moveCalls.ts +93 -0
- package/src/txBuilders/referral/quick.ts +57 -0
- package/src/txBuilders/sCoin/index.ts +72 -0
- package/src/txBuilders/sCoin/moveCalls.ts +36 -0
- package/src/txBuilders/sCoin/quick.ts +34 -0
- package/src/txBuilders/spool/index.ts +82 -0
- package/src/txBuilders/spool/moveCalls.ts +79 -0
- package/src/{builders/spoolBuilder.ts → txBuilders/spool/quick.ts} +22 -162
- package/src/txBuilders/utils.ts +36 -0
- package/src/txBuilders/verify.ts +45 -0
- package/src/txBuilders/vesca/index.ts +75 -0
- package/src/txBuilders/vesca/moveCalls.ts +147 -0
- package/src/{builders/vescaBuilder.ts → txBuilders/vesca/quick.ts} +85 -274
- package/src/types/address.ts +4 -178
- package/src/types/builder/borrowIncentive.ts +4 -3
- package/src/types/builder/core.ts +6 -33
- package/src/types/builder/index.ts +5 -1
- package/src/types/builder/loyaltyProgram.ts +4 -3
- package/src/types/builder/modules.ts +49 -0
- package/src/types/builder/referral.ts +5 -4
- package/src/types/builder/sCoin.ts +20 -2
- package/src/types/builder/spool.ts +22 -2
- package/src/types/builder/vesca.ts +4 -12
- package/src/types/constant/index.ts +3 -1
- package/src/types/constant/queryKeys.ts +15 -8
- package/src/types/index.ts +5 -6
- package/src/types/internal/dto.ts +46 -0
- package/src/types/internal/index.ts +2 -0
- package/src/types/internal/move.ts +13 -0
- package/src/types/public/index.ts +21 -0
- package/src/types/query/core.ts +0 -317
- package/src/types/query/index.ts +3 -4
- package/src/types/query/portfolio.ts +2 -15
- package/src/types/repositories/borrowIncentive.ts +12 -0
- package/src/types/repositories/index.ts +9 -0
- package/src/types/repositories/loyaltyProgram.ts +2 -0
- package/src/types/repositories/market.ts +13 -0
- package/src/types/repositories/spool.ts +21 -0
- package/src/types/repositories/veSca.ts +5 -0
- package/src/types/repositories/veScaLoyaltyProgram.ts +2 -0
- package/src/types/sui.ts +0 -1
- package/src/utils/array.ts +7 -0
- package/src/utils/cache.ts +17 -0
- package/src/utils/object.ts +30 -12
- package/src/utils/query.ts +9 -190
- package/src/utils/vesca.ts +0 -8
- package/src/builders/borrowIncentiveBuilder.ts +0 -372
- package/src/builders/coreBuilder.ts +0 -636
- package/src/builders/loyaltyProgramBuilder.ts +0 -142
- package/src/builders/referralBuilder.ts +0 -192
- package/src/builders/sCoinBuilder.ts +0 -124
- package/src/index.ts +0 -13
- package/src/models/scallopAddress.ts +0 -841
- package/src/models/scallopAxios.ts +0 -185
- package/src/models/scallopConstants.ts +0 -380
- package/src/models/scallopIndexer.ts +0 -226
- package/src/models/scallopQuery.ts +0 -974
- package/src/models/scallopQueryClient.ts +0 -29
- package/src/models/scallopSuiKit.ts +0 -480
- package/src/models/scallopUtils.ts +0 -734
- package/src/queries/borrowIncentiveQuery.ts +0 -361
- package/src/queries/borrowLimitQuery.ts +0 -33
- package/src/queries/coreQuery.ts +0 -1173
- package/src/queries/flashloanFeeQuery.ts +0 -92
- package/src/queries/index.ts +0 -15
- package/src/queries/isolatedAssetQuery.ts +0 -103
- package/src/queries/loyaltyProgramQuery.ts +0 -178
- package/src/queries/ownerQuery.ts +0 -32
- package/src/queries/poolAddressesQuery.ts +0 -340
- package/src/queries/portfolioQuery.ts +0 -1149
- package/src/queries/priceQuery.ts +0 -37
- package/src/queries/referralQuery.ts +0 -42
- package/src/queries/sCoinQuery.ts +0 -195
- package/src/queries/spoolQuery.ts +0 -542
- package/src/queries/supplyLimitQuery.ts +0 -32
- package/src/queries/switchboardQuery.ts +0 -65
- package/src/queries/vescaQuery.ts +0 -312
- package/src/queries/xOracleQuery.ts +0 -149
- package/src/types/constant/common.ts +0 -55
- package/src/types/query/loyaltyProgram.ts +0 -12
- package/src/types/query/vesca.ts +0 -27
- package/src/utils/index.ts +0 -7
- package/src/utils/indexer.ts +0 -47
- /package/src/{models → datasources}/rateLimiter.ts +0 -0
package/dist/index.cjs
CHANGED
|
@@ -1,46 +1,63 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var suiKit = require('@scallop-io/sui-kit');
|
|
4
|
-
var transactions = require('@mysten/sui/transactions');
|
|
5
|
-
var utils = require('@mysten/sui/utils');
|
|
6
4
|
var bignumber_js = require('bignumber.js');
|
|
7
|
-
var
|
|
8
|
-
var
|
|
5
|
+
var utils = require('@mysten/sui/utils');
|
|
6
|
+
var transactions = require('@mysten/sui/transactions');
|
|
9
7
|
var pythSuiJs = require('@pythnetwork/pyth-sui-js');
|
|
10
8
|
var jsonRpc = require('@mysten/sui/jsonRpc');
|
|
11
|
-
var Ns = require('axios');
|
|
12
9
|
var queryCore = require('@tanstack/query-core');
|
|
10
|
+
var Ls = require('axios');
|
|
11
|
+
var bcs = require('@mysten/sui/bcs');
|
|
12
|
+
var zod = require('zod');
|
|
13
|
+
var grpc = require('@mysten/sui/grpc');
|
|
13
14
|
|
|
14
15
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
16
|
|
|
16
|
-
var
|
|
17
|
+
var Ls__default = /*#__PURE__*/_interopDefault(Ls);
|
|
17
18
|
|
|
18
|
-
var Rt={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var jt="https://sui.apis.scallop.io",vt="https://sdk.api.scallop.io",qs=false,Qs=false,Ce="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",Ge="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var T={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 ze=[suiKit.getFullnodeUrl("mainnet")];var Js={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"}}}},Hs={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"])},Ys={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 ee=86400,le=1460,J=126144e3,Je=1e10,He=1e9;var Nt={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 H=t=>`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`,j=t=>{let e=t.getData().sender;if(!e)throw new Error("Sender is required");return e},de=t=>{if(t===void 0)throw new Error("veSca not found")},Ye=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Xe=(t,e,a)=>{de(a),Ye(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}`)},_t=(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),Ye(o),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");a&&e&&Xe(e,a,o);}},Dt=(t,e)=>{if(de(e),Ye(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")},Bt=(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 Ze=t=>({coinType:utils.normalizeStructTag(t.type),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)}),et=(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=bignumber_js.BigNumber(e.borrowIndex).multipliedBy(bignumber_js.BigNumber(d).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),p=bignumber_js.BigNumber(e.borrowIndex).plus(u),b=bignumber_js.BigNumber(p).dividedBy(e.borrowIndex).minus(1),g=bignumber_js.BigNumber(e.debtAmount).multipliedBy(b),f=g.plus(e.debtAmount),m=f.shiftedBy(-1*o),y=bignumber_js.BigNumber(e.reserveAmount).plus(g.multipliedBy(e.reserveFactor)),h=y.shiftedBy(-1*o),I=bignumber_js.BigNumber(f).plus(Math.max(e.cashAmount-y.toNumber(),0)),k=I.shiftedBy(-1*o),F=bignumber_js.BigNumber(f).dividedBy(I);F=F.isFinite()?F:bignumber_js.BigNumber(0);let _=bignumber_js.BigNumber(l).multipliedBy(F).multipliedBy(1-e.reserveFactor);_=_.isFinite()?_:bignumber_js.BigNumber(0);let A=I.dividedBy(e.marketCoinSupplyAmount);return A=A.isFinite()&&!A.isNaN()?A:bignumber_js.BigNumber(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:p.toNumber(),growthInterest:b.toNumber(),supplyAmount:I.toNumber(),supplyCoin:k.toNumber(),borrowAmount:f.toNumber(),borrowCoin:m.toNumber(),reserveAmount:y.toNumber(),reserveCoin:h.toNumber(),utilizationRate:F.toNumber(),supplyApr:_.toNumber(),supplyApy:t.parseAprToApy(_.toNumber()),conversionRate:A.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:bignumber_js.BigNumber(e.supplyLimit).shiftedBy(-o).toNumber(),maxBorrowCoin:bignumber_js.BigNumber(e.borrowLimit).shiftedBy(-o).toNumber()}},ke=t=>({coinType:utils.normalizeStructTag(t.type),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)}),Te=(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=bignumber_js.BigNumber(e.maxCollateralAmount).shiftedBy(-1*o),r=bignumber_js.BigNumber(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),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)}),Mt=(t,e,a)=>{let s=bignumber_js.BigNumber(t.pointPerPeriod).dividedBy(t.period),r=bignumber_js.BigNumber(t.pointPerPeriod).dividedBy(t.period),n=r.gt(0)?bignumber_js.BigNumber(t.maxPoint).minus(t.distributedPoint).dividedBy(r):bignumber_js.BigNumber(0),i=t.createdAt,c=n.plus(t.lastUpdate).integerValue().toNumber(),l=bignumber_js.BigNumber(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),d=bignumber_js.BigNumber(t.maxPoint).minus(t.distributedPoint),u=bignumber_js.BigNumber.minimum(bignumber_js.BigNumber(l).multipliedBy(t.pointPerPeriod),d),p=bignumber_js.BigNumber(t.index).plus(u.dividedBy(t.staked).isFinite()?bignumber_js.BigNumber(1e9).multipliedBy(u).dividedBy(t.staked):0),b=bignumber_js.BigNumber(t.distributedPoint).plus(u),g=bignumber_js.BigNumber(t.staked),f=g.shiftedBy(-1*a),m=f.multipliedBy(e);return {distributedPointPerSec:s.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:p.toNumber(),currentTotalDistributedPoint:b.toNumber(),startDate:new Date(i*1e3),endDate:new Date(c*1e3),stakedAmount:g.toNumber(),stakedCoin:f.toNumber(),stakedValue:m.toNumber()}},Kt=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)}),Lt=(t,e,a,o,s)=>{let n=bignumber_js.BigNumber(a.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),i=bignumber_js.BigNumber(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=i.shiftedBy(-1*s),l=c.multipliedBy(o),d=bignumber_js.BigNumber(e.rewards),u=d.shiftedBy(-1*s),p=u.multipliedBy(o),b=bignumber_js.BigNumber(e.claimedRewards),g=b.shiftedBy(-1*s),f=g.multipliedBy(o),m=bignumber_js.BigNumber(n).shiftedBy(-1*s).multipliedBy(31536e3).multipliedBy(o),y=m.dividedBy(a.stakedValue).isFinite()?m.dividedBy(a.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(y=1/0),{rewardApr:y,totalRewardAmount:i.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:l.toNumber(),remaindRewardAmount:d.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:p.toNumber(),claimedRewardAmount:b.toNumber(),claimedRewardCoin:g.toNumber(),claimedRewardValue:f.toNumber(),rewardPerSec:n.toNumber()}},oo=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)}),Vt=(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=oo(o),r=t.parseCoinNameFromType(s.pointType);return a[r]=s,a},{})}),Et=(t,e,a,o,s)=>{let n=bignumber_js.BigNumber(t.distributedPointPerPeriod).dividedBy(t.period),i=bignumber_js.BigNumber(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),c=bignumber_js.BigNumber.minimum(bignumber_js.BigNumber(i).multipliedBy(t.distributedPointPerPeriod),bignumber_js.BigNumber(t.points)),l=bignumber_js.BigNumber(t.index).plus(c.dividedBy(t.weightedAmount).isFinite()?bignumber_js.BigNumber(1e9).multipliedBy(c).dividedBy(t.weightedAmount):0),d=bignumber_js.BigNumber(t.distributedPoint).plus(c),u=bignumber_js.BigNumber(t.baseWeight),p=bignumber_js.BigNumber(t.weightedAmount),b=p.shiftedBy(-1*s),g=b.multipliedBy(o),f=365*24*60*60,m=bignumber_js.BigNumber(n).shiftedBy(-1*a),y=bignumber_js.BigNumber(m).multipliedBy(f).multipliedBy(e),h=bignumber_js.BigNumber(1e12),I=bignumber_js.BigNumber(t.baseWeight).dividedBy(h),k=y.multipliedBy(I).dividedBy(g).isFinite()&&t.points>0?y.multipliedBy(I).dividedBy(g).toNumber():1/0;return {distributedPointPerSec:n.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:l.toNumber(),currentTotalDistributedPoint:d.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:p.toNumber(),weightedStakedCoin:b.toNumber(),weightedStakedValue:g.toNumber(),rewardApr:k,rewardPerSec:m.toNumber()}},so=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)}),Ut=(t,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((a,o)=>{let s=so(o),r=t.parseCoinNameFromType(s.pointType);return a[r]=s,a},{})}),ue=(...t)=>bignumber_js.BigNumber(t.reduce((e,a)=>new bignumber_js.BigNumber(a).lt(e)?a:e));var Ae=(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};async function ro(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)=>ro(t,this,...e)}var no="0x0000000000000000000000000000000000000000000000000000000000000002::dynamic_field::Field",Oe=t=>typeof t=="object"&&t!==null,io=t=>!Oe(t)||t.$kind!=="Shared"||!("Shared"in t)||!Oe(t.Shared)?false:"initialSharedVersion"in t.Shared;function co(t){if(!t?.json)throw new Error(`Failed to parse object: ${JSON.stringify(t,null,2)}`)}var Pe=t=>{if(Array.isArray(t))return t.map(Pe);if(typeof t=="object"&&t!==null){let e=t;if("type"in e&&"fields"in e&&typeof e.type=="string")return Pe(e.fields);let a={};for(let[o,s]of Object.entries(e))a[o]=Pe(s);return a}return t},$t=t=>{co(t);let e=t.json,a="fields"in e?e.fields:e;return Pe(a)},Qt=t=>io(t.owner)?{objectId:t.objectId,initialSharedVersion:String(t.owner.Shared.initialSharedVersion)}:t,lo=(t,{obj:e,mutable:a=false})=>typeof e=="object"&&"initialSharedVersion"in e?t.sharedObjectRef({objectId:e.objectId,initialSharedVersion:e.initialSharedVersion.toString(),mutable:a}):typeof e=="object"&&"objectId"in e?t.object(e.objectId):typeof e=="string"?t.object(e):e,Q=async(t,{tx:e,object:a,mutable:o=false})=>{let s;if(typeof a=="string"){let r=await t.queryGetObject(a,{json:true,content:false});if(!r?.object)throw new Error("Failed to get object data");s=Qt(r.object);}else "objectId"in a&&"owner"in a&&(s=Qt(a));return lo(e,{obj:s??a,mutable:o})},uo=zod.z.union([zod.z.string(),zod.z.object({name:zod.z.string()}),zod.z.object({id:zod.z.string()}),zod.z.object({bytes:zod.z.string()}),zod.z.record(zod.z.unknown())]),po=zod.z.union([zod.z.string(),zod.z.object({id:zod.z.string()})]),fo=zod.z.object({id:po,name:uo,value:zod.z.unknown().optional()}),Wt=t=>t.type.startsWith(no),Gt=t=>{let{success:e}=fo.safeParse(t);return !!e},bo=t=>typeof t=="string"?t:t.id,mo=t=>{if(!Gt(t))throw new Error(`Invalid dynamic field data: ${JSON.stringify(t,null,2)}`);let{value:e}=t;return e},yo=t=>{if(typeof t=="string")return t;if(!Oe(t))return;let e=t,a=e.name,o=e.id,s=e.bytes;if(typeof a=="string")return a;if(typeof o=="string")return o;if(typeof s=="string")return s},go=t=>{if(typeof t=="string")return t.includes("::")?"type":"string";if(!Oe(t))return "string";let e=t;if(typeof e.id=="string")return "id";if(typeof e.bytes=="string")return "bytes";let a=e.name;return typeof a=="string"&&a.includes("::")?"type":"string"},w=t=>{let e=$t(t);return Wt(t)&&typeof e=="object"?mo(e):e},te=t=>{if(!Wt(t))throw new Error(`Object ${t.objectId} is not a dynamic field object`);let e=$t(t);if(Gt(e)){let a=yo(e.name);if(!a)throw new Error(`Failed to parse dynamic field name from object ${t.objectId}: ${JSON.stringify(e.name,null,2)}`);return {objectId:bo(e.id),name:a,nameKind:go(e.name)}}throw new Error(`Failed to parse dynamic field object ${t.objectId}, invalid fields: ${JSON.stringify(e,null,2)}`)};function Ie(t){let{type:e,value:a}=t;if(t.bcs instanceof Uint8Array)return {type:e,bcs:t.bcs};if(a===void 0)throw new Error(`DynamicField name must have 'value' or 'bcs' for type: ${e}`);let o;if(e==="0x2::object::ID"||e==="address"||e.includes("::typed_id::TypedID"))o=bcs.bcs.Address.serialize(a).toBytes();else if(e==="u64"||e==="u8"||e==="u128"||e==="u256")o={u64:bcs.bcs.u64(),u8:bcs.bcs.u8(),u128:bcs.bcs.u128(),u256:bcs.bcs.u256()}[e].serialize(a).toBytes();else if(e.includes("::type_name::TypeName")){let s=typeof a=="object"&&a!==null&&"name"in a?a.name:suiKit.normalizeStructTag(a);o=bcs.bcs.struct("TypeName",{name:bcs.bcs.string()}).serialize({name:s}).toBytes();}else o=bcs.bcs.string().serialize(a).toBytes();return {type:e,bcs:o}}var pe=t=>(t.endsWith("/")&&(t=t.slice(0,-1)),t);var Co=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`,i=[await Q(e,{tx:s,object:o,mutable:true})],c=await e.queryInspectTxn({queryTarget:r,args:i,txBlock:s,keys:T.rpc.getInspectTxn({queryTarget:r,args:[o],node:e.currentFullNode})});return (c?.Transaction??c?.FailedTransaction)?.events?.[0]?.parsedJson},Jt=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 Co(t);for(let i of n?.incentive_pools??[]){let c={},l=Vt(t.utils,i),d=utils.normalizeStructTag(i.pool_type.name),u=t.utils.parseCoinNameFromType(d),p=s?.[u]??0,b=t.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[y,h]of Object.entries(l.poolPoints)){if(!h)continue;let I=h.pointType,k=t.utils.parseCoinNameFromType(I),F=t.utils.getCoinDecimal(k);if(F===void 0)throw new Error(`Coin decimal not found for ${k}`);let _=s?.[k]??0,A=t.utils.parseSymbol(k),E=t.utils.getCoinDecimal(k),D=Et(h,_,F,p,b);h.points>D.accumulatedPoints&&(c[y]={symbol:A,coinName:k,coinType:I,coinDecimal:E,coinPrice:_,points:h.points,distributedPoint:h.distributedPoint,weightedAmount:h.weightedAmount,...D});}let g=bignumber_js.BigNumber(l.staked),f=g.shiftedBy(-1*b),m=f.multipliedBy(p);r[u]={coinName:u,symbol:t.utils.parseSymbol(u),coinType:d,coinDecimal:b,coinPrice:p,stakedAmount:g.toNumber(),stakedCoin:f.toNumber(),stakedValue:m.toNumber(),points:c};}return r},Ht=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 Promise.all([Q(t.scallopSuiKit,{tx:o,object:r,mutable:true}),Q(t.scallopSuiKit,{tx:o,object:e,mutable:true})]),l=[i,c],d=await t.scallopSuiKit.queryInspectTxn({queryTarget:n,args:l,txBlock:o,keys:T.rpc.getInspectTxn({queryTarget:n,args:[r,e],node:t.scallopSuiKit.currentFullNode})}),p=(d?.Transaction??d?.FailedTransaction)?.events?.[0]?.parsedJson;return Object.values(p?.pool_records??[]).reduce((g,f)=>{let m=Ut(t,f),y=m.poolType,h=t.parseCoinNameFromType(y);return a&&a.includes(h)&&(g[h]=m),g},{})};var Yt=async({address:t,scallopSuiKit:e},a)=>{let o=t.get("borrowIncentive.object"),s=t.get("borrowIncentive.incentivePools"),r=t.get("vesca.object"),i=(await e.queryGetObject(s))?.object;if(!i)return null;let l=w(i).ve_sca_bind.id,d=`${o}::typed_id::TypedID<${r}::ve_sca::VeScaKey>`,p=(await e.queryGetDynamicFieldObject({parentId:l,name:{type:d,value:a}}))?.object;if(!p)return null;let{id:b}=w(p),{name:g}=te(p);return {obligationId:b,obligationKey:g}},Xt=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?.object)return null;let i=w(n.object).accounts.id,c=await e.queryGetDynamicFieldObject({parentId:i,name:{type:`${o}::typed_id::TypedID<${r}::obligation::Obligation>`,value:a}});return c?.object?w(c.object).binded_ve_sca_key?.id??null:null};var ko="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:ko,value:a}});return s?.object?.json?w(s.object):"0"}catch(a){return console.error(`Error in getSupplyLimit for ${e}: ${a.message}`),"0"}};var Zt="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.type===Zt;do{let i=await t.scallopSuiKit.queryGetDynamicFields({parentId:a,cursor:r,limit:50});if(!i)break;let c=i.dynamicFields.filter(n).map(({name:l})=>`0x${l.value.type.name}`);o.push(...c),i&&i.hasNextPage&&i.cursor?(s=!0,r=i.cursor):s=!1;}while(s);return o}catch(a){return console.error(a),[]}},re=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 c=t.parseCoinType(e);return r.includes(c)}let n=t.parseCoinType(e).slice(2),i=await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:Zt,value:n}});return i?.object?.json?w(i.object):false};var To="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",je=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:To,value:a}});return s?.object?.json?w(s.object):"0"}catch(a){return console.error(`Error in getBorrowLimit for ${e}: ${a.message}`),"0"}};var Ao="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:Ao,limit:50,cursor:n});if(!l)break;let d=l.dynamicFields.filter(u=>{let p=`0x${u.name.value?.name}`;return !!r[p]}).map(u=>u.fieldId);c.push(...await e.queryGetObjects(d)),i=l.hasNextPage,n=l.cursor;}while(i);return c.reduce((l,d)=>{if(d.json){let{name:u}=te(d),p=`0x${u}`,b=r[p];if(!b)return l;let g=+w(d);l[b]=g/o;}return l},{})};var ra=async({utils:t,indexer:e},a=false,o)=>{o=o??await t.getCoinPrices()??{};let s={},r={};if(a){let f=await e.getMarket(),m=h=>{h.coinPrice=o[h.coinName]??h.coinPrice,h.coinWrappedType=t.getCoinWrappedType(h.coinName),s[h.coinName]=h;},y=h=>{h.coinPrice=o[h.coinName]??h.coinPrice,h.coinWrappedType=t.getCoinWrappedType(h.coinName),r[h.coinName]=h;};return Object.values(f.pools).filter(h=>!!h).forEach(m),Object.values(f.collaterals).filter(h=>!!h).forEach(y),{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`,u=[await Q(t.scallopSuiKit,{object:c,tx:n,mutable:true})],p=await t.scallopSuiKit.queryInspectTxn({queryTarget:l,args:u,txBlock:n,keys:T.rpc.getInspectTxn({queryTarget:l,args:[c],node:t.scallopSuiKit.currentFullNode})}),g=(p?.Transaction??p?.FailedTransaction)?.events?.[0]?.parsedJson;for(let f of g?.pools??[]){let m=utils.normalizeStructTag(f.type.name),y=t.parseCoinNameFromType(m),h=o[y]??0;if(!t.constants.whitelist.lending.has(y))continue;let I=Ze({...f,type:f.type.name,isIsolated:await re(t,y),supplyLimit:await Re(t,y)??"0",borrowLimit:await je(t,y)??"0"}),k=et(t,I);s[y]={coinName:y,symbol:t.parseSymbol(y),marketCoinType:t.parseMarketCoinType(y),sCoinType:t.parseSCoinType(t.parseMarketCoinName(y))??"",coinWrappedType:t.getCoinWrappedType(y),coinPrice:h,...I,...k};}for(let f of g?.collaterals??[]){let m=utils.normalizeStructTag(f.type.name),y=t.parseCoinNameFromType(m),h=o[y]??0;if(!t.constants.whitelist.collateral.has(y))continue;let I=ke({...f,type:f.type.name,liquidationPenalty:f.liquidationPanelty,isIsolated:await re(t,y)}),k=Te(t,I);r[y]={coinName:y,symbol:t.parseSymbol(y),marketCoinType:t.parseMarketCoinType(y),coinWrappedType:t.getCoinWrappedType(y),coinPrice:h,...I,...k};}return {pools:s,collaterals:r}},na=async({utils:t,scallopSuiKit:e},a)=>{let o=["lendingPoolAddress","collateralPoolAddress","borrowDynamic","interestModel","riskModel","borrowFeeKey","supplyLimitKey","borrowLimitKey","isolatedAssetKey"],s=[];for(let d of a){let u=t.constants.poolAddresses[d];for(let p of o)u?.[p]&&u[p]!==""&&s.push(u[p]);}let r=[],n=xe(s,50);for(let d of n){let u=await e.queryGetObjects(d,{json:true});u.length>0&&r.push(...u);}let i=r.reduce((d,u)=>(d[u.objectId]=u,d),{}),l={};for(let d of a){let u=t.constants.poolAddresses[d];l[d]={balanceSheet:i[u?.lendingPoolAddress??""],collateralStat:i[u?.collateralPoolAddress??""],borrowDynamic:i[u?.borrowDynamic??""],interestModel:i[u?.interestModel??""],riskModel:i[u?.riskModel??""],borrowFeeKey:i[u?.borrowFeeKey??""],supplyLimitKey:i[u?.supplyLimitKey??""],borrowLimitKey:i[u?.borrowLimitKey??""],isolatedAssetKey:i[u?.isolatedAssetKey??""]};}return l},ia=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 na(t,e);return await Promise.allSettled(e.map(async i=>{try{let c=await Oo(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=w(e),d=w(s),u=w(a),p=n?w(n):{value:"0"},b=i?w(i):"0",g=c?w(c):"0",f=r?w(r):void 0,m=o?w(o):void 0,y=await re(t,t.parseCoinNameFromType(`0x${d.type}`)),h=f&&m?{type:d.type,collateralFactor:f.collateral_factor,liquidationFactor:f.liquidation_factor,liquidationPenalty:f.liquidation_penalty,liquidationDiscount:f.liquidation_discount,liquidationReserveFactor:f.liquidation_revenue_factor,maxCollateralAmount:f.max_collateral_amount,totalCollateralAmount:m.amount,isIsolated:y}:void 0;return {type:d.type,maxBorrowRate:d.max_borrow_rate,interestRate:u.interest_rate,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,borrowWeight:d.borrow_weight,borrowFeeRate:p,baseBorrowRatePerSec:d.base_borrow_rate_per_sec,borrowRateOnHighKink:d.borrow_rate_on_high_kink,borrowRateOnMidKink:d.borrow_rate_on_mid_kink,highKink:d.high_kink,midKink:d.mid_kink,minBorrowAmount:d.min_borrow_amount,supplyLimit:b,borrowLimit:g,isIsolated:y,parsedOriginMarketCollateral:h}},Oo=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 na(t,[e]))[e],!s)throw new Error(`Failed to fetch required market objects for ${e}`);let r=await Po(t.utils,s),n=Ze(r),i=et(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,...Te(t.utils,c)}:void 0}},ca=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 tt({utils:t,indexer:e,scallopSuiKit:a},l,s,c?.object,n?.[l]);d&&(i[l]=d);})),i},tt=async({utils:t,indexer:e,scallopSuiKit:a},o,s=false,r,n)=>{if(n=n??(await t.getCoinPrices())?.[o],s){let k=await e.getMarketCollateral(o);return k.coinPrice=n??k.coinPrice,k.coinWrappedType=t.getCoinWrappedType(k.coinName),k}let i=t.address.get("core.market");if(r=r||(await a.queryGetObject(i))?.object,!(r&&r.json))throw new Error("Failed to fetch marketObject");let c=w(r),l=t.parseCoinType(o),d=c.risk_models.table.id,p=(await a.queryGetDynamicFieldObject({parentId:d,name:{type:"0x1::type_name::TypeName",value:{name:l.substring(2)}}}))?.object;if(!(p&&p.json))throw new Error(`Failed to fetch riskModelDynamicFieldObject for ${o}`);let b=w(p),g=c.collateral_stats.table.id,m=(await a.queryGetDynamicFieldObject({parentId:g,name:{type:"0x1::type_name::TypeName",value:{name:l.substring(2)}}}))?.object;if(!(m&&m.json))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${o}`);let y=w(m),h=ke({type:b.type,collateralFactor:b.collateral_factor,liquidationFactor:b.liquidation_factor,liquidationDiscount:b.liquidation_discount,liquidationPenalty:b.liquidation_penalty,liquidationReserveFactor:b.liquidation_revenue_factor,maxCollateralAmount:b.max_collateral_amount,totalCollateralAmount:y.amount,isIsolated:await re(t,o)}),I=Te(t,h);return {coinName:o,symbol:t.parseSymbol(o),coinType:t.parseCoinType(o),marketCoinType:t.parseMarketCoinType(o),coinWrappedType:t.getCoinWrappedType(o),coinPrice:n??0,collateralFactor:h.collateralFactor,liquidationFactor:h.liquidationFactor,liquidationDiscount:h.liquidationDiscount,liquidationPenalty:h.liquidationPenalty,liquidationReserveFactor:h.liquidationReserveFactor,...I}},ie=async({utils:t},e)=>{let a=e,o=t.constants.protocolObjectId,s=[],r=false,n=null;do{let p=await t.scallopSuiKit.queryGetOwnedObjects({owner:a,filter:{StructType:`${o}::obligation::ObligationKey`},options:{json:true},cursor:n,limit:50});if(!p)break;let b=p.objects,g=p.hasNextPage,f=p.cursor;b&&s.push(...b),g&&f?(r=true,n=f):r=false;}while(r);let c=s.filter(p=>!!p).map(p=>{let b=w(p);return {ref:p,ownershipOf:b?.ownership?.of}}).filter(p=>typeof p.ownershipOf=="string"),l=[],d=await t.scallopSuiKit.queryGetObjects(c.map(p=>p.ownershipOf)),u=new Map(d.map(p=>[p.objectId,p]));return await Promise.allSettled(c.map(async({ref:p,ownershipOf:b})=>{let g=p.objectId;if(g){let f=b,m=u.get(f);if(!m)return;let y=await at(t,m);l.push({id:f,keyId:g,locked:y});}})),l},at=async({scallopSuiKit:t},e)=>{let a=typeof e=="string"?(await t.queryGetObject(e))?.object:e,o=false;return a&&(o=!!w(a)?.lock_key),o},ve=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 Promise.all([Q(e,{object:r,mutable:false,tx:o}),Q(e,{object:n,mutable:true,tx:o}),Q(e,{object:a,mutable:true,tx:o})]),u=[c,l,d,{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"}],p=await e.queryInspectTxn({queryTarget:i,args:u,txBlock:o,keys:T.rpc.getInspectTxn({queryTarget:i,args:[r,n,a],node:e.currentFullNode})});return (p?.Transaction??p?.FailedTransaction)?.events?.[0]?.parsedJson},la=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 ot({utils:t},r,o);s[r]=n;})),s},ot=async({utils:t},e,a)=>{let o=a??t.walletAddress,s=t.parseCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:o,coinType:s});return bignumber_js.BigNumber(r?.balance??"0").toNumber()},da=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 st({utils:t},r,o);s[r]=n;})),s},st=async({utils:t},e,a)=>{let o=a??t.walletAddress,s=t.parseMarketCoinType(e),r=await t.scallopSuiKit.queryGetCoinBalance({owner:o,coinType:s});return bignumber_js.BigNumber(r?.balance??"0").toNumber()},ua=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.json){let{name:d}=te(l),u=+w(l);c[r[d]]=u/a;}return c},{})},s};var Io=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean()}).transform(t=>({totalPoolReward:bignumber_js.BigNumber(t.balance).shiftedBy(-9).toNumber(),isClaimEnabled:t.enable_claim})),Ro=zod.z.string().transform(t=>bignumber_js.BigNumber(t).shiftedBy(-9).toNumber()),pa=async(t,e)=>{let a=t.address.get("loyaltyProgram.rewardPool"),s=(await t.scallopSuiKit.queryGetObject(a))?.object;if(!s)return null;let r=w(s),{isClaimEnabled:n,totalPoolReward:i}=Io.parse(r),c={pendingReward:0,totalPoolReward:i,isClaimEnabled:n};if(e=e??(await t.getVeScas())[0]?.keyId,!e)return c;let l=t.address.get("loyaltyProgram.userRewardTableId"),u=(await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:l,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}}).catch(()=>null))?.object;if(!u)return c;let p=w(u);return c.pendingReward=Ro.parse(p),c},jo=zod.z.object({reserve_ve_sca_key:zod.z.nullable(zod.z.object({id:zod.z.string()})),enable_claim:zod.z.boolean()}).transform(t=>({reserveVeScaKey:t.reserve_ve_sca_key?.id,isClaimEnabled:t.enable_claim})),vo=zod.z.string().transform(t=>bignumber_js.BigNumber(t).shiftedBy(-9).toNumber()),fa=async(t,e)=>{let a=t.address.get("veScaLoyaltyProgram.veScaRewardPool"),s=(await t.scallopSuiKit.queryGetObject(a))?.object;if(!s)return null;let r=w(s),n=jo.safeParse(r),{isClaimEnabled:i,reserveVeScaKey:c}=n.success?n.data:{isClaimEnabled:false,reserveVeScaKey:void 0},l={pendingVeScaReward:0,pendingScaReward:0,totalPoolReward:0,isClaimEnabled:i},d;if(c&&(d=await t.getVeSca(c),l.totalPoolReward=d?.currentVeScaBalance??0),e=e??(await t.getVeScas())[0]?.keyId,!e)return l;let u=t.address.get("veScaLoyaltyProgram.veScaRewardTableId"),b=(await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:u,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}}).catch(()=>null))?.object;if(!b)return l;let g=w(b),f=vo.safeParse(g);if(!f.success)return l;l.pendingScaReward=f.data;let m=Math.max((d?.unlockAt??0)-Date.now(),0);return l.pendingVeScaReward=l.pendingScaReward*(Math.floor(m/1e3)/126144e3),l};var ba=async(t,e=[...t.constants.whitelist.lending],a,o,s,r=false)=>{let n=e.map(b=>t.utils.parseMarketCoinName(b)),i=n.filter(b=>t.constants.whitelist.spool.has(b));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)]),p={};return await Promise.allSettled(e.map(async b=>{let g=i.find(m=>m===t.utils.parseMarketCoinName(b)),f=t.utils.parseMarketCoinName(b);p[b]=await nt(t,b,a,r,o?.[b],g?c[g]:void 0,g?u[g]:[],l?.[b],d?.[f],s?.[b]??0);})),p},nt=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 p=t.utils.getCoinDecimal(e),b=bignumber_js.BigNumber(0),g=bignumber_js.BigNumber(0),f=bignumber_js.BigNumber(0),m=bignumber_js.BigNumber(0),y=bignumber_js.BigNumber(0),h=bignumber_js.BigNumber(0),I=bignumber_js.BigNumber(0),k=bignumber_js.BigNumber(0),F=bignumber_js.BigNumber(0);if(r)for(let q of n){let v=bignumber_js.BigNumber(q.staked),N=v.shiftedBy(-1*r.coinDecimal),K=v.multipliedBy(s?.conversionRate??1),W=K.shiftedBy(-1*r.coinDecimal),z=W.multipliedBy(r.coinPrice);b=b.plus(v),g=g.plus(N),f=f.plus(K),m=m.plus(W),y=y.plus(z),h=h.plus(v),I=h.shiftedBy(-1*r.coinDecimal);let G=r.currentPointIndex?bignumber_js.BigNumber(r.currentPointIndex-q.index).dividedBy(1e9):1;k=k.plus(v.multipliedBy(G).plus(q.points).multipliedBy(r.exchangeRateNumerator).dividedBy(r.exchangeRateDenominator)),F=k.shiftedBy(-1*r.rewardCoinDecimal);}let _=bignumber_js.BigNumber(c).plus(bignumber_js.BigNumber(d)).multipliedBy(s?.conversionRate??1),A=_.shiftedBy(-1*p),E=A.multipliedBy(l??0),D=bignumber_js.BigNumber(l??0).multipliedBy(s?.conversionRate??1),M=bignumber_js.BigNumber(c).plus(bignumber_js.BigNumber(d)),$=M.shiftedBy(-1*p),x=bignumber_js.BigNumber(i),P=x.shiftedBy(-1*p),O=ue(_,s?.supplyAmount??1/0).plus(f),R=ue(A,s?.supplyCoin??1/0).plus(m);return {coinName:e,symbol:t.utils.parseSymbol(e),coinType:t.utils.parseCoinType(e),marketCoinType:t.utils.parseMarketCoinType(e),sCoinType:s?.sCoinType??"",coinDecimal:p,coinPrice:l??0,conversionRate:s?.conversionRate??1,marketCoinPrice:D.toNumber(),supplyApr:s?.supplyApr??0,supplyApy:s?.supplyApy??0,rewardApr:r?.rewardApr??0,suppliedAmount:_.plus(f).toNumber(),suppliedCoin:A.plus(m).toNumber(),suppliedValue:E.plus(y).toNumber(),stakedMarketAmount:b.toNumber(),stakedMarketCoin:g.toNumber(),stakedAmount:f.toNumber(),stakedCoin:m.toNumber(),stakedValue:y.toNumber(),unstakedMarketAmount:M.toNumber(),unstakedMarketCoin:$.toNumber(),unstakedAmount:_.toNumber(),unstakedCoin:A.toNumber(),unstakedValue:E.toNumber(),availableSupplyAmount:x.toNumber(),availableSupplyCoin:P.toNumber(),availableWithdrawAmount:O.toNumber(),availableWithdrawCoin:R.toNumber(),availableStakeAmount:M.toNumber(),availableStakeCoin:$.toNumber(),availableUnstakeAmount:h.toNumber(),availableUnstakeCoin:I.toNumber(),availableClaimAmount:k.toNumber(),availableClaimCoin:F.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 Ne(t,i[d]??l.id,e,s,a,o,r);})),c},ya=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={},p={},b=0,g=bignumber_js.BigNumber(0),f=bignumber_js.BigNumber(0),m=bignumber_js.BigNumber(0),y=0,h=0,I=bignumber_js.BigNumber(0),k=bignumber_js.BigNumber(0);for(let x of Array.from(t.constants.whitelist.collateral)){let P=i?.collaterals.find(v=>{let N=t.utils.parseCoinNameFromType(v.type.name);return x===N}),O=s.collaterals[x],R=t.utils.getCoinDecimal(x),B=r?.[x]??0,q=n?.[x]??0;if(O){let v=bignumber_js.BigNumber(P?.amount??0),N=v.shiftedBy(-1*R),K=N.multipliedBy(B),W=K.multipliedBy(O.collateralFactor),z=K.multipliedBy(O.liquidationFactor),U=bignumber_js.BigNumber(q),G=U.shiftedBy(-1*R);g=g.plus(K),f=f.plus(W),m=m.plus(z),v.isGreaterThan(0)&&b++,d[x]={coinName:x,coinType:t.utils.parseCoinType(x),symbol:t.utils.parseSymbol(x),coinDecimal:R,coinPrice:B,depositedAmount:v.toNumber(),depositedCoin:N.toNumber(),depositedValue:K.toNumber(),borrowCapacityValue:W.toNumber(),requiredCollateralValue:z.toNumber(),availableDepositAmount:U.toNumber(),availableDepositCoin:G.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let F=[...new Set([...Object.values(s.pools).filter(x=>!!x).map(x=>x.coinName)])];for(let[x,P]of Object.entries(l)){if(!P)continue;let O=x,R=c[O];if(R){let B=[];Object.entries(P.pointList).forEach(([q,v])=>{let N=R.points[t.utils.parseSCoinTypeNameToMarketCoinName(q)];if(v&&N){let K=bignumber_js.BigNumber(0),W=bignumber_js.BigNumber(0),z=bignumber_js.BigNumber(v.weightedAmount),G=N.currentPointIndex?Math.max(bignumber_js.BigNumber(N.currentPointIndex-v.index).dividedBy(1e9).toNumber(),0):1;K=K.plus(z.multipliedBy(G).plus(v.points)),W=K.shiftedBy(-1*N.coinDecimal);let oe=bignumber_js.BigNumber(1e12),Z=bignumber_js.BigNumber(N.baseWeight).dividedBy(oe),we=bignumber_js.BigNumber(v.weightedAmount).div(bignumber_js.BigNumber(P.debtAmount).multipliedBy(Z)).isFinite()?bignumber_js.BigNumber(v.weightedAmount).div(bignumber_js.BigNumber(P.debtAmount).multipliedBy(Z)).toNumber():1,It=isFinite(N.rewardApr)?N.rewardApr:0;K.isGreaterThanOrEqualTo(0)&&B.push({coinName:N.coinName,coinType:N.coinType,symbol:N.symbol,coinDecimal:N.coinDecimal,coinPrice:N.coinPrice,weightedBorrowAmount:z.toNumber(),availableClaimAmount:K.toNumber(),availableClaimCoin:W.toNumber(),baseRewardApr:It,boostedRewardApr:It*we,maxBoost:1/Z.toNumber(),boostValue:we});}}),Object.keys(R.points).some(q=>{let v=R.points[q]?.rewardApr;return v!==1/0&&typeof v=="number"&&v>0})&&P.debtAmount>0&&h++,p[O]={coinName:R.coinName,coinType:R.coinType,symbol:R.symbol,coinDecimal:R.coinDecimal,coinPrice:R.coinPrice,rewards:B};}}for(let x of F){let P=i?.debts.find(v=>{let N=t.utils.parseCoinNameFromType(v.type.name);return x===N}),O=s.pools[x],R=t.utils.getCoinDecimal(x),B=r?.[x]??0,q=n?.[x]??0;if(O){let v=P?.borrowIndex?O.borrowIndex/Number(P.borrowIndex)-1:0,N=bignumber_js.BigNumber(P?.amount??0).multipliedBy(v+1),K=N.shiftedBy(-1*R),W=N,z=W.shiftedBy(-1*R),U=bignumber_js.BigNumber(q),G=U.shiftedBy(-1*R),oe=z.multipliedBy(B),Z=oe.multipliedBy(O.borrowWeight);I=I.plus(oe),k=k.plus(Z),N.isGreaterThan(0)&&y++,u[x]={coinName:x,coinType:t.utils.parseCoinType(x),symbol:t.utils.parseSymbol(x),coinDecimal:R,coinPrice:B,borrowedAmount:N.toNumber(),borrowedCoin:K.toNumber(),borrowedValue:oe.toNumber(),borrowedValueWithWeight:Z.toNumber(),borrowIndex:Number(P?.borrowIndex??0),requiredRepayAmount:W.toNumber(),requiredRepayCoin:z.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:U.toNumber(),availableRepayCoin:G.toNumber(),rewards:(p[x]?.rewards??[]).filter(({weightedBorrowAmount:we})=>we>0)};}}let _=m.isZero()?k.isGreaterThan(0)?bignumber_js.BigNumber(100):bignumber_js.BigNumber(0):k.dividedBy(m);_=_.isLessThan(1)?_:bignumber_js.BigNumber(1);let A=g.minus(I).isGreaterThan(0)?g.minus(I):bignumber_js.BigNumber(0),E=f.minus(k).isGreaterThan(0)?f.minus(k):bignumber_js.BigNumber(0),D=k.isGreaterThan(0)?m:bignumber_js.BigNumber(0),M=k.minus(D).isGreaterThan(0)?k.minus(D):bignumber_js.BigNumber(0),$={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:g.toNumber(),totalBorrowedValue:I.toNumber(),totalBalanceValue:A.toNumber(),totalBorrowCapacityValue:f.toNumber(),totalAvailableCollateralValue:E.toNumber(),totalBorrowedValueWithWeight:k.toNumber(),totalRequiredCollateralValue:D.toNumber(),totalUnhealthyCollateralValue:M.toNumber(),totalRiskLevel:_.toNumber(),totalDepositedPools:b,totalBorrowedPools:y,totalRewardedPools:h,collaterals:d,debts:u,borrowIncentives:p};for(let[x,P]of Object.entries($.collaterals)){if(!P)continue;let O=s.collaterals[x];if(O){let R=bignumber_js.BigNumber($.totalAvailableCollateralValue).dividedBy(O.collateralFactor).dividedBy(O.coinPrice).shiftedBy(O.coinDecimal);R=$.totalBorrowedValueWithWeight===0?bignumber_js.BigNumber(P.depositedAmount):ue(R.multipliedBy(Ae(bignumber_js.BigNumber($.totalAvailableCollateralValue).dividedBy(O.collateralFactor).toNumber(),3,"increase")).toNumber(),P.depositedAmount,O.depositAmount),P.availableWithdrawAmount=R.toNumber(),P.availableWithdrawCoin=R.shiftedBy(-1*P.coinDecimal).toNumber();}}for(let[x,P]of Object.entries($.debts)){if(!P)continue;let O=s.pools[x];if(O){let R=bignumber_js.BigNumber(P.requiredRepayAmount).multipliedBy(Ae(P.borrowedValue,3,"decrease")),B=bignumber_js.BigNumber($.totalAvailableCollateralValue).dividedBy(O.borrowWeight).shiftedBy(O.coinDecimal).dividedBy(O.coinPrice);B=$.totalAvailableCollateralValue!==0&&bignumber_js.BigNumber(O.maxBorrowCoin).isGreaterThan(O.borrowCoin)?ue(B.multipliedBy(Ae(B.shiftedBy(-1*O.coinDecimal).multipliedBy(O.coinPrice).toNumber(),3,"increase")).toNumber(),O.supplyAmount):bignumber_js.BigNumber(0),P.availableBorrowAmount=B.toNumber(),P.availableBorrowCoin=B.shiftedBy(-1*P.coinDecimal).toNumber(),P.requiredRepayAmount=R.toNumber(),P.requiredRepayCoin=R.shiftedBy(-1*P.coinDecimal).toNumber();}}return $},ga=async(t,e=false)=>{let a=bignumber_js.BigNumber(0),o=bignumber_js.BigNumber(0),s=bignumber_js.BigNumber(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(bignumber_js.BigNumber(i.supplyCoin).multipliedBy(i.coinPrice)),s=s.plus(bignumber_js.BigNumber(i.borrowCoin).multipliedBy(i.coinPrice)));for(let i of Object.values(r.collaterals))i&&(o=o.plus(bignumber_js.BigNumber(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()}},ha=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(f=>!!f&&f.availableWithdrawCoin>0).map(f=>({suppliedCoin:f.availableWithdrawCoin,suppliedValue:f.suppliedValue,stakedCoin:f.availableUnstakeCoin,coinName:f.coinName,symbol:f.symbol,coinType:f.coinType,coinPrice:f.coinPrice,coinDecimals:f.coinDecimal,supplyApr:f.supplyApr,supplyApy:f.supplyApy,incentiveApr:isFinite(f.rewardApr)?f.rewardApr:0})),l=Object.values(n).filter(f=>!!f&&(f.totalBorrowedValueWithWeight>0||f.totalDepositedValue>0)).map(f=>({obligationId:f.obligationId,totalDebtsInUsd:f.totalBorrowedValueWithWeight,totalCollateralInUsd:f.totalDepositedValue,riskLevel:f.totalRiskLevel,availableCollateralInUsd:f.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:f.totalUnhealthyCollateralValue,collaterals:Object.values(f.collaterals).filter(m=>!!m&&m.depositedCoin>0).map(m=>({coinName:m.coinName,symbol:m.symbol,coinDecimals:m.coinDecimal,coinType:m.coinType,coinPrice:m.coinPrice,depositedCoin:m.depositedCoin,depositedValueInUsd:m.depositedValue})),borrowedPools:Object.values(f.debts).filter(m=>!!m&&m.borrowedCoin>0).map(m=>({coinName:m.coinName,symbol:m.symbol,coinDecimals:m.coinDecimal,coinType:m.coinType,coinPrice:m.coinPrice,borrowedCoin:m.borrowedCoin,borrowedValueInUsd:m.borrowedValueWithWeight,borrowApr:s.pools[m.coinName]?.borrowApr,borrowApy:s.pools[m.coinName]?.borrowApy,incentiveInfos:(f.borrowIncentives[m.coinName]?.rewards??[]).filter(y=>!!y&&isFinite(y.baseRewardApr)).map(y=>({coinName:y.coinName,symbol:y.symbol,coinType:y.coinType,boostValue:y.boostValue,maxBoost:y.maxBoost,incentiveApr:y.baseRewardApr,boostedIncentiveApr:y.boostedRewardApr}))}))})),d="sui",u="SUI",p=Object.values(r).reduce((f,m)=>{if(m){if(m.availableClaimCoin===0)return f;f[d]?f[d].pendingRewardInCoin+=m.availableClaimCoin:f[d]={symbol:u,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:o[d]??0,pendingRewardInCoin:m.availableClaimCoin};}return f},{}),b=Object.values(n).filter(f=>!!f).reduce((f,m)=>(Object.values(m.borrowIncentives).forEach(y=>{y?.rewards.forEach(h=>{if(h.availableClaimCoin===0)return f;f[h.coinName]?f[h.coinName].pendingRewardInCoin+=h.availableClaimCoin:f[h.coinName]={symbol:h.symbol,coinType:h.coinType,coinPrice:h.coinPrice,pendingRewardInCoin:h.availableClaimCoin};});}),f),{}),g=i.map(({keyId:f,lockedScaCoin:m,currentVeScaBalance:y,unlockAt:h})=>({veScaKey:f,coinPrice:o.sca??0,lockedScaInCoin:m,lockedScaInUsd:m*(o.sca??0),currentVeScaBalance:y,remainingLockPeriodInDays:h-Date.now()>0?(h-Date.now())/864e5:0,unlockAt:h}));return {totalSupplyValue:c.reduce((f,m)=>(f+=m.suppliedValue,f),0),...l.reduce((f,m)=>(f.totalDebtValue+=m.totalDebtsInUsd,f.totalCollateralValue+=m.totalCollateralInUsd,f),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:g.reduce((f,m)=>(f+=m.lockedScaInUsd,f),0),lendings:c,borrowings:l,pendingRewards:{lendings:Object.entries(p).reduce((f,[m,y])=>(f.push({...y,coinName:"sui",pendingRewardInUsd:y.coinPrice*y.pendingRewardInCoin}),f),[]),borrowIncentives:Object.entries(b).reduce((f,[m,y])=>(f.push({coinName:m,...y,pendingRewardInUsd:y.coinPrice*y.pendingRewardInCoin}),f),[])},veScas:g}};var Sa=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]=bignumber_js.BigNumber(a[n]??0).multipliedBy(e[n]?.conversionRate??1).toNumber();}),{...a,...s}};var wa=async({address:t,scallopSuiKit:e},a)=>{let o=t.get("referral.bindingTableId"),r=(await e.queryGetDynamicFieldObject({parentId:o,name:{type:"address",value:a}}))?.object;if(!r)return null;let n=w(r);if(typeof n=="string")return n;if(n&&typeof n=="object"){let i=n;if(typeof i.id=="string")return i.id;let c=i.id?.id;if(typeof c=="string")return c}return null};var Ca=async({utils:t},e)=>{let a=new suiKit.SuiTxBlock,o=t.address.get("scoin.id"),s=t.getSCoinTreasury(e),n=[await Q(t.scallopSuiKit,{tx:a,object:s})],i=[t.parseSCoinType(e),t.parseUnderlyingSCoinType(e)],c=`${o}::s_coin_converter::total_supply`,l=await t.scallopSuiKit.queryInspectTxn({queryTarget:c,args:n,typeArgs:i,txBlock:a,keys:T.rpc.getInspectTxn({queryTarget:c,args:[s],node:t.scallopSuiKit.currentFullNode})});if(!l||l.$kind!=="Transaction")return 0;let d=l.commandResults;if(d&&d[0]?.returnValues&&d[0].returnValues[0]){let u=d[0].returnValues[0].bcs;return bignumber_js.BigNumber(bcs.bcs.u64().parse(u)).shiftedBy(t.getCoinDecimal(t.parseCoinName(e))).toNumber()}return 0},ka=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 ct({utils:t},r,o);s[r]=n;})),s},ct=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 bignumber_js.BigNumber(r?.balance??"0").toNumber()},Mo=(t,e,a)=>{if(e===a)throw new Error("fromAsset and toAsset must be different");if(!t.constants.whitelist.scoin.has(e))throw new Error("fromAsset is not supported");if(!t.constants.whitelist.scoin.has(a))throw new Error("toAsset is not supported")},Ta=async(t,e,a,o)=>{Mo(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]||u[s]===0||u[r]===0){let p=await t.getCoinPricesByIndexer().catch(()=>({}));u={...u,...p};}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 bignumber_js.BigNumber(i).multipliedBy(d).multipliedBy(c).toNumber()};var Aa=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},Ko=({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}},xa=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),p=t.utils.getSpoolRewardCoinName();d.coinPrice=s[u]??d.coinPrice,d.marketCoinPrice=s[d.marketCoinName]??d.marketCoinPrice,d.rewardCoinPrice=s[p]??d.rewardCoinPrice,n[d.marketCoinName]=d;};return Object.values(c).filter(d=>!!d).forEach(l),n}let i=await Aa(t,r);return await Promise.allSettled(e.map(async(c,l)=>{try{let d=r[l],u=await Lo(t,c,a,s,i[d]);u&&(n[c]=u);}catch(d){console.error(d);}})),n},Lo=async(t,e,a=false,o,s)=>{let r=t.utils.parseCoinName(e);if(o=o||await t.getAllCoinPrices(),a){let m=await t.indexer.getSpool(e),y=t.utils.parseCoinName(e),h=t.utils.getSpoolRewardCoinName();return m.coinPrice=o?.[y]??m.coinPrice,m.marketCoinPrice=o?.[e]??m.marketCoinPrice,m.rewardCoinPrice=o?.[h]??m.rewardCoinPrice,m}s??=(await Aa(t,[r]))[r];let n=t.utils.getSpoolRewardCoinName();o=o||await t.utils.getCoinPrices();let i=Ko(s),c=Ft(i),l=o?.[e]??0,d=t.utils.getCoinDecimal(e),u=Mt(c,l,d),p=Kt(i),b=o?.[n]??0,g=t.utils.getCoinDecimal(n),f=Lt(c,p,u,b,g);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:b,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:p.exchangeRateNumerator,exchangeRateDenominator:p.exchangeRateDenominator,...f}},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:{json:true},cursor:i,limit:50});if(!u)break;u.objects&&r.push(...u.objects),u.hasNextPage&&u.cursor?(n=true,i=u.cursor):n=false;}while(n);let c=[...t.constants.whitelist.spool].reduce((u,p)=>(u[p]=[],u),{}),l=Object.keys(c).reduce((u,p)=>{let b=t.parseCoinName(p),g=t.parseMarketCoinType(b);return u[p]=`${o}::spool_account::SpoolAccount<${g}>`,u},{}),d=Object.entries(l).reduce((u,[p,b])=>(u[b]=p,u),{});for(let u of r){let p=u?.objectId,b=u?.type;if(p&&u?.json){let g=w(u),f=String(g.spool_id),m=String(g.stake_type),y=Number(g.stakes),h=Number(g.index),I=Number(g.points),k=Number(g.total_points),F={sweth:c.sweth,ssui:c.ssui,swusdc:c.swusdc,swusdt:c.swusdt,scetus:c.scetus,safsui:c.safsui,shasui:c.shasui,svsui:c.svsui,susdc:c.susdc},_=utils.normalizeStructTag(b),A=F[d[_]];A&&A.push({id:p,type:_,stakePoolId:f,stakeType:utils.normalizeStructTag(m),staked:y,index:h,points:I,totalPoints:k});}}return c},lt=async({utils:t},e)=>{let a=t.address.get(`spool.pools.${e}.id`),o,s=await t.scallopSuiKit.queryGetObject(a);if(s?.object){let r=s.object,n=r.objectId,i=r.type;if(r.json){let c=w(r),l=Number(c.max_distributed_point),d=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),b=Number(c.max_stakes),g=String(c.stake_type),f=Number(c.stakes),m=Number(c.index),y=Number(c.created_at),h=Number(c.last_update);o={id:n,type:utils.normalizeStructTag(i),maxPoint:l,distributedPoint:d,pointPerPeriod:u,period:p,maxStake:b,stakeType:utils.normalizeStructTag(g),totalStaked:f,index:m,createdAt:y,lastUpdate:h};}}return o},dt=async({utils:t},e)=>{let a=t.address.get(`spool.pools.${e}.rewardPoolId`),o,s=await t.scallopSuiKit.queryGetObject(a);if(s?.object){let r=s.object,n=r.objectId,i=r.type;if(r.json){let c=w(r),l=String(c.spool_id),d=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),b=Number(c.claimed_rewards);o={id:n,type:utils.normalizeStructTag(i),stakePoolId:l,ratioNumerator:d,ratioDenominator:u,rewards:p,claimedRewards:b};}}return o};var qo=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},options:{json:true},cursor:i,limit:50});if(!l)break;l.objects&&r.push(...l.objects),l.hasNextPage&&l.cursor?(n=true,i=l.cursor):n=false;}while(n);return r.filter(l=>!!l)},Be=async({utils:t},e,a)=>{let o=await qo(t,e),s=Array(o.length).fill(null),r=o.map(async(i,c)=>{let l=await ne(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},Qo=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),ne=async(t,e)=>{let a=t.address.get("vesca.tableId");if(!e)return;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.object;if(r){let n=w(r),i=Math.max(+n.unlock_at*1e3-Date.now(),0),c=String(n.locked_sca_amount),l=bignumber_js.BigNumber(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:Qo.parse(r),lockedScaAmount:c,lockedScaCoin:l,currentVeScaBalance:d,unlockAt:bignumber_js.BigNumber(Number(n.unlock_at)*1e3).toNumber()};}return o},$o=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 Promise.all([Q(t.scallopSuiKit,{object:typeof e=="string"?e:e.objectId,tx:s,mutable:true}),Q(t.scallopSuiKit,{object:o,tx:s,mutable:false})]),c=`${a}::treasury::refresh`,l=[i,n,r],d=`${a}::treasury::total_ve_sca_amount`,u=[n,r],p=await Promise.all(l.map(async h=>typeof h=="string"?(await t.scallopSuiKit.queryGetObject(h))?.object:h)),b=await Promise.all(u.map(async h=>typeof h=="string"?(await t.scallopSuiKit.queryGetObject(h))?.object:h));s.moveCall(c,p),s.moveCall(d,b);let g=t.suiKit.currentAddress||"0x0000000000000000000000000000000000000000000000000000000000000000";s.txBlock.setSender(g),s.txBlock.setGasBudget(50000000000n),s.txBlock.setGasPayment([]);let f=await s.txBlock.build({client:t.suiKit.client}),m=null;try{m=await t.scallopSuiKit.queryClient.fetchQuery({queryKey:T.rpc.getTotalVeScaTreasuryAmount({refreshArgs:l,vescaAmountArgs:u,node:t.scallopSuiKit.currentFullNode}),queryFn:async()=>await t.suiKit.inspectTxn(f)});}catch{return "0"}if(!m||m.$kind!=="Transaction")return "0";let y=m.commandResults;if(y&&y[1]?.returnValues&&y[1].returnValues[0]){let h=y[1].returnValues[0].bcs;return bcs.bcs.u64().parse(h)}return "0"},Pa=async t=>{let e=t.address.get("vesca.treasury"),o=(await t.scallopSuiKit.queryGetObject(e))?.object;if(!o)return null;let r=w(o)?.unlock_schedule?.locked_sca_amount??"0",n=bignumber_js.BigNumber(r).shiftedBy(-9).toNumber(),i=bignumber_js.BigNumber(await $o(t,o)??0).shiftedBy(-9).toNumber(),c=n>0?i/n*4:0;return {totalLockedSca:n,totalVeSca:i,averageLockingPeriod:c,averageLockingPeriodUnit:"year"}};var Wo=async(t,e,a="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let o=null,s=false,r={};do{let n=await t.core.listDynamicFields({parentId:a,limit:50,cursor:o});if(!n)break;n.dynamicFields.forEach(c=>{let l=c.name.bcs,u=`0x${bcs.bcs.struct("TypeName",{name:bcs.bcs.string()}).parse(l).name}`;e.has(u)&&(r[u]=c.fieldId);}),s=n.hasNextPage,o=n.cursor;}while(s);return r},X=async(t,e,a,o,s=true)=>{let r=Ie({type:a,value:o});try{let{dynamicField:n}=await t.core.getDynamicField({parentId:e,name:r}),{object:i}=await t.core.getObject({objectId:n.fieldId,include:{json:!0}});return i?s?i.objectId:i.json:void 0}catch(n){if(n instanceof Error&&n.message.toLowerCase().includes("not found"))return;throw n}},Ia=async(t,e,a=[])=>{let o=new Set(a),s={},n=(await fetch(`https://sui.apis.scallop.io/addresses/${e}`).then(A=>A.json())).mainnet;if(!n)throw new Error("Failed to fetch addresses");let i=Object.keys(n.core.coins);if(i.length===0)throw new Error("Pools empty");let c=i.reduce((A,E)=>{if(o.size>0&&!o.has(E))return A;let D=n.core.coins[E];return D&&D.coinType&&A.push([E,D.coinType]),A},[]);if(c.length===0)throw new Error("No coinTypesPairs");let l=n.core.market,d=(await t.core.getObject({objectId:l,include:{json:true}}))?.object;if(!(d&&d.json))throw new Error("Failed to fetch marketObject");let u=w(d),p=u.vault.balance_sheets.table.id.id,b=u.collateral_stats.table.id.id,g=u.borrow_dynamics.table.id.id,f=u.interest_models.table.id.id,m=u.risk_models.table.id.id,y="0x1::type_name::TypeName",h="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",I="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",k="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",F="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",_=await Wo(t,new Set(c.map(([,A])=>A)));return await Promise.all(c.map(async([A,E])=>{let D=E.slice(2),M=await Promise.all([X(t,p,y,{name:D},true),X(t,b,y,{name:D},true),X(t,g,y,{name:D},true),X(t,f,y,{name:D},true),X(t,m,y,{name:D},true),X(t,l,h,D,true),X(t,l,I,D,true),X(t,l,k,D,true),X(t,l,F,D,false)]),{symbol:$,metaData:x}=n.core.coins[A],P={spool:"",spoolReward:""},O=n.spool.pools[`s${A}`];if(O){let{id:U,rewardPoolId:G}=O;P={spool:U,spoolReward:G};}let R={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},B=`s${A}`,q=n.scoin.coins[B];if(q){let{coinType:U,treasury:G,metaData:oe,symbol:Z}=q;R={sCoinType:U,sCoinTreasury:G,sCoinMetadataId:oe,sCoinSymbol:Z};}let v={pythFeed:"",pythFeedObjectId:""};if(n.core.coins[A]?.oracle.pyth){let{feed:U,feedObject:G}=n.core.coins[A].oracle.pyth;v={pythFeed:U,pythFeedObjectId:G};}let{feed:N,feedObject:K}=n.core.coins[A].oracle.pyth,W=(await t.core.getCoinMetadata({coinType:E}))?.coinMetadata?.decimals??0,z=P?`s${A}`:void 0;s[A]={coinName:A,symbol:$,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]?.id??"",isIsolated:M[8]?.value??false,...P,...R,sCoinName:B,coinMetadataId:x,coinType:E,spoolName:z,decimals:W,...v,flashloanFeeObject:_[E]??""},await new Promise(U=>setTimeout(U,1e3));})),s};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)}},u=(await t.scallopSuiKit.queryGetDynamicFieldObject({parentId:a,name:l}))?.object;if(!u?.json)throw new Error(`No on-demand aggregator found for ${i}`);s[o[c].idx]=w(u);})),s};var va=async({address:t,scallopSuiKit:e})=>{let a=`${t.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,o=bcs.bcs.struct("TypeName",{dummy_field:bcs.bcs.bool()}).serialize({dummy_field:false}).toBytes(),[s,r]=await Promise.all([e.queryGetDynamicFieldObject({parentId:t.get("core.oracles.primaryPriceUpdatePolicyObject"),name:{type:a,bcs:o}}),e.queryGetDynamicFieldObject({parentId:t.get("core.oracles.secondaryPriceUpdatePolicyObject"),name:{type:a,bcs:o}})]);return {primary:s,secondary:r}},ut=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:50});if(!r)break;let{dynamicFields:n,hasNextPage:i,cursor:c}=r;s=c;let l=n.map(u=>u.fieldId);if((await t.scallopSuiKit.queryGetObjects(l)).forEach(u=>{let p=w(u),b=te(u);if(b.nameKind!=="type"){console.error("Unsupported dynamic field key kind for oracle mapping",{objectId:u.objectId,name:b.name,nameKind:b.nameKind});return}let g=b.name.startsWith("0x")?b.name:`0x${b.name}`,f=t.parseCoinNameFromType(g);if(!f)throw new Error(`Invalid asset name: ${f}`);o[f]||(o[f]=[]),(p.contents??[]).forEach(m=>{o[f].push(a[`0x${m.name}`]);});}),!i)break}while(s);return o};var pt=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 p=await this.getPriceFeedObjectId(u);if(!p)throw new Error(`Price feed object not found for ID: ${u}`);l.push(p);}let d=a.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});for(let u=0;u<l.length;u++){let p=l[u];[c]=a.moveCall({target:`${r}::pyth_sponsor::update_single_price_feed_with_sponsor`,arguments:[a.object(this.pythStateId),c,a.object(p),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=(()=>{try{return t.suiKit.suiInteractor.currentFullNode}catch{return jsonRpc.getJsonRpcFullnodeUrl("mainnet")}})(),r=t.suiKit.client.network,n=new jsonRpc.SuiJsonRpcClient({url:s,network:r}),i=new pt(n,t.address.get("core.oracles.pyth.state"),t.address.get("core.oracles.pyth.wormholeState"),{defaultPackageId:"0xa6f9bec2f9748656b6af8aafb5d7bc1a0d5faf25ac9645fc7f447822cd509325",gasStationId:"0xa8b8dcc9880166edb57b53e05f8df7364d31b5d9b7d107fd27f0b69cf338b687"}),c=Array.from(new Set(e.map(d=>t.address.get(`core.coins.${d}.oracle.pyth.feed`)))),l=t.utils.pythEndpoints??[...t.constants.whitelist.pythEndpoints];for(let d of l)try{let p=await new pythSuiJs.SuiPriceServiceConnection(d,{priceFeedRequestConfig:{binary:!0}}).getPriceFeedsUpdateData(c);o?await i.updatePriceFeedsWithSponsoredBaseUpdateFee(a.txBlock,p,c):await i.updatePriceFeeds(a.txBlock,p,c);return}catch(u){console.warn(`Failed to update price feeds with endpoint ${d}: ${u}`);}};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(b=>t.constants.whitelist.lending.has(b)?true:(console.error(`Sponsored feed ${b} is not in the whitelist lending assets.`),false))),i=o?.isSponsoredTx??false,c=r?await t.query.getAssetOracles():Nt,l=new Set(Object.values(c).flatMap(({primary:b,secondary:g})=>[...b,...g])),d=(b,g)=>{let f=c[b];return f&&(f.primary.includes(g)||f.secondary.includes(g))},u=[...new Set(a)],p=u.filter(b=>d(b,"pyth"));if(l.has("pyth")){let b=[];for(let g of p){let f=!s&&!n.has(g);(s||f)&&b.push(g);}b.length>0&&await Na(t,b,e,i);}for(let b of u)Xo(t,e,b,c[b]);},Xo=(t,e,a,o)=>{let s=t.utils.parseCoinType(a);Zo(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);},Zo=(t,e,a,o,s,r,n,i,c,l,d,u,p,b,g)=>{let f=y=>typeof y=="string"?t.object(y):y;o=f(o),r=f(r),n=f(n),i=f(i),l=f(l),d=f(d),p=f(p),b=f(b);let m=es(t,a,o,g);return Object.entries(e).forEach(([y,h])=>{h.includes("pyth")&&ss(y,t,s,m,n,i,r,g),h.includes("supra")&&as(y,t,u,m,b,p,g),h.includes("switchboard")&&os(y,t,c,m,d,l,g);}),ts(t,a,o,m,g),t},es=(t,e,a,o)=>{let s=`${e}::x_oracle::price_update_request`,r=[o];return t.moveCall(s,[a],r)},ts=(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},as=(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]);},os=(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]);},ss=(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 me=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}},is=({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"}),n=(c,l,d)=>{let u=t.utils.parseCoinType(d);t.moveCall(e,`${a.protocolPkg}::deposit_collateral::deposit_collateral`,[a.version,c,a.market,l],[u]);},i=(c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::mint::mint`,[a.version,a.market,c,r],[d])};return {openObligation:()=>{let[c,l,d]=t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation`,[a.version]);return [c,l,d]},returnObligation:(c,l)=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::return_obligation`,[a.version,c,l]);},openObligationEntry:()=>{t.moveCall(e,`${a.protocolPkg}::open_obligation::open_obligation_entry`,[a.version]);},addCollateral:n,depositCollateral:n,takeCollateral:(c,l,d,u)=>{let p=t.utils.parseCoinType(u);return t.moveCall(e,`${a.protocolPkg}::withdraw_collateral::withdraw_collateral`,[a.version,c,l,a.market,a.coinDecimalsRegistry,e.pure.u64(d),a.xOracle,r],[p])},deposit:i,supply:i,depositEntry:(c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::mint::mint_entry`,[a.version,a.market,c,r],[d])},withdraw:(c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem`,[a.version,a.market,c,r],[d])},withdrawEntry:(c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::redeem::redeem_entry`,[a.version,a.market,c,r],[d])},borrow:(c,l,d,u)=>{let p=t.utils.parseCoinType(u);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow`,[a.version,c,l,a.market,a.coinDecimalsRegistry,d,a.xOracle,r],[p])},borrowWithReferral:(c,l,d,u,p)=>{let b=t.utils.parseCoinType(p);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_with_referral`,[a.version,c,l,a.market,a.coinDecimalsRegistry,d,typeof u=="number"?e.pure.u64(u):u,a.xOracle,r],[b,s])},borrowEntry:(c,l,d,u)=>{let p=t.utils.parseCoinType(u);return t.moveCall(e,`${a.protocolPkg}::borrow::borrow_entry`,[a.version,c,l,a.market,a.coinDecimalsRegistry,e.pure.u64(d),a.xOracle,r],[p])},repay:(c,l,d)=>{let u=t.utils.parseCoinType(d);t.moveCall(e,`${a.protocolPkg}::repay::repay`,[a.version,c,a.market,l,r],[u]);},borrowFlashLoan:(c,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${a.protocolPkg}::flash_loan::borrow_flash_loan`,[a.version,a.market,c],[d])},repayFlashLoan:(c,l,d)=>{let u=t.utils.parseCoinType(d);t.moveCall(e,`${a.protocolPkg}::flash_loan::repay_flash_loan`,[a.version,a.market,c,l],[u]);},liquidate:(c,l,d,u)=>{let p=t.utils.parseCoinType(d),b=t.utils.parseCoinType(u),[g,f]=t.moveCall(e,`${a.protocolPkg}::liquidate::liquidate`,[a.version,c,a.market,l,a.coinDecimalsRegistry,a.xOracle,r],[p,b]);return [g,f]}}},cs=({builder:t,txBlock:e})=>{let a=async(s,r,n=true,i=false)=>{let c=j(e),{leftCoin:l,takeCoin:d}=await t.selectCoin(e,r,s,c,i);l&&e.transferObjects([l],c);let u=e.supply(d,r);return n?e.mintSCoin(t.utils.parseMarketCoinName(r),u):u},o=async(s,r,n,i=false)=>{let c=j(e),{obligationId:l}=await me(t,e,n),{takeCoin:d,leftCoin:u}=await t.selectCoin(e,r,s,c,i);u&&e.transferObjects([u],c),e.depositCollateral(l,d,r);};return {addCollateralQuick:o,depositCollateralQuick:o,takeCollateralQuick:async(s,r,n,i,c)=>{let l=await me(t,e,n,i),d=await t.utils.getObligationCoinNames(l.obligationId);return await ce(t,e,d,c),e.takeCollateral(l.obligationId,l.obligationKey,s,r)},depositQuick:a,supplyQuick:a,withdrawQuick:async(s,r)=>{let n=j(e),i=t.utils.parseSCoinName(r);if(!i)throw new Error(`No sCoin for ${r}`);let{sCoin:c,marketCoin:l}=await t.selectSCoinOrMarketCoin(e,i,s,n);if(c){let d=e.burnSCoin(i,c);l?e.mergeCoins(l,[d]):l=d;}if(!l)throw new Error(`No market coin for ${r}`);return e.withdraw(l,r)},borrowQuick:async(s,r,n,i,c)=>{let l=await me(t,e,n,i),u=[...await t.utils.getObligationCoinNames(l.obligationId)??[],r];return await ce(t,e,u,c),e.borrow(l.obligationId,l.obligationKey,s,r)},borrowWithReferralQuick:async(s,r,n,i,c,l)=>{let d=await me(t,e,i,c),p=[...await t.utils.getObligationCoinNames(d.obligationId)??[],r];return await ce(t,e,p,l),e.borrowWithReferral(d.obligationId,d.obligationKey,n,s,r)},repayQuick:async(s,r,n,i=false)=>{let c=j(e),l=await me(t,e,n),{leftCoin:d,takeCoin:u}=await t.selectCoin(e,r,s,c,i);return d&&e.transferObjects([d],c),e.repay(l.obligationId,u,r)},updateAssetPricesQuick:async(s,r)=>await ce(t,e,s,r),liquidateQuick:async(s,r,n,i,c)=>{let l=j(e),d=await t.utils.getObligationCoinNames(i);await ce(t,e,d,c);let{takeCoin:u,leftCoin:p}=await t.selectCoin(e,r,s,l,c?.isSponsoredTx??false);p&&e.transferObjects([p],l);let b=typeof i=="string"?e.object(i):i;return e.liquidate(b,u,r,n)}}},Da=(t,e)=>{let a=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,o=is({builder:t,txBlock:a}),s=new Proxy(a,{get:(n,i)=>i in o?Reflect.get(o,i):Reflect.get(n,i)}),r=cs({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Fa=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)},us=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]},Ma=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}},ps=({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])}}},fs=({builder:t,txBlock:e})=>({stakeQuick:async(a,o,s)=>{let r=j(e),n=await Fa(t,e,o,s);if(n.length===0)throw new Error(`No stakeAccountIds found for user ${r}`);if(typeof a=="number"){let i=await Ma(t,e,n[0],o,a,r);a-=i,a>0&&await Ma(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 us(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 Fa(t,e,a,o),r=[];for(let n of s){let i=await e.claim(n,a);r.push(i);}return r}}),Ka=(t,e)=>{let a=e instanceof transactions.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 Me=async(...t)=>{let[e,a,o,s]=t;if(t.length===4&&o&&s&&typeof o=="string"){let c=await at(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}},ys=({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]);}}},gs=({builder:t,txBlock:e})=>({stakeObligationQuick:async(a,o)=>{let{obligationId:s,obligationKey:r,obligationLocked:n}=await Me(t,e,a,o),i=!!e.txBlock.getData().commands.find(c=>c.$kind==="MoveCall"&&(H(c)===`${Ge}::user::unstake`||H(c)===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||H(c)===`${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 Me(t,e,a,o),c=!!e.txBlock.getData().commands.find(l=>l.$kind==="MoveCall"&&(H(l)===`${Ge}::user::unstake`||H(l)===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||H(l)===`${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 Me(t,e,a,o);n&&e.unstakeObligation(s,r);},claimBorrowIncentiveQuick:async(a,o,s)=>{let{obligationId:r,obligationKey:n}=await Me(t,e,o,s);return e.claimBorrowIncentive(r,n,a)}}),Va=(t,e)=>{let a=e instanceof transactions.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 ye=async(...t)=>{let[e,a,o]=t;if(t.length===3&&o&&typeof o<"u"){let n=await ne(e.utils,o);return n||void 0}let s=j(a),r=await Be(e,s);if(r.length!==0)return o?r.find(({keyId:n})=>(typeof o=="string"?o:o.objectId)===n):r[0]},ft=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?.object?.json)return !1;let r=w(s.object);return Array.isArray(r?.contents)&&r.contents.length>0}catch(s){return console.error(s),false}},Ss=({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"})],[])}},ws=({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 b=await t.utils.selectCoins(a,Ce,n),[g,f]=e.takeAmountFromCoins(b,a);c=g,l.push(f);}else c=a;let d=t.utils.getUnlockAt(o,i?.unlockAt);s&&_t(a,o,d,i?.unlockAt);let u=!i,p=!u&&i.unlockAt<=new Date().getTime();if(u||p){if(c)if(u){let b=e.lockSca(c,d);l.push(b);}else {if(i.lockedScaCoin!==0){let b=e.redeemSca(i.keyId);l.push(b);}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&&Xe(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&&Bt(a,o,i?.unlockAt),i){let l=[];if(i.lockedScaCoin!==0){let b=e.redeemSca(i.keyId);l.push(b);}let d=await t.utils.selectCoins(a,Ce,n),[u,p]=e.takeAmountFromCoins(d,a);l.push(p),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 ft(t,o,t.address.get("vesca.subsTable")),n=!!e.txBlock.getData().commands.find(c=>c.$kind==="MoveCall"&&H(c)===`${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([ft(t,a,s),ft(t,o,s)]),i=!!e.txBlock.getData().commands.find(d=>d.$kind==="MoveCall"&&H(d)===`${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([ne(t.utils,o),ne(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)}}),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({builder:t,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={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])}},As=({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);}}),$a=(t,e)=>{let a=e instanceof suiKit.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=As({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("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])}},Os=({builder:t,txBlock:e})=>({claimLoyaltyRevenueQuick:async a=>{a=a??(await t.query.getVeScas())[0]?.keyId;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]?.keyId;let o=j(e);if(!a)throw new Error(`No veScaKey found for user ${o}`);let s=e.claimVeScaLoyaltyReward(a);e.transferObjects([s],o);}}),Ga=(t,e)=>{let a=e instanceof transactions.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=Os({builder:t,txBlock:s});return new Proxy(s,{get:(n,i)=>i in r?Reflect.get(r,i):Reflect.get(n,i)})};var Rs=({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)])}}},js=({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)}}),Ja=(t,e)=>{let a=e instanceof suiKit.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=js({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=qa(t,e),o=Ga(t,a),s=Va(t,o),r=$a(t,s),n=Ja(t,r),i=Ka(t,n),c=Da(t,i);return new Proxy(c,{get:(l,d)=>d in a?Reflect.get(a,d):d in s?Reflect.get(s,d):d in r?Reflect.get(r,d):d in i?Reflect.get(i,d):d in o?Reflect.get(o,d):d in n?Reflect.get(n,d):Reflect.get(l,d)})};var bt=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 Rt}},ge=bt;var mt=class extends ge{axiosInstance;constructor(e={}){super(e),this.axiosInstance=e.axiosInstance??Ns__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=mt;var yt={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:""}}}},gt=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)||yt;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??[jt]).map(n=>`${pe(n)}/addresses/${a}`);for(let n of r)try{return await this.readApi({url:n,queryKey:T.api.getAddresses({addressId:a})})}catch(i){console.error(`${i}`);}return {id:"",mainnet:this.defaultValues?.addresses?.mainnet??yt}})(),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)||yt;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[p,b]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(p)&&(p===this.network&&(this.currentAddresses=b),this.addressMap.set(p,b));return this.addressId=u.data.id,this.getAllAddresses()}else throw Error("Failed to update addresses.")}else throw Error("You don't have permission to access this request.")}async delete(e,a){let 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.")}},Ke=gt;var Ya=t=>Object.keys(t).length===0,ht={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},Ds=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),{}),St=class extends Ke{constructor(a={}){super(a);this.params=a;}_poolAddresses={};_whitelist=ht;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()&&!Ya(this.poolAddresses)&&a.every(o=>this.whitelist[o].size>0)}get whitelist(){return new Proxy(this._whitelist,{get:(a,o)=>a[o]??ht[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&&!Ya(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=Ds(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,p=i[u];return l[u]=p instanceof Set?p:Array.isArray(p)?new Set(p):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(([p,b])=>[p,typeof b=="boolean"?b??false:b||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:T.api.getWhiteList()})}catch(r){console.error(`${r}`);}return this.defaultValues?.whitelist??ht})();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:T.api.getPoolAddresses()})}catch(s){console.error(`${s}`);}return this.defaultValues?.poolAddresses??{}}},Le=St;var Xa=t=>{let e;return "suiClients"in t&&t.suiClients&&t.suiClients?.length>0?e={suiClients:t.suiClients}:e={fullnodeUrls:"fullnodeUrls"in t?t?.fullnodeUrls??ze:ze},new suiKit.SuiKit({...t,...e})};var 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 Ls=10,Ve=(t,e)=>{let a={...t};for(let o in e)e[o]&&typeof e[o]=="object"&&!Array.isArray(e[o])?a[o]=Ve(t[o]||{},e[o]):a[o]=e[o];return a},wt=class extends ge{suiKit;_walletAddress;_tokensPerSecond;rateLimiter;constructor(e={}){super(e),this.suiKit=e.suiKit??Xa(e),this._tokensPerSecond=e.tokensPerSecond??Ls,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(T.rpc.getNormalizedMoveFunction({target:e}),()=>this.client.core.getMoveFunction({packageId:a,moduleName:o,name:s}))}async queryGetObject(e,a){let o={json:true,...a};return await this.callWithRateLimiter(T.rpc.getObject({objectId:e,options:o,node:this.currentFullNode}),()=>this.client.core.getObject({objectId:e,include:o}))}async queryGetObjects(e,a){if(e.length===0)return [];let o={json:true,...a},s=await this.callWithRateLimiter(T.rpc.getObjects({objectIds:e,node:this.currentFullNode}),()=>this.suiKit.getObjects(e,{include:o}));return s.forEach(r=>{let n=T.rpc.getObject({objectId:r.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:n}).forEach(([c,l])=>{l||(l={object:null}),this.queryClient.setQueryData(c,Ve(l,{object:r}),{updatedAt:Date.now()});});}),s}async queryGetOwnedObjects(e){let a=await this.callWithRateLimiter(T.rpc.getOwnedObjects(e),()=>this.client.core.listOwnedObjects({owner:e.owner,type:e.filter?.StructType??void 0,include:e.options,cursor:e.cursor??void 0,limit:e.limit??void 0}));return a&&a.objects&&a.objects.length>0&&a.objects.filter(o=>!!o).forEach(o=>{let s=T.rpc.getObject({objectId:o.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:s}).forEach(([n,i])=>{this.queryClient.setQueryData(n,Ve(i,{object:o}),{updatedAt:Date.now()});});}),a}async queryGetDynamicFields(e){let a={...e,limit:e.limit??void 0};return await this.callWithRateLimiter(T.rpc.getDynamicFields(e),()=>this.client.core.listDynamicFields(a))}async queryGetDynamicFieldObject(e){if(!e.parentId)throw new Error("queryGetDynamicFieldObject: parentId is required (got undefined). Check that the parent object has the expected structure (e.g. table.id.id).");let a=Ie(e.name),o=r=>(r instanceof Error?r.message:String(r)).toLowerCase().includes("not found"),s=await this.callWithRateLimiter(T.rpc.getDynamicFieldObject(e),async()=>{try{let{dynamicField:r}=await this.client.core.getDynamicField({parentId:e.parentId,name:a});return await this.client.core.getObject({objectId:r.fieldId,include:{json:!0}})}catch(r){if(o(r))return null;throw r}}).catch(r=>{if(o(r))return null;throw r});if(s?.object){let r=T.rpc.getObject({objectId:s.object.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:false,queryKey:r}).forEach(([i,c])=>{this.queryClient.setQueryData(i,Ve(c,s),{updatedAt:Date.now()});});}return s}async queryGetAllCoinBalances(e){return await this.callWithRateLimiter(T.rpc.getAllCoinBalances({activeAddress:e,node:this.currentFullNode}),async()=>{let a=[],o=null,s=true;for(;s;){let n=await this.client.core.listBalances({owner:e,cursor:o,limit:50});a.push(...n.balances??[]),s=n.hasNextPage,o=n.cursor;}return a.length?a.reduce((n,i)=>(i.balance!=="0"&&(n[suiKit.normalizeStructTag(i.coinType)]={coinType:i.coinType,balance:i.balance}),n),{}):{}})}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");let i=await Promise.all((a??[]).map(async c=>{if(typeof c!="string")return c;let d=(await this.queryGetObject(c))?.object;return d||c}));return s.moveCall(e,i,o),await this.callWithRateLimiter(r??T.rpc.getInspectTxn({queryTarget:e,args:a.map(c=>typeof c=="object"&&"objectId"in c?c.objectId:c),typeArgs:o,node:this.currentFullNode}),()=>this.devInspectTxn(s))}async devInspectTxn(e){let a=new jsonRpc.SuiJsonRpcClient({url:this.suiKit.suiInteractor.currentFullNode,network:this.suiKit.client.network}),o=this.suiKit.getAddress();e.setSender(o);let s=await a.devInspectTransactionBlock({transactionBlock:e.txBlock,sender:o}),r=s.effects?.status?.status==="success",n={...s,effects:{...s.effects,status:{success:r,error:s.effects?.status?.error}}};return r?{Transaction:n,FailedTransaction:void 0}:{Transaction:void 0,FailedTransaction:n}}},Ee=wt;var kt=class{pythEndpoints;scallopSuiKit;constants;timeout;constructor(e={}){this.constants=e.scallopConstants??new Le(e),this.scallopSuiKit=e.scallopSuiKit??new Ee({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 ve(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`),s=this.address.get(`core.coins.${e}.oracle.pyth.feed`);if(a??=(await this.scallopSuiKit.queryGetObject(o))?.object,a?.json){let n=w(a).price_info.price_feed.price,i=Number(n?.expo?.magnitude),c=Number(n?.expo?.negative),l=Number(n?.price?.magnitude),d=Number(n?.price?.negative);if(!Number.isNaN(i)&&!Number.isNaN(l)){let u=l*10**((c?-1:1)*i)*(d?-1:1);if(u>0)return u}}if(s)try{let n=await new pythSuiJs.SuiPriceServiceConnection(this.pythEndpoints[0],{timeout:this.timeout,httpRetries:0}).getLatestPriceFeeds([s]);if(n?.[0])return n[0].getPriceUnchecked().getPriceAsNumberUnchecked()}catch{}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(T.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:T.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,p)=>{let b=r[p],g=this.parseDataFromPythPriceFeed(u);i[b]=g.price;}),this.queryClient.setQueryData(T.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(T.oracle.getCoinPrices(s),i)),e.reduce((c,l)=>{let d=i[l];return typeof d=="number"&&d>0&&(c[l]=d),c},{})}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)):[]}},Ue=kt;var Tt=class extends he{constructor(e={}){e.baseUrl=e.indexerApiUrl??vt,super(e);}async getMarket(){let e=await this.get("/api/market/migrate",T.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",T.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",T.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",T.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=Tt;var At=class{indexer;utils;constructor(e={}){this.utils=e.utils??new Ue(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 ra(this,e?.indexer,e?.coinPrices)}async getMarketPools(e=[...this.constants.whitelist.lending],a){return await ia(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 ca(this,e,a?.indexer)}async getMarketCollateral(e,a){return await tt(this,e,a?.indexer)}async getObligations(e=this.walletAddress){return await ie(this,e)}async queryObligation(e){return ve(this,e)}async getCoinAmounts(e,a=this.walletAddress){return await la(this,e,a)}async getCoinAmount(e,a=this.walletAddress){return await ot(this,e,a)}async getMarketCoinAmounts(e,a=this.walletAddress){return await da(this,e,a)}async getMarketCoinAmount(e,a=this.walletAddress){return await st(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 xa(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={};for(let o of e){let s=await lt(this,o);s&&(a[o]=s);}return a}async getStakePool(e){return await lt(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let a={};return await Promise.allSettled(e.map(async o=>{let s=await dt(this,o);s&&(a[o]=s);})),a}async getStakeRewardPool(e){return await dt(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],a){return await Jt(this,e,a?.indexer,a?.marketPools,a?.coinPrices)}async getBorrowIncentiveAccounts(e,a){return await Ht(this,typeof e=="string"?e:e.objectId,a)}async getLendings(e,a=this.walletAddress,o){return await ba(this,e,a,o?.marketPools,o?.coinPrices,o?.indexer)}async getLending(e,a=this.walletAddress,o){return await nt(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 ya(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 ga(this,e?.indexer)}async getVeSca(e){return await ne(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:a=false}={}){return await Be(this,e,a)}async getVeScaTreasuryInfo(){return await Pa(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await wa(this,e)}async getBindedObligationId(e){return (await this.getBindedObligation(e))?.obligationId}async getBindedObligation(e){return await Yt(this,e)}async getBindedVeScaKey(e){return await Xt(this,e)}async getLoyaltyProgramInfos(e){return await pa(this,e)}async getVeScaLoyaltyProgramInfos(e){return await fa(this,e)}async getSCoinTotalSupply(e){return await Ca(this,e)}async getSCoinAmounts(e,a=this.walletAddress){return await ka(this,e,a)}async getSCoinAmount(e,a=this.walletAddress){let o=this.utils.parseSCoinName(e);return o?await ct(this,o,a):0}async getSCoinSwapRate(e,a){return await Ta(this,e,a)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await ua(this,e)}async getPoolSupplyLimit(e){return await Re(this.utils,e)}async getPoolBorrowLimit(e){return await je(this.utils,e)}async getIsolatedAssets(e=false){return await ea(this,e)}async isIsolatedAsset(e,a=false){return re(this.utils,e,a)}async getCoinPriceByIndexer(e){return this.indexer.getCoinPrice(e)}async getCoinPricesByIndexer(){return this.indexer.getCoinPrices()}async getAllCoinPrices(e){return Sa(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return Ia(this.utils.scallopSuiKit.suiKit.client,e)}async getUserPortfolio(e){return ha(this,e?.walletAddress??this.walletAddress,e?.indexer??false)}async getPriceUpdatePolicies(){return await va(this)}async getAssetOracles(){let[e,a]=await Promise.all([ut(this.utils,"primary"),ut(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)}},Qe=At;var xt=class{query;usePythPullModel;useOnChainXOracleList;sponsoredFeeds;constructor(e={}){this.query=e.query??new Qe(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,p)=>(u+=Number(p.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:p,takeCoin:b}=await this.selectMarketCoin(e,a,o,s);e.transferObjects([p],s),n.marketCoins.push(b);}}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)}},$e=xt;var Pt=class{builder;networkType;constructor(e={}){this.builder=e.builder??new $e(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.depositCollateralQuick(a,e,l,n);else {let[d,u,p]=i.openObligation();await i.depositCollateralQuick(a,e,d,n),i.returnObligation(d,p),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){return this.supply(e,a,o,s)}async supply(e,a,o=true,s){let r=this.builder.createTxBlock(),n=s??this.walletAddress;r.setSender(n);let i=await r.supplyQuick(a,e);return r.transferObjects([i],n),o?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async depositAndStake(e,a,o=true,s,r){return this.supplyAndStake(e,a,o,s,r)}async supplyAndStake(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.supplyQuick(a,e,false);if(d)await n.stakeQuick(u,c,d);else {let p=n.createStakeAccount(c);await n.stakeQuick(u,c,p),n.transferObjects([p],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(({keyId: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}},We=Pt;var Ot=class{client;constructor(e={}){this.client=e.client??new We(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}},to=Ot;
|
|
19
|
+
var Ee="https://sui.apis.scallop.io",Ve="https://sdk.api.scallop.io";var Ke={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var qe="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA";var wc=false,xc=false,jt="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var g={api:{getAddresses:t=>["api","getAddresses",t],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarkets:()=>["api","getMarkets"],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],getSharedObject:t=>["rpc","getSharedObject",t],getOwnedObjects:t=>["rpc","getOwnedObjects",t],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}],getCoinBalance:t=>["rpc","getCoinBalance",t],getAllCoinBalances:t=>["rpc","getAllCoinBalances",t],getNormalizedMoveFunction:t=>["rpc","getNormalizedMoveCall",t]},oracle:{getPythLatestPriceFeeds:(t,e)=>["oracle","getPythPriceIds",e,t],getCoinPrices:t=>["oracle","getCoinPrices",t]}};var Oc=[suiKit.getFullnodeUrl("mainnet")];var Rc={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",incentiveAccountsTableId:"0x0",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"}}}},vc={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"])},Ic={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 ue=86400,ke=1460,H=126144e3,Nt=1e10,Bt=1e9;var bo={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 We=class{constructor(e){this.ctx=e;}async depositCollateral(e,o,r=true,n,a,s){let c=this.ctx.builder.createTxBlock(),i=a??this.ctx.walletAddress;c.setSender(i);let l=n??(await this.ctx.query.getObligations(i))[0]?.id;if(l)await c.depositCollateralQuick(o,e,l,s);else {let[d,u,p]=c.openObligation();await c.depositCollateralQuick(o,e,d,s),c.returnObligation(d,p),c.transferObjects([u],i);}return r?await this.ctx.executor.signAndSendTxn(c):c.txBlock}async withdrawCollateral(e,o,r=true,n,a,s,c){let i=this.ctx.builder.createTxBlock(),l=s??this.ctx.walletAddress;i.setSender(l);let d=await i.takeCollateralQuick(o,e,n,a,{isSponsoredTx:c});return i.transferObjects([d],l),r?await this.ctx.executor.signAndSendTxn(i):i.txBlock}};var Ue=class{constructor(e){this.ctx=e;}async supply(e,o,r=true,n){let a=this.ctx.builder.createTxBlock(),s=n??this.ctx.walletAddress;a.setSender(s);let c=await a.supplyQuick(o,e);return a.transferObjects([c],s),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async withdraw(e,o,r=true,n){let a=this.ctx.builder.createTxBlock(),s=n??this.ctx.walletAddress;a.setSender(s);let c=await a.withdrawQuick(o,e);return a.transferObjects([c],s),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async flashLoan(e,o,r,n=true,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let[i,l]=s.borrowFlashLoan(o,e);return s.repayFlashLoan(await r(s,i),l,e),n?await this.ctx.executor.signAndSendTxn(s):s.txBlock}};var G=class extends Error{code;context;constructor(e,o,r){super(o),this.name="ScallopError",this.code=e,this.context=r?.context,r?.cause!==void 0&&(this.cause=r.cause);}};var P=class extends G{constructor(e,o){super("SCALLOP_RPC_ERROR",e,o),this.name="ScallopRpcError";}};var Qe=class extends G{constructor(e,o){super("SCALLOP_INDEXER_ERROR",e,o),this.name="ScallopIndexerError";}};var T=class extends G{constructor(e,o){super("SCALLOP_PARSE_ERROR",e,o),this.name="ScallopParseError";}};var re=class extends G{constructor(e,o){super("SCALLOP_CONFIG_ERROR",e,o),this.name="ScallopConfigError";}};var ne=class extends G{constructor(e,o){super("SCALLOP_TX_BUILD_ERROR",e,o),this.name="ScallopTransactionBuildError";}};var $e=class{constructor(e){this.ctx=e;}async openObligation(e=true){let o=this.ctx.builder.createTxBlock();return o.openObligationEntry(),e?await this.ctx.executor.signAndSendTxn(o):o.txBlock}async borrow(e,o,r=true,n,a,s,c){let i=this.ctx.builder.createTxBlock(),l=s??this.ctx.walletAddress;i.setSender(l);let d=this.ctx.constants.whitelist.lending.has(e);r&&d&&await i.unstakeObligationQuick(n,a);let u=await i.borrowQuick(o,e,n,a,{isSponsoredTx:c});return i.transferObjects([u],l),r&&d&&await i.stakeObligationWithVeScaQuick(n,a),r?await this.ctx.executor.signAndSendTxn(i):i.txBlock}async repay(e,o,r=true,n,a,s,c){let i=this.ctx.builder.createTxBlock(),l=s??this.ctx.walletAddress;i.setSender(l);let d=this.ctx.constants.whitelist.lending.has(e);return r&&d&&await i.unstakeObligationQuick(n,a),await i.repayQuick(o,e,n,c),r&&d&&await i.stakeObligationWithVeScaQuick(n,a),r?await this.ctx.executor.signAndSendTxn(i):i.txBlock}async supplyAndStake(e,o,r=true,n,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let i=this.ctx.utils.parseMarketCoinName(e),l=await this.ctx.query.getStakeAccounts(i),d=n??l[0]?.id,u=await s.supplyQuick(o,e,false);if(d)await s.stakeQuick(u,i,d);else {let p=s.createStakeAccount(i);await s.stakeQuick(u,i,p),s.transferObjects([p],c);}return r?await this.ctx.executor.signAndSendTxn(s):s.txBlock}async stakeObligation(e,o,r=true,n){let a=this.ctx.builder.createTxBlock();return a.setSender(n??this.ctx.walletAddress),await a.stakeObligationWithVeScaQuick(e,o),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async unstakeObligation(e,o,r=true,n){let a=this.ctx.builder.createTxBlock();return a.setSender(n??this.ctx.walletAddress),await a.unstakeObligationQuick(e,o),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async claimBorrowIncentive(e,o,r=true,n){let a=this.ctx.builder.createTxBlock(),s=n??this.ctx.walletAddress;a.setSender(s);let c={},i=await this.ctx.query.getObligationAccount(e);if(!i)throw new ne("Obligation not found",{context:{obligationId:e}});let l=Object.values(i.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 a.claimBorrowIncentiveQuick(d,e,o);c[d]?c[d].push(u):c[d]=[u];}return a.transferObjects(Object.values(c).map(d=>{let u=d[0];return d.length>1&&a.mergeCoins(u,d.slice(1)),u}),s),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}};var ae=t=>`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`,I=t=>{let e=t.getData().sender;if(!e)throw new Error("Sender is required");return e},Ae=t=>{if(t===void 0)throw new Error("veSca not found")},_t=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Mt=(t,e,o)=>{Ae(o),_t(o);let r=Math.floor(o/1e3);if(t<1)throw new Error("Minimum lock period is 1 day");let n=Math.floor((e-r)/86400);if(t>n)throw new Error(`Cannot extend lock period by ${t} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-n}`)},yo=(t,e,o,r)=>{let n=r?Math.floor(r/1e3):void 0,a=!n,s=!a&&n*1e3<=new Date().getTime();if(a||s)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 ${s?"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 ${s?"renewing expired veSca":"initial lock"}`);else {if(Ae(r),_t(r),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");o&&e&&Mt(e,o,r);}},fo=(t,e)=>{if(Ae(e),_t(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")},go=(t,e,o)=>{if(!o||o>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(t<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)};var Ge=class{constructor(e){this.ctx=e;}async createStakeAccount(e,o=true,r){let n=this.ctx.builder.createTxBlock(),a=r??this.ctx.walletAddress;n.setSender(a);let s=n.createStakeAccount(e);return n.transferObjects([s],a),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async stake(e,o,r=true,n,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let i=await this.ctx.query.getStakeAccounts(e),l=n??i[0]?.id;if(l)await s.stakeQuick(o,e,l);else {let d=s.createStakeAccount(e);await s.stakeQuick(o,e,d),s.transferObjects([d],c);}return r?await this.ctx.executor.signAndSendTxn(s):s.txBlock}async unstake(e,o,r=true,n,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let i=await s.unstakeQuick(o,e,n);if(i){let l=this.ctx.utils.parseSCoinType(e);if(!l)throw new ne(`Invalid sCoin type: ${e}`,{context:{stakeMarketCoinName:e}});await this.ctx.utils.mergeSimilarCoins(s,i,l,c);}return s.transferObjects([i],c),r?await this.ctx.executor.signAndSendTxn(s):s.txBlock}async unstakeAndWithdraw(e,o,r=true,n,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let i=await s.unstakeQuick(o,e,n,false),l=this.ctx.utils.parseCoinName(e);if(i){let d=s.withdraw(i,l);await this.ctx.utils.mergeSimilarCoins(s,d,this.ctx.utils.parseCoinType(l),I(s)),s.transferObjects([d],c);}else throw new ne(`No stake found for ${e}`,{context:{stakeMarketCoinName:e}});return r?await this.ctx.executor.signAndSendTxn(s):s.txBlock}async claim(e,o=true,r,n){let a=this.ctx.builder.createTxBlock(),s=n??this.ctx.walletAddress;a.setSender(s);let c=await a.claimQuick(e,r);return a.transferObjects(c,s),o?await this.ctx.executor.signAndSendTxn(a):a.txBlock}};var ze=class{constructor(e){this.ctx=e;}async lockSca(e,o=true,r){let n=this.ctx.builder.createTxBlock();return n.setSender(r??this.ctx.walletAddress),await n.lockScaQuick(e),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async extendLockPeriod(e,o=true,r){let n=this.ctx.builder.createTxBlock();return n.setSender(r??this.ctx.walletAddress),await n.extendLockPeriodQuick(e),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async extendLockAmount(e,o=true,r){let n=this.ctx.builder.createTxBlock();return n.setSender(r??this.ctx.walletAddress),await n.extendLockAmountQuick(e),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async claimAllUnlockedSca(e=true,o){let r=o??this.ctx.walletAddress,n=(await this.ctx.query.getVeScas({walletAddress:r})??[]).map(({keyId:c})=>c);if(n.length===0)throw new ne("No veSCA found in the wallet",{context:{walletAddress:r}});let a=this.ctx.builder.createTxBlock();a.setSender(r);let s=[];if(await Promise.all(n.map(async c=>{try{let i=await a.redeemScaQuick({veScaKey:c,transferSca:!1});if(!i)return;s.push(i);}catch(i){this.ctx.utils.logger.warn("redeemScaQuick failed for veScaKey; skipping",{veScaKey:c,message:i?.message});}})),s.length===0)throw new ne("No unlocked SCA found in the veSCA accounts",{context:{walletAddress:r,veScaKeyCount:n.length}});return s.length>1&&a.mergeCoins(s[0],s.slice(1)),await this.ctx.utils.mergeSimilarCoins(a,s[0],"sca",r),e?await this.ctx.executor.signAndSendTxn(a):{tx:a.txBlock,scaCoin:s[0]}}};var Ye=class{constructor(e){this.ctx=e;}async bindToReferral(e,o=true,r){let n=this.ctx.builder.createTxBlock();return n.setSender(r??this.ctx.walletAddress),n.bindToReferral(e),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async claimReferralRevenue(e,o,r=true,n){let a=this.ctx.builder.createTxBlock();a.setSender(n??this.ctx.walletAddress);let s=o??[...this.ctx.constants.whitelist.lending];return await a.claimReferralRevenueQuick(e,s),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async burnReferralTicket(e,o,r=true,n){let a=this.ctx.builder.createTxBlock();return a.setSender(n??this.ctx.walletAddress),a.burnReferralTicket(e,o),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}};var X=t=>{if(typeof t=="string")return utils.normalizeStructTag(t);if(t&&typeof t=="object"){let e=t;if(e.address&&e.module&&typeof e.name=="string"){let o=(e.typeParams??e.typeParameters??[]).map(n=>X(n)),r=o.length?`<${o.join(",")}>`:"";return utils.normalizeStructTag(`${e.address}::${e.module}::${e.name}${r}`)}if(e.name)return X(e.name)}throw new T(`Invalid Move type name: ${JSON.stringify(t)}`,{context:{payload:t}})},J=(t,e)=>{try{return X(t)}catch(o){throw new T(`Failed to map Move type at ${e}`,{cause:o,context:{path:e}})}};var Oe=(...t)=>bignumber_js.BigNumber(t.reduce((e,o)=>new bignumber_js.BigNumber(o).lt(e)?o:e));var He=(t,e,o)=>{let r=Math.max(1,Math.floor(Math.log10(Math.abs(t))+1)),n=Math.max(Math.floor((r-1)/e),1)+1,a=Math.pow(10,-n);return a=o==="increase"?1-a:1+a,a};var Xa=t=>Object.values(t).filter(e=>!!e&&e.availableWithdrawCoin>0).map(e=>({suppliedCoin:e.availableWithdrawCoin,suppliedValue:e.suppliedValue,stakedCoin:e.availableUnstakeCoin,coinName:e.coinName,symbol:e.symbol,coinType:e.coinType,coinPrice:e.coinPrice,coinDecimals:e.coinDecimal,supplyApr:e.supplyApr,supplyApy:e.supplyApy,incentiveApr:isFinite(e.rewardApr)?e.rewardApr:0})),Ja=(t,e)=>Object.values(t).filter(o=>!!o&&(o.totalBorrowedValueWithWeight>0||o.totalDepositedValue>0)).map(o=>({obligationId:o.obligationId,totalDebtsInUsd:o.totalBorrowedValueWithWeight,totalCollateralInUsd:o.totalDepositedValue,riskLevel:o.totalRiskLevel,availableCollateralInUsd:o.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:o.totalUnhealthyCollateralValue,collaterals:Object.values(o.collaterals).filter(r=>!!r&&r.depositedCoin>0).map(r=>({coinName:r.coinName,symbol:r.symbol,coinDecimals:r.coinDecimal,coinType:r.coinType,coinPrice:r.coinPrice,depositedCoin:r.depositedCoin,depositedValueInUsd:r.depositedValue})),borrowedPools:Object.values(o.debts).filter(r=>!!r&&r.borrowedCoin>0).map(r=>({coinName:r.coinName,symbol:r.symbol,coinDecimals:r.coinDecimal,coinType:r.coinType,coinPrice:r.coinPrice,borrowedCoin:r.borrowedCoin,borrowedValueInUsd:r.borrowedValueWithWeight,borrowApr:e[r.coinName]?.borrowApr,borrowApy:e[r.coinName]?.borrowApy,incentiveInfos:(o.borrowIncentives[r.coinName]?.rewards??[]).filter(n=>!!n&&isFinite(n.baseRewardApr)).map(n=>({coinName:n.coinName,symbol:n.symbol,coinType:n.coinType,boostValue:n.boostValue,maxBoost:n.maxBoost,incentiveApr:n.baseRewardApr,boostedIncentiveApr:n.boostedRewardApr}))}))})),Pe="sui",Za="SUI",es=(t,e)=>Object.values(t).reduce((o,r)=>{if(r){if(r.availableClaimCoin===0)return o;o[Pe]?o[Pe].pendingRewardInCoin+=r.availableClaimCoin:o[Pe]={symbol:Za,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:e[Pe]??0,pendingRewardInCoin:r.availableClaimCoin};}return o},{}),ts=t=>Object.values(t).filter(e=>!!e).reduce((e,o)=>(Object.values(o.borrowIncentives).forEach(r=>{r?.rewards.forEach(n=>{if(n.availableClaimCoin===0)return e;e[n.coinName]?e[n.coinName].pendingRewardInCoin+=n.availableClaimCoin:e[n.coinName]={symbol:n.symbol,coinType:n.coinType,coinPrice:n.coinPrice,pendingRewardInCoin:n.availableClaimCoin};});}),e),{}),os=(t,e,o=Date.now())=>t.map(({keyId:r,lockedScaCoin:n,currentVeScaBalance:a,unlockAt:s})=>({veScaKey:r,coinPrice:e,lockedScaInCoin:n,lockedScaInUsd:n*e,currentVeScaBalance:a,remainingLockPeriodInDays:s-o>0?(s-o)/864e5:0,unlockAt:s})),rs=t=>{let e=t.parsedLendings.reduce((n,a)=>n+a.suppliedValue,0),o=t.parsedObligationAccounts.reduce((n,a)=>(n.totalDebtValue+=a.totalDebtsInUsd,n.totalCollateralValue+=a.totalCollateralInUsd,n),{totalDebtValue:0,totalCollateralValue:0}),r=t.parsedVeScas.reduce((n,a)=>n+a.lockedScaInUsd,0);return {totalSupplyValue:e,...o,totalLockedScaValue:r}},ns=t=>{let e=bignumber_js.BigNumber(t.depositedRawAmount??0),o=e.shiftedBy(-t.coinDecimal),r=o.multipliedBy(t.coinPrice),n=r.multipliedBy(t.marketCollateral.collateralFactor),a=r.multipliedBy(t.marketCollateral.liquidationFactor),s=bignumber_js.BigNumber(t.coinAmount),c=s.shiftedBy(-t.coinDecimal);return {entry:{coinName:t.assetCoinName,coinType:t.coinType,symbol:t.symbol,coinDecimal:t.coinDecimal,coinPrice:t.coinPrice,depositedAmount:e.toNumber(),depositedCoin:o.toNumber(),depositedValue:r.toNumber(),borrowCapacityValue:n.toNumber(),requiredCollateralValue:a.toNumber(),availableDepositAmount:s.toNumber(),availableDepositCoin:c.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0},depositedValue:r,borrowCapacityValue:n,requiredCollateralValue:a,isDeposited:e.isGreaterThan(0)}},as=1e9,ss=bignumber_js.BigNumber(1e12),is=t=>{let e=[];Object.entries(t.borrowIncentiveAccount.pointList).forEach(([n,a])=>{let s=t.borrowIncentivePool.points[t.toMarketCoinName(n)];if(!a||!s)return;let c=bignumber_js.BigNumber(a.weightedAmount),i=s.currentPointIndex?Math.max(bignumber_js.BigNumber(s.currentPointIndex-a.index).dividedBy(as).toNumber(),0):1,l=c.multipliedBy(i).plus(a.points),d=l.shiftedBy(-s.coinDecimal),u=bignumber_js.BigNumber(s.baseWeight).dividedBy(ss),p=bignumber_js.BigNumber(a.weightedAmount).div(bignumber_js.BigNumber(t.borrowIncentiveAccount.debtAmount).multipliedBy(u)),m=p.isFinite()?p.toNumber():1,f=isFinite(s.rewardApr)?s.rewardApr:0;l.isGreaterThanOrEqualTo(0)&&e.push({coinName:s.coinName,coinType:s.coinType,symbol:s.symbol,coinDecimal:s.coinDecimal,coinPrice:s.coinPrice,weightedBorrowAmount:c.toNumber(),availableClaimAmount:l.toNumber(),availableClaimCoin:d.toNumber(),baseRewardApr:f,boostedRewardApr:f*m,maxBoost:1/u.toNumber(),boostValue:m});});let r=Object.keys(t.borrowIncentivePool.points).some(n=>{let a=t.borrowIncentivePool.points[n]?.rewardApr;return a!==1/0&&typeof a=="number"&&a>0})&&t.borrowIncentiveAccount.debtAmount>0;return {rewards:e,contributesRewardedPool:r}},cs=t=>{let e=t.debt?.borrowIndex?t.marketPool.borrowIndex/Number(t.debt.borrowIndex)-1:0,o=bignumber_js.BigNumber(t.debt?.amount??0).multipliedBy(e+1),r=o.shiftedBy(-t.coinDecimal),n=o,a=n.shiftedBy(-t.coinDecimal),s=bignumber_js.BigNumber(t.coinAmount),c=s.shiftedBy(-t.coinDecimal),i=a.multipliedBy(t.coinPrice),l=i.multipliedBy(t.marketPool.borrowWeight);return {entry:{coinName:t.assetCoinName,coinType:t.coinType,symbol:t.symbol,coinDecimal:t.coinDecimal,coinPrice:t.coinPrice,borrowedAmount:o.toNumber(),borrowedCoin:r.toNumber(),borrowedValue:i.toNumber(),borrowedValueWithWeight:l.toNumber(),borrowIndex:Number(t.debt?.borrowIndex??0),requiredRepayAmount:n.toNumber(),requiredRepayCoin:a.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:s.toNumber(),availableRepayCoin:c.toNumber(),rewards:(t.rewards??[]).filter(({weightedBorrowAmount:u})=>u>0)},borrowedValue:i,borrowedValueWithWeight:l,isBorrowed:o.isGreaterThan(0)}},ls=t=>{let e=t.totalRequiredCollateralValue.isZero()?t.totalBorrowedValueWithWeight.isGreaterThan(0)?bignumber_js.BigNumber(100):bignumber_js.BigNumber(0):t.totalBorrowedValueWithWeight.dividedBy(t.totalRequiredCollateralValue);e=e.isLessThan(1)?e:bignumber_js.BigNumber(1);let o=t.totalDepositedValue.minus(t.totalBorrowedValue).isGreaterThan(0)?t.totalDepositedValue.minus(t.totalBorrowedValue):bignumber_js.BigNumber(0),r=t.totalBorrowCapacityValue.minus(t.totalBorrowedValueWithWeight).isGreaterThan(0)?t.totalBorrowCapacityValue.minus(t.totalBorrowedValueWithWeight):bignumber_js.BigNumber(0),n=t.totalBorrowedValueWithWeight.isGreaterThan(0)?t.totalRequiredCollateralValue:bignumber_js.BigNumber(0),a=t.totalBorrowedValueWithWeight.minus(n).isGreaterThan(0)?t.totalBorrowedValueWithWeight.minus(n):bignumber_js.BigNumber(0);return {riskLevel:e.toNumber(),accountBalanceValue:o.toNumber(),availableCollateralValue:r.toNumber(),requiredCollateralValue:n.toNumber(),unhealthyCollateralValue:a.toNumber()}},ds=t=>{let e=bignumber_js.BigNumber(t.totalAvailableCollateralValue).dividedBy(t.marketCollateral.collateralFactor).dividedBy(t.marketCollateral.coinPrice).shiftedBy(t.marketCollateral.coinDecimal),o=t.totalBorrowedValueWithWeight===0?bignumber_js.BigNumber(t.obligationCollateral.depositedAmount):Oe(e.multipliedBy(He(bignumber_js.BigNumber(t.totalAvailableCollateralValue).dividedBy(t.marketCollateral.collateralFactor).toNumber(),3,"increase")).toNumber(),t.obligationCollateral.depositedAmount,t.marketCollateral.depositAmount);return {availableWithdrawAmount:o.toNumber(),availableWithdrawCoin:o.shiftedBy(-t.obligationCollateral.coinDecimal).toNumber()}},us=t=>{let e=bignumber_js.BigNumber(t.obligationDebt.requiredRepayAmount).multipliedBy(He(t.obligationDebt.borrowedValue,3,"decrease")),o=bignumber_js.BigNumber(t.totalAvailableCollateralValue).dividedBy(t.marketPool.borrowWeight).shiftedBy(t.marketPool.coinDecimal).dividedBy(t.marketPool.coinPrice),r=t.totalAvailableCollateralValue!==0&&bignumber_js.BigNumber(t.marketPool.maxBorrowCoin).isGreaterThan(t.marketPool.borrowCoin)?Oe(o.multipliedBy(He(o.shiftedBy(-t.marketPool.coinDecimal).multipliedBy(t.marketPool.coinPrice).toNumber(),3,"increase")).toNumber(),t.marketPool.supplyAmount):bignumber_js.BigNumber(0);return {availableBorrowAmount:r.toNumber(),availableBorrowCoin:r.shiftedBy(-t.obligationDebt.coinDecimal).toNumber(),requiredRepayAmount:e.toNumber(),requiredRepayCoin:e.shiftedBy(-t.obligationDebt.coinDecimal).toNumber()}},Co=t=>{let{coinName:e,symbol:o,coinType:r,marketCoinType:n,coinDecimal:a,coinPrice:s,marketPool:c,spool:i,stakeAccounts:l,coinAmount:d,marketCoinAmount:u,sCoinAmount:p}=t,m=bignumber_js.BigNumber(0),f=bignumber_js.BigNumber(0),b=bignumber_js.BigNumber(0),y=bignumber_js.BigNumber(0),h=bignumber_js.BigNumber(0),S=bignumber_js.BigNumber(0),w=bignumber_js.BigNumber(0),O=bignumber_js.BigNumber(0),_=bignumber_js.BigNumber(0);if(i)for(let ie of l){let L=bignumber_js.BigNumber(ie.staked),we=L.shiftedBy(-i.coinDecimal),W=L.multipliedBy(c?.conversionRate??1),Y=W.shiftedBy(-i.coinDecimal),he=Y.multipliedBy(i.coinPrice);m=m.plus(L),f=f.plus(we),b=b.plus(W),y=y.plus(Y),h=h.plus(he),S=S.plus(L),w=S.shiftedBy(-i.coinDecimal);let It=i.currentPointIndex?bignumber_js.BigNumber(i.currentPointIndex-ie.index).dividedBy(1e9):1;O=O.plus(L.multipliedBy(It).plus(ie.points).multipliedBy(i.exchangeRateNumerator).dividedBy(i.exchangeRateDenominator)),_=O.shiftedBy(-i.rewardCoinDecimal);}let j=bignumber_js.BigNumber(u).plus(bignumber_js.BigNumber(p)).multipliedBy(c?.conversionRate??1),v=j.shiftedBy(-a),x=v.multipliedBy(s??0),B=bignumber_js.BigNumber(s??0).multipliedBy(c?.conversionRate??1),N=bignumber_js.BigNumber(u).plus(bignumber_js.BigNumber(p)),F=N.shiftedBy(-a),q=bignumber_js.BigNumber(d),$=q.shiftedBy(-a),de=Oe(j,c?.supplyAmount??1/0).plus(b),te=Oe(v,c?.supplyCoin??1/0).plus(y);return {coinName:e,symbol:o,coinType:r,marketCoinType:n,sCoinType:c?.sCoinType??"",coinDecimal:a,coinPrice:s??0,conversionRate:c?.conversionRate??1,marketCoinPrice:B.toNumber(),supplyApr:c?.supplyApr??0,supplyApy:c?.supplyApy??0,rewardApr:i?.rewardApr??0,suppliedAmount:j.plus(b).toNumber(),suppliedCoin:v.plus(y).toNumber(),suppliedValue:x.plus(h).toNumber(),stakedMarketAmount:m.toNumber(),stakedMarketCoin:f.toNumber(),stakedAmount:b.toNumber(),stakedCoin:y.toNumber(),stakedValue:h.toNumber(),unstakedMarketAmount:N.toNumber(),unstakedMarketCoin:F.toNumber(),unstakedAmount:j.toNumber(),unstakedCoin:v.toNumber(),unstakedValue:x.toNumber(),availableSupplyAmount:q.toNumber(),availableSupplyCoin:$.toNumber(),availableWithdrawAmount:de.toNumber(),availableWithdrawCoin:te.toNumber(),availableStakeAmount:N.toNumber(),availableStakeCoin:F.toNumber(),availableUnstakeAmount:S.toNumber(),availableUnstakeCoin:w.toNumber(),availableClaimAmount:O.toNumber(),availableClaimCoin:_.toNumber(),isIsolated:c?c.isIsolated:false}},wo=t=>{let{obligationId:e,collateralCoinNames:o,market:r,coinPrices:n,coinAmounts:a,obligationQuery:s,borrowIncentivePools:c,borrowIncentiveAccounts:i,utils:l}=t,d={},u={},p={},m=0,f=bignumber_js.BigNumber(0),b=bignumber_js.BigNumber(0),y=bignumber_js.BigNumber(0),h=0,S=0,w=bignumber_js.BigNumber(0),O=bignumber_js.BigNumber(0);for(let x of o){let B=s?.collaterals.find(q=>l.parseCoinNameFromType(q.type)===x),N=r.collaterals[x];if(!N)continue;let F=ns({assetCoinName:x,coinType:l.parseCoinType(x),symbol:l.parseSymbol(x),coinDecimal:l.getCoinDecimal(x),coinPrice:n?.[x]??0,coinAmount:a?.[x]??0,marketCollateral:N,depositedRawAmount:B?.amount});f=f.plus(F.depositedValue),b=b.plus(F.borrowCapacityValue),y=y.plus(F.requiredCollateralValue),F.isDeposited&&m++,d[x]=F.entry;}for(let[x,B]of Object.entries(i)){if(!B)continue;let N=c[x];if(!N)continue;let F=is({borrowIncentivePool:N,borrowIncentiveAccount:B,toMarketCoinName:q=>l.parseSCoinTypeNameToMarketCoinName(q)});F.contributesRewardedPool&&S++,p[x]={coinName:N.coinName,coinType:N.coinType,symbol:N.symbol,coinDecimal:N.coinDecimal,coinPrice:N.coinPrice,rewards:F.rewards};}let _=[...new Set(Object.values(r.pools).filter(x=>!!x).map(x=>x.coinName))];for(let x of _){let B=s?.debts.find(q=>l.parseCoinNameFromType(q.type)===x),N=r.pools[x];if(!N)continue;let F=cs({assetCoinName:x,coinType:l.parseCoinType(x),symbol:l.parseSymbol(x),coinDecimal:l.getCoinDecimal(x),coinPrice:n?.[x]??0,coinAmount:a?.[x]??0,marketPool:N,debt:B?{amount:B.amount,borrowIndex:B.borrowIndex}:void 0,rewards:p[x]?.rewards});w=w.plus(F.borrowedValue),O=O.plus(F.borrowedValueWithWeight),F.isBorrowed&&h++,u[x]=F.entry;}let j=ls({totalDepositedValue:f,totalBorrowedValue:w,totalBorrowCapacityValue:b,totalBorrowedValueWithWeight:O,totalRequiredCollateralValue:y}),v={obligationId:e,totalDepositedValue:f.toNumber(),totalBorrowedValue:w.toNumber(),totalBalanceValue:j.accountBalanceValue,totalBorrowCapacityValue:b.toNumber(),totalAvailableCollateralValue:j.availableCollateralValue,totalBorrowedValueWithWeight:O.toNumber(),totalRequiredCollateralValue:j.requiredCollateralValue,totalUnhealthyCollateralValue:j.unhealthyCollateralValue,totalRiskLevel:j.riskLevel,totalDepositedPools:m,totalBorrowedPools:h,totalRewardedPools:S,collaterals:d,debts:u,borrowIncentives:p};for(let[x,B]of Object.entries(v.collaterals)){if(!B)continue;let N=r.collaterals[x];if(!N)continue;let{availableWithdrawAmount:F,availableWithdrawCoin:q}=ds({obligationCollateral:B,marketCollateral:N,totalAvailableCollateralValue:v.totalAvailableCollateralValue,totalBorrowedValueWithWeight:v.totalBorrowedValueWithWeight});B.availableWithdrawAmount=F,B.availableWithdrawCoin=q;}for(let[x,B]of Object.entries(v.debts)){if(!B)continue;let N=r.pools[x];if(!N)continue;let{availableBorrowAmount:F,availableBorrowCoin:q,requiredRepayAmount:$,requiredRepayCoin:de}=us({obligationDebt:B,marketPool:N,totalAvailableCollateralValue:v.totalAvailableCollateralValue});B.availableBorrowAmount=F,B.availableBorrowCoin=q,B.requiredRepayAmount=$,B.requiredRepayCoin=de;}return v},xo=t=>{let{lendings:e,obligationAccounts:o,veScas:r,coinPrices:n,marketPools:a}=t,s=Xa(e),c=Ja(o,a),i=es(e,n),l=ts(o),d=os(r,n.sca??0);return {...rs({parsedLendings:s,parsedObligationAccounts:c,parsedVeScas:d}),lendings:s,borrowings:c,pendingRewards:{lendings:Object.values(i).map(p=>({...p,coinName:Pe,pendingRewardInUsd:p.coinPrice*p.pendingRewardInCoin})),borrowIncentives:Object.entries(l).map(([p,m])=>({coinName:p,...m,pendingRewardInUsd:m.coinPrice*m.pendingRewardInCoin}))},veScas:d}},To=t=>{let{coinPrices:e,marketPools:o,sCoinNames:r,parseCoinName:n}=t,a={};for(let s of r){let c=n(s);a[s]=bignumber_js.BigNumber(e[c]??0).multipliedBy(o[c]?.conversionRate??1).toNumber();}return {...e,...a}};var ko=({ctx:t,txBlock:e})=>{let o={protocolPkg:t.address.get("core.packages.protocol.id"),market:t.address.get("core.market"),version:t.address.get("core.version"),coinDecimalsRegistry:t.address.get("core.coinDecimalsRegistry"),xOracle:t.address.get("core.oracles.xOracle")},n=`${t.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`,a=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {openObligation:()=>{let[s,c,i]=t.moveCall(e,`${o.protocolPkg}::open_obligation::open_obligation`,[o.version]);return [s,c,i]},returnObligation:(s,c)=>{t.moveCall(e,`${o.protocolPkg}::open_obligation::return_obligation`,[o.version,s,c]);},openObligationEntry:()=>{t.moveCall(e,`${o.protocolPkg}::open_obligation::open_obligation_entry`,[o.version]);},depositCollateral:(s,c,i)=>{let l=t.utils.parseCoinType(i);t.moveCall(e,`${o.protocolPkg}::deposit_collateral::deposit_collateral`,[o.version,s,o.market,c],[l]);},takeCollateral:(s,c,i,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${o.protocolPkg}::withdraw_collateral::withdraw_collateral`,[o.version,s,c,o.market,o.coinDecimalsRegistry,e.pure.u64(i),o.xOracle,a],[d])},supply:(s,c)=>{let i=t.utils.parseCoinType(c);return t.moveCall(e,`${o.protocolPkg}::mint::mint`,[o.version,o.market,s,a],[i])},depositEntry:(s,c)=>{let i=t.utils.parseCoinType(c);return t.moveCall(e,`${o.protocolPkg}::mint::mint_entry`,[o.version,o.market,s,a],[i])},withdraw:(s,c)=>{let i=t.utils.parseCoinType(c);return t.moveCall(e,`${o.protocolPkg}::redeem::redeem`,[o.version,o.market,s,a],[i])},withdrawEntry:(s,c)=>{let i=t.utils.parseCoinType(c);return t.moveCall(e,`${o.protocolPkg}::redeem::redeem_entry`,[o.version,o.market,s,a],[i])},borrow:(s,c,i,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${o.protocolPkg}::borrow::borrow`,[o.version,s,c,o.market,o.coinDecimalsRegistry,i,o.xOracle,a],[d])},borrowWithReferral:(s,c,i,l,d)=>{let u=t.utils.parseCoinType(d);return t.moveCall(e,`${o.protocolPkg}::borrow::borrow_with_referral`,[o.version,s,c,o.market,o.coinDecimalsRegistry,i,typeof l=="number"?e.pure.u64(l):l,o.xOracle,a],[u,n])},borrowEntry:(s,c,i,l)=>{let d=t.utils.parseCoinType(l);return t.moveCall(e,`${o.protocolPkg}::borrow::borrow_entry`,[o.version,s,c,o.market,o.coinDecimalsRegistry,e.pure.u64(i),o.xOracle,a],[d])},repay:(s,c,i)=>{let l=t.utils.parseCoinType(i);t.moveCall(e,`${o.protocolPkg}::repay::repay`,[o.version,s,o.market,c,a],[l]);},borrowFlashLoan:(s,c)=>{let i=t.utils.parseCoinType(c);return t.moveCall(e,`${o.protocolPkg}::flash_loan::borrow_flash_loan`,[o.version,o.market,s],[i])},repayFlashLoan:(s,c,i)=>{let l=t.utils.parseCoinType(i);t.moveCall(e,`${o.protocolPkg}::flash_loan::repay_flash_loan`,[o.version,o.market,s,c],[l]);},liquidate:(s,c,i,l)=>{let d=t.utils.parseCoinType(i),u=t.utils.parseCoinType(l),[p,m]=t.moveCall(e,`${o.protocolPkg}::liquidate::liquidate`,[o.version,s,o.market,c,o.coinDecimalsRegistry,o.xOracle,a],[d,u]);return [p,m]}}};var Re=async(...t)=>{let[e,o,r,n]=t;if(t.length===3&&r)return {obligationId:r};if(t.length===4&&r&&n)return {obligationId:r,obligationKey:n};let a=I(o),s=await e.reads.getObligations(a);if(s.length===0)throw new Error(`No obligation found for sender ${a}`);return {obligationId:s[0].id,obligationKey:s[0].keyId}},Ao=({ctx:t,txBlock:e})=>({depositCollateralQuick:async(o,r,n,a=false)=>{let s=I(e),{obligationId:c}=await Re(t,e,n),{takeCoin:i,leftCoin:l}=await t.coins.selectCoin(e,r,o,s,a);l&&e.transferObjects([l],s),e.depositCollateral(c,i,r);},takeCollateralQuick:async(o,r,n,a,s)=>{let c=await Re(t,e,n,a),i=await t.reads.getObligationCoinNames(c.obligationId);return await t.oracles.updateOracles(e,i,s),e.takeCollateral(c.obligationId,c.obligationKey,o,r)},supplyQuick:async(o,r,n=true,a=false)=>{let s=I(e),{leftCoin:c,takeCoin:i}=await t.coins.selectCoin(e,r,o,s,a);c&&e.transferObjects([c],s);let l=e.supply(i,r);return n?e.mintSCoin(t.utils.parseMarketCoinName(r),l):l},withdrawQuick:async(o,r)=>{let n=I(e),a=t.utils.parseSCoinName(r);if(!a)throw new Error(`No sCoin for ${r}`);let{sCoin:s,marketCoin:c}=await t.coins.selectSCoinOrMarketCoin(e,a,o,n);if(s){let i=e.burnSCoin(a,s);c?e.mergeCoins(c,[i]):c=i;}if(!c)throw new Error(`No market coin for ${r}`);return e.withdraw(c,r)},borrowQuick:async(o,r,n,a,s)=>{let c=await Re(t,e,n,a),l=[...await t.reads.getObligationCoinNames(c.obligationId)??[],r];return await t.oracles.updateOracles(e,l,s),e.borrow(c.obligationId,c.obligationKey,o,r)},borrowWithReferralQuick:async(o,r,n,a,s,c)=>{let i=await Re(t,e,a,s),d=[...await t.reads.getObligationCoinNames(i.obligationId)??[],r];return await t.oracles.updateOracles(e,d,c),e.borrowWithReferral(i.obligationId,i.obligationKey,n,o,r)},repayQuick:async(o,r,n,a=false)=>{let s=I(e),c=await Re(t,e,n),{leftCoin:i,takeCoin:l}=await t.coins.selectCoin(e,r,o,s,a);return i&&e.transferObjects([i],s),e.repay(c.obligationId,l,r)},updateAssetPricesQuick:async(o,r)=>await t.oracles.updateOracles(e,o,r),liquidateQuick:async(o,r,n,a,s)=>{let c=I(e),i=await t.reads.getObligationCoinNames(a);await t.oracles.updateOracles(e,i,s);let{takeCoin:l,leftCoin:d}=await t.coins.selectCoin(e,r,o,c,s?.isSponsoredTx??false);d&&e.transferObjects([d],c);let u=typeof a=="string"?e.object(a):a;return e.liquidate(u,l,r,n)}});var Ft=class extends pythSuiJs.SuiPythClient{constructor(o,r,n,a){super(o,r,n);this.params=a;}async updatePriceFeedsWithSponsoredBaseUpdateFee(o,r,n){if(!this.params)throw new Error("Please provide params");let{defaultPackageId:a,gasStationId:s}=this.params,c=await this.getPythPackageId(),i=await this.verifyVaasAndGetHotPotato(o,r,c),l=[];for(let u of n){let p=await this.getPriceFeedObjectId(u);if(!p)throw new Error(`Price feed object not found for ID: ${u}`);l.push(p);}let d=o.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});for(let u=0;u<l.length;u++){let p=l[u];[i]=o.moveCall({target:`${a}::pyth_sponsor::update_single_price_feed_with_sponsor`,arguments:[o.object(this.pythStateId),i,o.object(p),o.object(s),d]});}o.moveCall({target:`${c}::hot_potato_vector::destroy`,arguments:[i],typeArguments:[`${c}::price_info::PriceInfo`]});}},Oo=async(t,e,o,r=false)=>{let n=(()=>{try{return t.suiKit.suiInteractor.currentFullNode}catch{return jsonRpc.getJsonRpcFullnodeUrl("mainnet")}})(),a=t.suiKit.client.network,s=new jsonRpc.SuiJsonRpcClient({url:n,network:a}),c=new Ft(s,t.address.get("core.oracles.pyth.state"),t.address.get("core.oracles.pyth.wormholeState"),{defaultPackageId:"0xa6f9bec2f9748656b6af8aafb5d7bc1a0d5faf25ac9645fc7f447822cd509325",gasStationId:"0xa8b8dcc9880166edb57b53e05f8df7364d31b5d9b7d107fd27f0b69cf338b687"}),i=Array.from(new Set(e.map(d=>t.address.get(`core.coins.${d}.oracle.pyth.feed`)))),l=t.pythEndpoints??[...t.constants.whitelist.pythEndpoints];for(let d of l)try{let p=await new pythSuiJs.SuiPriceServiceConnection(d,{priceFeedRequestConfig:{binary:!0}}).getPriceFeedsUpdateData(i);r?await c.updatePriceFeedsWithSponsoredBaseUpdateFee(o.txBlock,p,i):await c.updatePriceFeeds(o.txBlock,p,i);return}catch(u){t.utils.logger.warn("pyth price-feed update failed; trying next endpoint",{endpoint:d,message:u?.message});}};var Po=async(t,e,o=[...t.constants.whitelist.lending],r)=>{let n=r?.usePythPullModel??t.usePythPullModel,a=r?.useOnChainXOracleList??t.useOnChainXOracleList,s=new Set((r?.sponsoredFeeds??t.sponsoredFeeds).filter(m=>t.constants.whitelist.lending.has(m)?true:(t.utils.logger.warn("sponsored feed not in lending whitelist; skipping",{feed:m}),false))),c=r?.isSponsoredTx??false,i=a?await t.query.getAssetOracles():bo,l=new Set(Object.values(i).flatMap(({primary:m,secondary:f})=>[...m,...f])),d=(m,f)=>{let b=i[m];return b&&(b.primary.includes(f)||b.secondary.includes(f))},u=[...new Set(o)],p=u.filter(m=>d(m,"pyth"));if(l.has("pyth")){let m=[];for(let f of p){let b=!n&&!s.has(f);(n||b)&&m.push(f);}m.length>0&&await Oo(t,m,e,c);}for(let m of u)hs(t,e,m,i[m]);},hs=(t,e,o,r)=>{let n=t.utils.parseCoinType(o);Ss(e,r,t.address.get("core.packages.xOracle.id"),t.address.get("core.oracles.xOracle"),t.address.get("core.packages.pyth.id"),t.address.get("core.oracles.pyth.registry"),t.address.get("core.oracles.pyth.state"),t.address.get(`core.coins.${o}.oracle.pyth.feedObject`),t.address.get("core.packages.switchboard.id"),t.address.get("core.oracles.switchboard.registry"),t.address.get(`core.coins.${o}.oracle.switchboard`),t.address.get("core.packages.supra.id"),t.address.get("core.oracles.supra.registry"),t.address.get("core.oracles.supra.holder"),n);},Ss=(t,e,o,r,n,a,s,c,i,l,d,u,p,m,f)=>{let b=h=>typeof h=="string"?t.object(h):h;r=b(r),a=b(a),s=b(s),c=b(c),l=b(l),d=b(d),p=b(p),m=b(m);let y=Cs(t,o,r,f);return Object.entries(e).forEach(([h,S])=>{S.includes("pyth")&&ks(h,t,n,y,s,c,a,f),S.includes("supra")&&xs(h,t,u,y,m,p,f),S.includes("switchboard")&&Ts(h,t,i,y,d,l,f);}),ws(t,o,r,y,f),t},Cs=(t,e,o,r)=>{let n=`${e}::x_oracle::price_update_request`,a=[r];return t.moveCall(n,[o],a)},ws=(t,e,o,r,n)=>{let a=`${e}::x_oracle::confirm_price_update_request`,s=[n];return t.moveCall(a,[o,r,t.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],s),t},xs=(t,e,o,r,n,a,s)=>{e.moveCall(`${o}::rule::set_price_as_${t}`,[r,n,a,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[s]);},Ts=(t,e,o,r,n,a,s)=>{e.moveCall(`${o}::rule::set_as_${t}_price`,[r,n,a,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[s]);},ks=(t,e,o,r,n,a,s,c)=>{e.moveCall(`${o}::rule::set_price_as_${t}`,[r,n,a,s,e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,initialSharedVersion:"1",mutable:false})],[c]);};var Ro=async(t,e)=>{let o=typeof e=="string"?e:"objectId"in e?e.objectId:void 0;if(o===void 0)throw new T("getObligationCoinNames expects an object id (string) or an object reference");let r=await t.query.repos.obligation.getObligationData(o);if(!r)return;let n=r.collaterals.map(i=>i.type),a=r.debts.map(i=>i.type);return [...new Set([...n,...a])].map(i=>t.utils.parseCoinNameFromType(i))};var Io=(t,e)=>{let o=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,r={address:t.address,moveCall:t.moveCall.bind(t),utils:t.utils},n={reads:{getObligations:i=>t.query.getObligations(i),getObligationCoinNames:i=>Ro(t,i)},coins:{selectCoin:(...i)=>t.selectCoin(...i),selectSCoinOrMarketCoin:(...i)=>t.selectSCoinOrMarketCoin(...i)},oracles:{updateOracles:(i,l,d)=>Po(t,i,l,d)},utils:{parseMarketCoinName:i=>t.utils.parseMarketCoinName(i),parseSCoinName:i=>t.utils.parseSCoinName(i)}},a=ko({ctx:r,txBlock:o}),s=new Proxy(o,{get:(i,l)=>l in a?Reflect.get(a,l):Reflect.get(i,l)}),c=Ao({ctx:n,txBlock:s});return new Proxy(s,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var jo=({ctx:t,txBlock:e})=>{let o={spoolPkg:t.address.get("spool.id")},r=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {createStakeAccount:n=>{let a=t.utils.parseMarketCoinType(n),s=t.address.get(`spool.pools.${n}.id`);return t.moveCall(e,`${o.spoolPkg}::user::new_spool_account`,[s,r],[a])},stake:(n,a,s)=>{let c=t.utils.parseMarketCoinType(s),i=t.address.get(`spool.pools.${s}.id`);t.moveCall(e,`${o.spoolPkg}::user::stake`,[i,n,a,r],[c]);},unstake:(n,a,s)=>{let c=t.utils.parseMarketCoinType(s),i=t.address.get(`spool.pools.${s}.id`);return t.moveCall(e,`${o.spoolPkg}::user::unstake`,[i,n,a,r],[c])},claim:(n,a)=>{let s=t.address.get(`spool.pools.${a}.id`),c=t.address.get(`spool.pools.${a}.rewardPoolId`),i=t.utils.parseMarketCoinType(a),l=t.utils.getSpoolRewardCoinName(),d=t.utils.parseCoinType(l);return t.moveCall(e,`${o.spoolPkg}::user::redeem_rewards`,[s,c,n,r],[i,d])}}};var No=async(...t)=>{let[e,o,r,n]=t;if(t.length===4&&n)return [n];let a=I(o),s=await e.reads.getAllStakeAccounts(a);if(s[r].length===0)throw new Error(`No stake account id found for sender ${a}`);return s[r].map(c=>c.id)},Ps=async(...t)=>{let[e,o,r,n]=t,a=I(o),s=await e.reads.getAllStakeAccounts(a);if(s[r].length===0)throw new Error(`No stake account found for sender ${a}`);return n?s[r].filter(i=>i.id===n):s[r]},Bo=async(t,e,o,r,n,a,s=false)=>{try{let{takeCoin:c,leftCoin:i,totalAmount:l}=s?await t.coins.selectSCoin(e,r,n,a):await t.coins.selectMarketCoin(e,r,n,a);if(s){let d=e.burnSCoin(r,c);e.stake(o,d,r);}else e.stake(o,c,r);return e.transferObjects([i],a),l}catch{return 0}},_o=({ctx:t,txBlock:e})=>({stakeQuick:async(o,r,n)=>{let a=I(e),s=await No(t,e,r,n);if(s.length===0)throw new Error(`No stakeAccountIds found for user ${a}`);if(typeof o=="number"){let c=await Bo(t,e,s[0],r,o,a);o-=c,o>0&&await Bo(t,e,s[0],r,o,a,true);}else e.stake(s[0],o,r);},unstakeQuick:async(o,r,n,a=true)=>{let s=await Ps(t,e,r,n),c=[];for(let i of s){if(i.staked===0)continue;let l=Math.min(o,i.staked),d=e.unstake(i.id,l,r);if(a){let u=e.mintSCoin(r,d);c.push(u);}else c.push(d);if(o-=l,o<=0)break}if(c.length>0){let i=c[0];return c.length>1&&e.mergeCoins(i,c.slice(1)),i}},claimQuick:async(o,r)=>{let n=await No(t,e,o,r),a=[];for(let s of n){let c=await e.claim(s,o);a.push(c);}return a}});var Fo=(t,e)=>{let o=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,r={address:t.address,moveCall:t.moveCall.bind(t),utils:t.utils},n={reads:{getAllStakeAccounts:i=>t.query.getAllStakeAccounts(i)},coins:{selectMarketCoin:(...i)=>t.selectMarketCoin(...i),selectSCoin:(...i)=>t.selectSCoin(...i)}},a=jo({ctx:r,txBlock:o}),s=new Proxy(o,{get:(i,l)=>l in a?Reflect.get(a,l):Reflect.get(i,l)}),c=_o({ctx:n,txBlock:s});return new Proxy(s,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var Do=({ctx:t,txBlock:e})=>{let o={borrowIncentivePkg:t.address.get("borrowIncentive.id"),query:t.address.get("borrowIncentive.query"),config:t.address.get("borrowIncentive.config"),incentivePools:t.address.get("borrowIncentive.incentivePools"),incentiveAccounts:t.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:t.address.get("core.obligationAccessStore")},r={table:t.address.get("vesca.table"),treasury:t.address.get("vesca.treasury"),config:t.address.get("vesca.config")},n=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {stakeObligation:(a,s)=>{t.moveCall(e,`${o.borrowIncentivePkg}::user::stake`,[o.config,o.incentivePools,o.incentiveAccounts,s,a,o.obligationAccessStore,n]);},stakeObligationWithVesca:(a,s,c)=>{t.moveCall(e,`${o.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,[o.config,o.incentivePools,o.incentiveAccounts,s,a,o.obligationAccessStore,r.config,r.treasury,r.table,c,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),n],[]);},unstakeObligation:(a,s)=>{t.moveCall(e,`${o.borrowIncentivePkg}::user::unstake_v2`,[o.config,o.incentivePools,o.incentiveAccounts,s,a,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),n]);},claimBorrowIncentive:(a,s,c)=>{let i=t.utils.parseCoinType(c);return t.moveCall(e,`${o.borrowIncentivePkg}::user::redeem_rewards`,[o.config,o.incentivePools,o.incentiveAccounts,s,a,n],[i])},deactivateBoost:(a,s)=>{t.moveCall(e,`${o.borrowIncentivePkg}::user::deactivate_boost_v2`,[o.config,o.incentivePools,o.incentiveAccounts,a,s,t.address.get("vesca.subsTable"),t.address.get("vesca.subsWhitelist"),n]);}}};var Je=async(...t)=>{let[e,o,r,n]=t;if(t.length===4&&r&&n&&typeof r=="string"){let i=await e.reads.getObligationLocked(r);return {obligationId:r,obligationKey:n,obligationLocked:i}}let a=I(o),s=await e.reads.getObligations(a);if(s.length===0)throw new Error(`No obligation found for sender ${a}`);let c=s.find(i=>i.id===r||i.keyId===n);if(!c)throw new Error(`No obligation found for sender ${a} with id ${r} or key ${n}`);return {obligationId:c.id,obligationKey:c.keyId,obligationLocked:c.locked}},Lo=({ctx:t,txBlock:e})=>({stakeObligationQuick:async(o,r)=>{let{obligationId:n,obligationKey:a,obligationLocked:s}=await Je(t,e,o,r),c=!!e.txBlock.getData().commands.find(i=>i.$kind==="MoveCall"&&(ae(i)===`${jt}::user::unstake`||ae(i)===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||ae(i)===`${t.address.get("borrowIncentive.id")}::user::unstake`));(!s||c)&&e.stakeObligation(n,a);},stakeObligationWithVeScaQuick:async(o,r,n)=>{let{obligationId:a,obligationKey:s,obligationLocked:c}=await Je(t,e,o,r),i=!!e.txBlock.getData().commands.find(l=>l.$kind==="MoveCall"&&(ae(l)===`${jt}::user::unstake`||ae(l)===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`||ae(l)===`${t.address.get("borrowIncentive.id")}::user::unstake`));if(!c||i){let d=await t.reads.getBindedVeScaKey(a)??n;d?e.stakeObligationWithVesca(a,s,d):e.stakeObligation(a,s);}},unstakeObligationQuick:async(o,r)=>{let{obligationId:n,obligationKey:a,obligationLocked:s}=await Je(t,e,o,r);s&&e.unstakeObligation(n,a);},claimBorrowIncentiveQuick:async(o,r,n)=>{let{obligationId:a,obligationKey:s}=await Je(t,e,r,n);return e.claimBorrowIncentive(a,s,o)}});var Vo=(t,e)=>{let o=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,r={address:t.address,moveCall:t.moveCall.bind(t),utils:t.utils},n={address:t.address,reads:{getObligations:i=>t.query.getObligations(i),getObligationLocked:i=>t.query.getObligationLocked(i),getBindedVeScaKey:i=>t.query.getBindedVeScaKey(i)}},a=Do({ctx:r,txBlock:o}),s=new Proxy(o,{get:(i,l)=>l in a?Reflect.get(a,l):Reflect.get(i,l)}),c=Lo({ctx:n,txBlock:s});return new Proxy(s,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var qo=({ctx:t,txBlock:e})=>{let o={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")},r=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {lockSca:(n,a)=>t.moveCall(e,`${o.id}::ve_sca::mint_ve_sca_key`,[o.config,o.table,o.treasury,n,a,r],[]),extendLockPeriod:(n,a)=>{t.moveCall(e,`${o.id}::ve_sca::extend_lock_period`,[o.config,n,o.table,o.treasury,a,r],[]);},extendLockAmount:(n,a)=>{t.moveCall(e,`${o.id}::ve_sca::lock_more_sca`,[o.config,n,o.table,o.treasury,a,r],[]);},renewExpiredVeSca:(n,a,s)=>{t.moveCall(e,`${o.id}::ve_sca::renew_expired_ve_sca`,[o.config,n,o.table,o.treasury,a,s,r],[]);},redeemSca:n=>t.moveCall(e,`${o.id}::ve_sca::redeem`,[o.config,n,o.table,o.treasury,r],[]),mintEmptyVeSca:()=>t.moveCall(e,`${o.id}::ve_sca::mint_ve_sca_placeholder_key`,[o.config,o.table],[]),splitVeSca:(n,a)=>t.moveCall(e,`${o.id}::ve_sca::split`,[o.config,n,o.table,o.subsTable,e.pure.u64(a)]),mergeVeSca:(n,a)=>t.moveCall(e,`${o.id}::ve_sca::merge`,[o.config,n,a,o.table,o.subsTable,e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],[])}};var ve=async(...t)=>{let[e,o,r]=t;if(t.length===3&&r&&typeof r<"u"){let s=await e.reads.getVeSca(r);return s||void 0}let n=I(o),a=await e.reads.getVeScas({walletAddress:n});if(a.length!==0)return r?a.find(({keyId:s})=>(typeof r=="string"?r:r.objectId)===s):a[0]},Dt=async(...t)=>{let[e,o,r]=t;try{return await e.reads.isVeScaKeyInSubsTable(o,r)}catch(n){return e.utils.logger.error("isInSubsTable lookup failed",{veScaKey:o,tableId:r,message:n?.message}),false}},Wo=({ctx:t,txBlock:e})=>({lockScaQuick:async({amountOrCoin:o,lockPeriodInDays:r,autoCheck:n=true,veScaKey:a})=>{let s=I(e),c=await ve(t,e,a),i=t.utils.getUnlockAt(r,c?.unlockAt);n&&yo(o,r,i,c?.unlockAt);let l,d=[];if(o!==void 0&&typeof o=="number"){let m=await t.utils.selectCoins({amount:o,coinType:qe,ownerAddress:s}),[f,b]=e.takeAmountFromCoins(m,o);l=f,d.push(b);}else l=o;let u=!c,p=!u&&c.unlockAt<=new Date().getTime();if(u||p){if(l)if(u){let m=e.lockSca(l,i);d.push(m);}else {if(c.lockedScaCoin!==0){let m=e.redeemSca(c.keyId);d.push(m);}e.renewExpiredVeSca(c.keyId,l,i);}}else l&&r?(e.extendLockPeriod(c.keyId,i),e.extendLockAmount(c.keyId,l)):r?e.extendLockPeriod(c.keyId,i):l&&e.extendLockAmount(c.keyId,l);d.length>0&&e.transferObjects(d,s);},extendLockPeriodQuick:async({lockPeriodInDays:o,veScaKey:r,autoCheck:n=true})=>{let a=await ve(t,e,r),s=t.utils.getUnlockAt(o,a?.unlockAt);n&&Mt(o,s,a?.unlockAt),a&&e.extendLockPeriod(a.keyId,s);},extendLockAmountQuick:async({scaAmount:o,veScaKey:r,autoCheck:n=true})=>{let a=I(e),s=await ve(t,e,r);if(n&&fo(o,s?.unlockAt),s){let c=await t.utils.selectCoins({amount:o,coinType:qe,ownerAddress:a}),[i,l]=e.takeAmountFromCoins(c,o);e.extendLockAmount(s.keyId,i),e.transferObjects([l],a);}},renewExpiredVeScaQuick:async({scaAmount:o,lockPeriodInDays:r,veScaKey:n,autoCheck:a=true})=>{let s=I(e),c=await ve(t,e,n),i=t.utils.getUnlockAt(r,c?.unlockAt);if(a&&go(o,r,c?.unlockAt),c){let l=[];if(c.lockedScaCoin!==0){let m=e.redeemSca(c.keyId);l.push(m);}let d=await t.utils.selectCoins({amount:o,coinType:qe,ownerAddress:s}),[u,p]=e.takeAmountFromCoins(d,o);l.push(p),e.renewExpiredVeSca(c.keyId,u,i),e.transferObjects(l,s);}},redeemScaQuick:async({veScaKey:o,transferSca:r})=>{let n=I(e),a=await ve(t,e,o);if(Ae(a?.unlockAt),a){let s=e.redeemSca(a.keyId);if(r){e.transferObjects([s],n);return}return s}},splitVeScaQuick:async({splitAmount:o,veScaKey:r,transferVeScaKey:n=true})=>{let a=await Dt(t,r,t.address.get("vesca.subsTable")),s=!!e.txBlock.getData().commands.find(i=>i.$kind==="MoveCall"&&ae(i)===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if(a&&!s)throw new Error("Key cannot be in the subs table, please call unsubscribe vesca or unstake obligation first");let c=e.splitVeSca(r,o);if(n){e.transferObjects([c],I(e));return}else return c},mergeVeScaQuick:async({targetVeScaKey:o,sourceVeScaKey:r})=>{let n=t.address.get("vesca.subsTableId"),[a,s]=await Promise.all([Dt(t,o,n),Dt(t,r,n)]),c=!!e.txBlock.getData().commands.find(d=>d.$kind==="MoveCall"&&ae(d)===`${t.address.get("borrowIncentive.id")}::user::unstake_v2`);if((a||s)&&!c)throw new Error("Both target and source cannot be in the subs table. Please call unsubscribe vesca or unstake obligation first");let[i,l]=await Promise.all([t.reads.getVeSca(r),t.reads.getVeSca(o)]);if(!i||!l)throw new Error("Source or target veSCA not found");return i.unlockAt<l.unlockAt?e.extendLockPeriod(i.keyId,l.unlockAt/1e3):i.unlockAt>l.unlockAt&&e.extendLockPeriod(l.keyId,i.unlockAt/1e3),e.mergeVeSca(o,r)}});var Qo=(t,e)=>{let o=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,r={address:t.address,moveCall:t.moveCall.bind(t),utils:t.utils},n={address:t.address,utils:t.utils,reads:{getVeSca:i=>t.query.getVeSca(i),getVeScas:i=>t.query.getVeScas(i),isVeScaKeyInSubsTable:(i,l)=>t.query.repos.veSca.isVeScaKeyInSubsTable(i,l)}},a=qo({ctx:r,txBlock:o}),s=new Proxy(o,{get:(i,l)=>l in a?Reflect.get(a,l):Reflect.get(i,l)}),c=Wo({ctx:n,txBlock:s});return new Proxy(s,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var $o=({ctx:t,txBlock:e})=>{let o={referralPgkId:t.address.get("referral.id"),referralBindings:t.address.get("referral.referralBindings"),referralRevenuePool:t.address.get("referral.referralRevenuePool"),authorizedWitnessList:t.address.get("referral.authorizedWitnessList"),referralTiers:t.address.get("referral.referralTiers"),version:t.address.get("referral.version")},r=t.address.get("vesca.table"),n=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {bindToReferral:a=>{t.moveCall(e,`${o.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[o.referralBindings,e.pure.id(a),r,n],[]);},claimReferralTicket:a=>{let s=t.utils.parseCoinType(a);return t.moveCall(e,`${o.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[o.version,r,o.referralBindings,o.authorizedWitnessList,o.referralTiers,n],[s])},burnReferralTicket:(a,s)=>{let c=t.utils.parseCoinType(s);t.moveCall(e,`${o.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[o.version,a,o.referralRevenuePool,n],[c]);},claimReferralRevenue:(a,s)=>{let c=t.utils.parseCoinType(s);return t.moveCall(e,`${o.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[o.version,o.referralRevenuePool,a,n],[c])},unbindReferral:()=>t.moveCall(e,`${o.referralPgkId}::referral_bindings::unbind_ve_sca_referrer`,[o.referralBindings])}};var Go=({ctx:t,txBlock:e})=>({claimReferralRevenueQuick:async(o,r=[...t.constants.whitelist.lending])=>{let n=I(e),a=[];for(let s of r)if(s==="sui"){let c=e.claimReferralRevenue(o,s);a.push(c);}else {let c=e.claimReferralRevenue(o,s);try{let i=await t.utils.selectCoins({amount:1/0,coinType:t.utils.parseCoinType(s),ownerAddress:n});e.mergeCoins(c,i.slice(0,500));}catch{}finally{a.push(c);}}a.length>0&&e.transferObjects(a,n);}});var Yo=(t,e)=>{let o=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,r={address:t.address,moveCall:t.moveCall.bind(t),utils:t.utils},n={utils:t.utils,constants:{whitelist:t.constants.whitelist}},a=$o({ctx:r,txBlock:o}),s=new Proxy(o,{get:(i,l)=>l in a?Reflect.get(a,l):Reflect.get(i,l)}),c=Go({ctx:n,txBlock:s});return new Proxy(s,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var Ho=({ctx:t,txBlock:e})=>{let o={pkgId:t.address.get("loyaltyProgram.id"),scaRewardPool:t.address.get("loyaltyProgram.rewardPool")},r={object:t.address.get("vesca.object"),protocolConfig:t.address.get("vesca.config"),veScaTable:t.address.get("vesca.table"),subsTable:t.address.get("vesca.subsTable")},n={pkgId:t.address.get("veScaLoyaltyProgram.id"),veScaRewardPool:t.address.get("veScaLoyaltyProgram.veScaRewardPool")};return {claimLoyaltyRevenue:a=>t.moveCall(e,`${o.pkgId}::reward_pool::redeem_reward`,[o.scaRewardPool,a]),claimVeScaLoyaltyReward:a=>t.moveCall(e,`${n.pkgId}::ve_sca_reward::redeem_reward`,[n.veScaRewardPool,a,r.protocolConfig,r.veScaTable,r.subsTable])}};var Xo=({ctx:t,txBlock:e})=>({claimLoyaltyRevenueQuick:async o=>{o=o??(await t.reads.getVeScas())[0]?.keyId;let r=I(e);if(!o)throw new Error(`No veScaKey found for user ${r}`);let n=e.claimLoyaltyRevenue(o),a=t.constants.coinTypes.sca;if(!a)throw new Error("Coin type sca not found");await t.utils.mergeSimilarCoins(e,n,a,I(e)),e.transferObjects([n],r);},claimVeScaLoyaltyRewardQuick:async o=>{o=o??(await t.reads.getVeScas())[0]?.keyId;let r=I(e);if(!o)throw new Error(`No veScaKey found for user ${r}`);let n=e.claimVeScaLoyaltyReward(o);e.transferObjects([n],r);}});var Zo=(t,e)=>{let o=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,r={address:t.address,moveCall:t.moveCall.bind(t),utils:t.utils},n={utils:t.utils,reads:{getVeScas:(...i)=>t.query.getVeScas(...i)},constants:{coinTypes:t.constants.coinTypes}},a=Ho({ctx:r,txBlock:o}),s=new Proxy(o,{get:(i,l)=>l in a?Reflect.get(a,l):Reflect.get(i,l)}),c=Xo({ctx:n,txBlock:s});return new Proxy(s,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var er=({ctx:t,txBlock:e})=>{let o={pkgId:t.address.get("scoin.id")};return {mintSCoin:(r,n)=>{let a=t.utils.parseSCoinType(r);if(!a)throw new Error(`Invalid marketCoinName name: ${r}`);return t.moveCall(e,`${o.pkgId}::s_coin_converter::mint_s_coin`,[t.utils.getSCoinTreasury(r),n],[a,t.utils.parseUnderlyingSCoinType(r)])},burnSCoin:(r,n)=>{let a=t.utils.parseSCoinType(r);if(!a)throw new Error(`Invalid sCoin name: ${r}`);return t.moveCall(e,`${o.pkgId}::s_coin_converter::burn_s_coin`,[t.utils.getSCoinTreasury(r),n],[a,t.utils.parseUnderlyingSCoinType(r)])}}};var tr=({ctx:t,txBlock:e})=>({mintSCoinQuick:async(o,r)=>{let n=I(e),{leftCoin:a,takeCoin:s}=await t.coins.selectMarketCoin(e,o,r,n);return e.transferObjects([a],n),e.mintSCoin(o,s)},burnSCoinQuick:async(o,r)=>{let n=I(e),{leftCoin:a,takeCoin:s}=await t.coins.selectSCoin(e,o,r,n);return e.transferObjects([a],n),e.burnSCoin(o,s)}});var rr=(t,e)=>{let o=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,r={address:t.address,moveCall:t.moveCall.bind(t),utils:t.utils},n={utils:t.utils,coins:{selectMarketCoin:(...i)=>t.selectMarketCoin(...i),selectSCoin:(...i)=>t.selectSCoin(...i)}},a=er({ctx:r,txBlock:o}),s=new Proxy(o,{get:(i,l)=>l in a?Reflect.get(a,l):Reflect.get(i,l)}),c=tr({ctx:n,txBlock:s});return new Proxy(s,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var nr=["openObligation","returnObligation","openObligationEntry","depositCollateral","takeCollateral","supply","depositEntry","withdraw","withdrawEntry","borrow","borrowWithReferral","borrowEntry","repay","borrowFlashLoan","repayFlashLoan","liquidate"],ar=["depositCollateralQuick","takeCollateralQuick","borrowQuick","borrowWithReferralQuick","supplyQuick","withdrawQuick","repayQuick","updateAssetPricesQuick","liquidateQuick"],sr=["createStakeAccount","stake","unstake","claim","stakeQuick","unstakeQuick","claimQuick"],ir=["stakeObligation","stakeObligationWithVesca","unstakeObligation","claimBorrowIncentive","deactivateBoost","stakeObligationQuick","stakeObligationWithVeScaQuick","unstakeObligationQuick","claimBorrowIncentiveQuick"],cr=["lockSca","extendLockPeriod","extendLockAmount","renewExpiredVeSca","redeemSca","mintEmptyVeSca","splitVeSca","mergeVeSca","lockScaQuick","extendLockPeriodQuick","extendLockAmountQuick","renewExpiredVeScaQuick","redeemScaQuick","splitVeScaQuick","mergeVeScaQuick"],lr=["bindToReferral","claimReferralTicket","burnReferralTicket","claimReferralRevenue","unbindReferral","claimReferralRevenueQuick"],dr=["claimLoyaltyRevenue","claimVeScaLoyaltyReward","claimLoyaltyRevenueQuick","claimVeScaLoyaltyRewardQuick"],ur=["mintSCoin","burnSCoin","mintSCoinQuick","burnSCoinQuick"];var Se=(t,e)=>{let o={};for(let r of e){let n=t[r];typeof n=="function"&&(o[r]=n);}return Object.freeze(o)},pr=t=>{let e=t;return Object.freeze({core:Se(e,[...nr,...ar]),spool:Se(e,sr),borrowIncentive:Se(e,ir),vesca:Se(e,cr),referral:Se(e,lr),loyalty:Se(e,dr),sCoin:Se(e,ur)})},mr=["core","spool","borrowIncentive","vesca","referral","loyalty","sCoin"];var br=(t,e)=>{let o=Qo(t,e),r=Zo(t,o),n=Vo(t,r),a=Yo(t,n),s=rr(t,a),c=Fo(t,s),i=Io(t,c),l=new Proxy(i,{get:(p,m)=>m in o?Reflect.get(o,m):m in n?Reflect.get(n,m):m in a?Reflect.get(a,m):m in c?Reflect.get(c,m):m in r?Reflect.get(r,m):m in s?Reflect.get(s,m):Reflect.get(p,m)}),d=pr(l),u=new Set(mr);return new Proxy(l,{get:(p,m)=>typeof m=="string"&&u.has(m)?d[m]:Reflect.get(p,m),has:(p,m)=>typeof m=="string"&&u.has(m)?true:Reflect.has(p,m)})};var yr={effects:true,events:true},xe=class{constructor(e){this.suiKit=e;}get client(){return this.suiKit.client.core}signTransaction(e,o){return this.suiKit.signTxn(e,o)}executeTransaction(e){return this.client.executeTransaction({include:yr,...e})}signAndExecuteTransaction({transaction:e,additionalSignatures:o,signer:r,derivePathParams:n}){return this.client.signAndExecuteTransaction({transaction:e,additionalSignatures:o,include:yr,signer:r??this.suiKit.getKeypair(n)})}signAndSendTxn(e,o){let r=e instanceof Uint8Array?e:"txBlock"in e?e.txBlock:e;return this.signAndExecuteTransaction({transaction:r,derivePathParams:o})}};var k=(t,e)=>{let o=e instanceof G?e.context:void 0;return t?.error(e.message,o),e},V=async t=>{if(t.source==="api")return t.api();if(t.source==="api-first")try{return await t.api()}catch(e){return t.logger?.warn(`[${t.label}] api failed, falling back to onchain`,{cause:e instanceof Error?e.message:String(e)}),t.onchain()}return t.onchain()},Fs=async(t,e)=>t.fetchWithCache({queryKey:g.rpc.getDynamicFieldObject({...e,node:t.onchain.url}),queryFn:()=>t.onchain.client.getDynamicField(e)}),Ds=new Set(["notExists","dynamicFieldNotFound","deleted"]),Lt=t=>{if(!(t instanceof Error))return false;let e=t.code;return typeof e=="string"&&Ds.has(e)?true:/does not exist|not exist|not found|dynamic field|deleted/i.test(t.message)},ce=async(t,e)=>{try{return await Fs(t,e)}catch(o){if(Lt(o))return null;throw o}};var pe=class{client;constructor({url:e,client:o,timeout:r=8e3}={}){this.client=o??Ls__default.default.create({baseURL:e,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:r});}async get(e){let o=await this.client.get(e);if(o.status!==200)throw new Error(`API request failed with status ${o.status}: ${o.statusText}`);return o.data}};var Ze=class extends pe{constructor({url:e=Ve,...o}){super({url:e,...o});}};var et=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(),r=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+r),this.lastRefillTime=e;}getTimeToNextToken(){if(this.refill(),this.tokens>=1)return 0;let e=1-this.tokens;return Math.ceil(e/this.refillRate)}async acquireToken(){for(;;){let e=this.getTimeToNextToken();if(e===0){if(this.tokens>=1){this.tokens-=1;return}continue}await new Promise(o=>setTimeout(o,e)),this.refill();}}async execute(e){return await this.acquireToken(),await e()}};var Es=["getObjects","listOwnedObjects","listCoins","listDynamicFields","getDynamicField","getBalance","listBalances","getCoinMetadata","getTransaction","getReferenceGasPrice","getCurrentSystemState","getProtocolConfig","getChainIdentifier","defaultNameServiceName","getMoveFunction","simulateTransaction"],Vs=new Set(Es),fr=new Map;var Ks=(t,e)=>{let o=fr.get(t)??{calls:0,waitMs:0};o.calls+=1,o.waitMs+=e,fr.set(t,o);},qs=(t,e)=>new Proxy(t,{get(o,r,n){let a=Reflect.get(o,r,n);if(typeof a!="function")return a;let s=a.bind(o);return typeof r=="string"&&Vs.has(r)?(...c)=>{let i=Date.now();return e.execute(()=>(Ks(r,Date.now()-i),s(...c)))}:s}}),tt=class{client;url;constructor({client:e,url:o,tokensPerSecond:r}){this.client=qs(e,new et(r)),this.url=o;}async getObject(e){let{objectId:o}=e,{objects:[r]}=await this.client.getObjects({objectIds:[o],signal:e.signal,include:e.include});if(r instanceof Error)throw r;return {object:r}}};var Et=(t,e,o)=>new tt({client:t.core,url:e,tokensPerSecond:o?.tokensPerSecond}),gr=(t=Ve)=>new Ze({url:t}),hr=(t=Ee)=>new pe({url:t});var Sr=["supra","switchboard","pyth"];var Cr=t=>({whitelist:{lending:t.constants.whitelist.lending,collateral:t.constants.whitelist.collateral},poolAddresses:t.constants.poolAddresses,parseCoinNameFromType:e=>t.parseCoinNameFromType(e),parseCoinType:e=>t.parseCoinType(e),parseSymbol:e=>t.parseSymbol(e),parseMarketCoinType:e=>t.parseMarketCoinType(e),parseMarketCoinName:e=>t.parseMarketCoinName(e),parseSCoinType:e=>t.parseSCoinType(e),getCoinWrappedType:e=>t.getCoinWrappedType(e),getCoinDecimal:e=>t.getCoinDecimal(e),parseAprToApy:e=>t.parseAprToApy(e)}),wr=t=>({queryPackageId:t.address.get("core.packages.query.id"),market:t.address.get("core.market")}),xr=t=>{let e=t.address.getAddresses();if(!e)throw new re("Addresses are not initialized; call init() before building repositories");return {whitelist:{lending:t.constants.whitelist.lending,scoin:t.constants.whitelist.scoin},addresses:{scoin:e.scoin},parseCoinType:o=>t.parseCoinType(o),parseSCoinType:o=>t.parseSCoinType(o),parseMarketCoinType:o=>t.parseMarketCoinType(o),parseSCoinNameFromType:o=>t.parseSCoinNameFromType(o),parseUnderlyingSCoinType:o=>t.parseUnderlyingSCoinType(o),getSCoinTreasury:o=>t.getSCoinTreasury(o),getCoinDecimal:o=>t.getCoinDecimal(o),parseCoinName:o=>t.parseCoinName(o)}},Tr=t=>{let e=Object.entries(t.constants.coinTypeToCoinNameMap).filter(o=>o[1]!==void 0);return {coinTypeToCoinNameMap:new Map(e)}},kr=t=>({addresses:{protocolObjectId:t.address.get("core.object"),queryPackageId:t.address.get("core.packages.query.id"),version:t.address.get("core.version"),market:t.address.get("core.market")}}),Ar=t=>{let e=t.address.getAddresses();if(!e)throw new re("Addresses are not initialized; call init() before building repositories");return {whitelist:{lending:t.constants.whitelist.lending},addresses:{borrowIncentive:e.borrowIncentive,core:{object:t.address.get("core.object")},vesca:{object:t.address.get("vesca.object")}},parseCoinNameFromType:o=>t.parseCoinNameFromType(o),parseSymbol:o=>t.parseSymbol(o),getCoinDecimal:o=>t.getCoinDecimal(o)}},Or=t=>({addresses:{referral:{bindingTableId:t.address.get("referral.bindingTableId")}}}),Pr=t=>{let e=t.address.getAddresses();if(!e)throw new re("Addresses are not initialized; call init() before building repositories");return {addresses:{coins:Object.fromEntries(Object.entries(e.core.coins).filter(r=>r[1]!==void 0))}}},Rr=t=>{let e=t.address.getAddresses();if(!e)throw new re("Addresses are not initialized; call init() before building repositories");return {addresses:{core:{coins:e.core.coins,market:e.core.market},spool:{pools:e.spool.pools},scoin:{coins:e.scoin.coins}}}},vr=t=>({addresses:{market:t.address.get("core.market")},poolAddresses:t.constants.poolAddresses,whitelist:{lending:t.constants.whitelist.lending}}),Ir=t=>({addresses:{veSca:{id:t.address.get("vesca.id"),config:t.address.get("vesca.config"),tableId:t.address.get("vesca.tableId"),object:t.address.get("vesca.object"),treasury:t.address.get("vesca.treasury")}}}),jr=t=>({addresses:{loyaltyProgram:{rewardPool:t.address.get("loyaltyProgram.rewardPool")}}}),Nr=t=>{let e=t.address.getAddresses();if(!e)throw new re("Addresses are not initialized; call init() before building repositories");return {addresses:{veSca:{tableId:e.vesca.tableId},veScaLoyaltyProgram:{veScaRewardPool:e.veScaLoyaltyProgram.veScaRewardPool,veScaRewardTableId:e.veScaLoyaltyProgram.veScaRewardTableId}}}},Br=t=>({whitelist:{spool:t.constants.whitelist.spool},addresses:{spoolObjectId:t.address.get("spool.object"),spools:[...t.constants.whitelist.spool].reduce((e,o)=>(e[o]={id:t.address.get(`spool.pools.${o}.id`),rewardPoolId:t.address.get(`spool.pools.${o}.rewardPoolId`)},e),{})},poolAddresses:t.constants.poolAddresses,parseCoinName:e=>t.parseCoinName(e),parseSymbol:e=>t.parseSymbol(e),parseCoinType:e=>t.parseCoinType(e),parseMarketCoinType:e=>t.parseMarketCoinType(e),parseSCoinType:e=>t.parseSCoinType(e),isMarketCoin:e=>t.isMarketCoin(e),getCoinDecimal:e=>t.getCoinDecimal(e)??0,getSpoolRewardCoinName:()=>t.getSpoolRewardCoinName()}),_r=t=>({addresses:{...Sr.reduce((e,o)=>(e[o]={object:t.address.get(`core.packages.${o}.object`)},e),{}),xOracleObject:t.address.get("core.packages.xOracle.object"),oracles:{primaryPriceUpdatePolicyVecsetId:t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"),secondaryPriceUpdatePolicyVecsetId:t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),primaryPriceUpdatePolicyObject:t.address.get("core.oracles.primaryPriceUpdatePolicyObject"),secondaryPriceUpdatePolicyObject:t.address.get("core.oracles.secondaryPriceUpdatePolicyObject"),switchboardRegistryTableId:t.address.get("core.oracles.switchboard.registryTableId")}},whitelist:{lending:t.constants.whitelist.lending},parseCoinNameFromType:e=>t.parseCoinNameFromType(e),parseCoinType:e=>t.parseCoinType(e),getSwitchboardAggAddress:e=>t.address.get(`core.coins.${e}.oracle.switchboard`)});var me={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{}};var Wu={debug:(t,e)=>e?console.debug(t,e):console.debug(t),info:(t,e)=>e?console.info(t,e):console.info(t),warn:(t,e)=>e?console.warn(t,e):console.warn(t),error:(t,e)=>e?console.error(t,e):console.error(t)};var Mr=(t,e)=>async o=>{try{return await t.fetchQuery(o)}catch(r){throw e.error("Error fetching query",{queryKey:o.queryKey}),r}};var Fr=new queryCore.QueryClient(Ke);var R=class{queryClient;logger;metadata;fetchWithCache;constructor({queryClient:e=Fr,logger:o=me,metadata:r}){this.queryClient=e,this.logger=o,this.metadata=r,this.fetchWithCache=Mr(this.queryClient,this.logger);}get baseContext(){return {fetchWithCache:this.fetchWithCache,logger:this.logger,metadata:this.metadata}}};function U(t){let{type:e,value:o}=t;if(t.bcs instanceof Uint8Array)return {type:e,bcs:t.bcs};if(o===void 0)throw new Error(`DynamicField name must have 'value' or 'bcs' for type: ${e}`);let r;if(e==="0x2::object::ID"||e==="address"||e.includes("::typed_id::TypedID"))r=bcs.bcs.Address.serialize(o).toBytes();else if(e==="u64"||e==="u8"||e==="u128"||e==="u256")r={u64:bcs.bcs.u64(),u8:bcs.bcs.u8(),u128:bcs.bcs.u128(),u256:bcs.bcs.u256()}[e].serialize(o).toBytes();else if(e.includes("::type_name::TypeName")){let n=typeof o=="object"&&o!==null&&"name"in o?o.name:suiKit.normalizeStructTag(o);r=bcs.bcs.struct("TypeName",{name:bcs.bcs.string()}).serialize({name:n}).toBytes();}else r=bcs.bcs.string().serialize(o).toBytes();return {type:e,bcs:r}}var ye=(t,e)=>{let o=[];for(let r=0;r<t.length;r+=e)o.push(t.slice(r,r+e));return o};var Qs="0x0000000000000000000000000000000000000000000000000000000000000002::dynamic_field::Field",rt=t=>typeof t=="object"&&t!==null,$s=t=>!rt(t)||t.$kind!=="Shared"||!("Shared"in t)||!rt(t.Shared)?false:"initialSharedVersion"in t.Shared;function Gs(t){if(!t?.json)throw new Error(`Failed to parse object: ${JSON.stringify(t,null,2)}`)}var ot=t=>{if(Array.isArray(t))return t.map(ot);if(typeof t=="object"&&t!==null){let e=t;if("type"in e&&"fields"in e&&typeof e.type=="string")return ot(e.fields);let o={};for(let[r,n]of Object.entries(e))o[r]=ot(n);return o}return t},Lr=t=>{Gs(t);let e=t.json,o="fields"in e?e.fields:e;return ot(o)},Dr=t=>$s(t.owner)?{objectId:t.objectId,initialSharedVersion:String(t.owner.Shared.initialSharedVersion)}:t,zs=(t,{obj:e,mutable:o=false})=>typeof e=="object"&&"initialSharedVersion"in e?t.sharedObjectRef({objectId:e.objectId,initialSharedVersion:e.initialSharedVersion.toString(),mutable:o}):typeof e=="object"&&"objectId"in e?t.object(e.objectId):typeof e=="string"?t.object(e):e,Z=async({onchain:t,fetchWithCache:e},{tx:o,objectId:r,mutable:n=false,include:a})=>{let s;if(typeof r=="string"){let c=await e({queryKey:g.rpc.getSharedObject({objectId:r,node:t.url}),queryFn:()=>t.getObject({objectId:r,include:a})});if(!c?.object)throw new Error("Failed to get object data");s=Dr(c.object);}else "objectId"in r&&"owner"in r&&(s=Dr(r));return zs(o,{obj:s??r,mutable:n})},Ys=zod.z.union([zod.z.string(),zod.z.object({name:zod.z.string()}),zod.z.object({id:zod.z.string()}),zod.z.object({bytes:zod.z.string()}),zod.z.record(zod.z.unknown())]),Hs=zod.z.union([zod.z.string(),zod.z.object({id:zod.z.string()})]),Xs=zod.z.object({id:Hs,name:Ys,value:zod.z.unknown().optional()}),Er=t=>t.type.startsWith(Qs),Vr=t=>{let{success:e}=Xs.safeParse(t);return !!e},Js=t=>typeof t=="string"?t:t.id,Zs=t=>{if(!Vr(t))throw new Error(`Invalid dynamic field data: ${JSON.stringify(t,null,2)}`);let{value:e}=t;return e},ei=t=>{if(typeof t=="string")return t;if(!rt(t))return;let e=t,o=e.name,r=e.id,n=e.bytes;if(typeof o=="string")return o;if(typeof r=="string")return r;if(typeof n=="string")return n},ti=t=>{if(typeof t=="string")return t.includes("::")?"type":"string";if(!rt(t))return "string";let e=t;if(typeof e.id=="string")return "id";if(typeof e.bytes=="string")return "bytes";let o=e.name;return typeof o=="string"&&o.includes("::")?"type":"string"},A=t=>{let e=Lr(t);return Er(t)&&typeof e=="object"?Zs(e):e},Kr=t=>{if(!Er(t))throw new Error(`Object ${t.objectId} is not a dynamic field object`);let e=Lr(t);if(Vr(e)){let o=ei(e.name);if(!o)throw new Error(`Failed to parse dynamic field name from object ${t.objectId}: ${JSON.stringify(e.name,null,2)}`);return {objectId:Js(e.id),name:o,nameKind:ti(e.name)}}throw new Error(`Failed to parse dynamic field object ${t.objectId}, invalid fields: ${JSON.stringify(e,null,2)}`)};var qr=t=>{if(t)return {...t,pools:(t.pools??[]).map((e,o)=>({...e,type:J(e.type,`market.pools[${o}].type`)})),collaterals:(t.collaterals??[]).map((e,o)=>({...e,type:J(e.type,`market.collaterals[${o}].type`)}))}};var Wr="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Ur="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Qr="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey";var Vt=t=>({coinType:utils.normalizeStructTag(t.type),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)}),Kt=(t,e)=>{let o=t.parseCoinNameFromType(e.coinType),r=t.getCoinDecimal(o);if(r===void 0)throw new T(`Coin decimal not found for ${o}`,{context:{coinName:o}});let n=24*365*3600,a=e.baseBorrowRate*n/e.borrowRateScale,s=e.borrowRateOnHighKink*n/e.borrowRateScale,c=e.borrowRateOnMidKink*n/e.borrowRateScale,i=e.maxBorrowRate*n/e.borrowRateScale,l=e.borrowRate*n/e.borrowRateScale,d=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=bignumber_js.BigNumber(e.borrowIndex).multipliedBy(bignumber_js.BigNumber(d).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),p=bignumber_js.BigNumber(e.borrowIndex).plus(u),m=bignumber_js.BigNumber(p).dividedBy(e.borrowIndex).minus(1),f=bignumber_js.BigNumber(e.debtAmount).multipliedBy(m),b=f.plus(e.debtAmount),y=b.shiftedBy(-r),h=bignumber_js.BigNumber(e.reserveAmount).plus(f.multipliedBy(e.reserveFactor)),S=h.shiftedBy(-r),w=bignumber_js.BigNumber(b).plus(Math.max(e.cashAmount-h.toNumber(),0)),O=w.shiftedBy(-r),_=bignumber_js.BigNumber(b).dividedBy(w);_=_.isFinite()?_:bignumber_js.BigNumber(0);let j=bignumber_js.BigNumber(l).multipliedBy(_).multipliedBy(1-e.reserveFactor);j=j.isFinite()?j:bignumber_js.BigNumber(0);let v=w.dividedBy(e.marketCoinSupplyAmount);return v=v.isFinite()&&!v.isNaN()?v:bignumber_js.BigNumber(1),{baseBorrowApr:a,baseBorrowApy:t.parseAprToApy(a),borrowAprOnHighKink:s,borrowApyOnHighKink:t.parseAprToApy(s),borrowAprOnMidKink:c,borrowApyOnMidKink:t.parseAprToApy(c),coinDecimal:r,maxBorrowApr:i,maxBorrowApy:t.parseAprToApy(i),borrowApr:Math.min(l,i),borrowApy:Math.min(t.parseAprToApy(l),t.parseAprToApy(i)),borrowIndex:p.toNumber(),growthInterest:m.toNumber(),supplyAmount:w.toNumber(),supplyCoin:O.toNumber(),borrowAmount:b.toNumber(),borrowCoin:y.toNumber(),reserveAmount:h.toNumber(),reserveCoin:S.toNumber(),utilizationRate:_.toNumber(),supplyApr:j.toNumber(),supplyApy:t.parseAprToApy(j.toNumber()),conversionRate:v.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:bignumber_js.BigNumber(e.supplyLimit).shiftedBy(-r).toNumber(),maxBorrowCoin:bignumber_js.BigNumber(e.borrowLimit).shiftedBy(-r).toNumber()}},qt=t=>({coinType:utils.normalizeStructTag(t.type),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)}),Wt=(t,e)=>{let o=t.parseCoinNameFromType(e.coinType),r=t.getCoinDecimal(o);if(r===void 0)throw new T(`Coin decimal not found for ${o}`,{context:{coinName:o}});let n=bignumber_js.BigNumber(e.maxCollateralAmount).shiftedBy(-r),a=bignumber_js.BigNumber(e.totalCollateralAmount).shiftedBy(-r);return {coinDecimal:r,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:n.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:a.toNumber()}},Gr=t=>{let e=bignumber_js.BigNumber(0),o=bignumber_js.BigNumber(0),r=bignumber_js.BigNumber(0);for(let n of Object.values(t.pools))n&&(e=e.plus(bignumber_js.BigNumber(n.supplyCoin).multipliedBy(n.coinPrice)),r=r.plus(bignumber_js.BigNumber(n.borrowCoin).multipliedBy(n.coinPrice)));for(let n of Object.values(t.collaterals))n&&(o=o.plus(bignumber_js.BigNumber(n.depositCoin).multipliedBy(n.coinPrice)));return {supplyValue:e.plus(o).toNumber(),supplyLendingValue:e.toNumber(),supplyCollateralValue:o.toNumber(),borrowValue:r.toNumber(),totalValue:e.plus(o).minus(r).toNumber()}};var Ut=async(t,{coinPrices:e,poolCoinNames:o,collateralCoinNames:r})=>{let{indexer:n,metadata:a,fetchWithCache:s}=t,c="api/market/migrate",i=await s({queryFn:()=>n.get(c),queryKey:g.api.getMarkets()}),l={},d={},u=o?new Set(o):void 0,p=r?new Set(r):void 0,m=b=>{u&&!u.has(b.coinName)||(l[b.coinName]={...b,coinPrice:e[b.coinName]??b.coinPrice,coinWrappedType:a.getCoinWrappedType(b.coinName)});},f=b=>{p&&!p.has(b.coinName)||(d[b.coinName]={...b,coinPrice:e[b.coinName]??b.coinPrice,coinWrappedType:a.getCoinWrappedType(b.coinName)});};return Object.values(i.pools).filter(Boolean).forEach(m),Object.values(i.collaterals).filter(Boolean).forEach(f),{pools:l,collaterals:d}},Qt=async(t,{coinPrices:e,poolCoinNames:o,collateralCoinNames:r})=>{let{onchain:n,addresses:a,fetchWithCache:s}=t,{queryPackageId:c,market:i}=a,l=new suiKit.SuiTxBlock,d=`${c}::market_query::market_data`,p=[await Z({onchain:n,fetchWithCache:s},{tx:l,mutable:true,objectId:i})];l.moveCall(d,p);let m=await s({queryKey:g.rpc.getInspectTxn({queryTarget:d,args:p.map(y=>typeof y=="object"&&"objectId"in y?y.objectId:y),typeArgs:[],node:n.url}),queryFn:()=>n.client.simulateTransaction({transaction:l.txBlock,include:{events:true}})}),f=m?.Transaction??m?.FailedTransaction;if(!f.status.success)throw k(t.logger,new P(`On-chain market query transaction failed: ${f.status.error.message}`));let b=qr(f?.events?.[0]?.json);return ri(t,b,{coinPrices:e,poolCoinNames:o,collateralCoinNames:r})},Yr=async(t,{coinPrice:e,coinName:o})=>{let r=await Ut(t,{coinPrices:{[o]:e}});if(!r.pools[o])throw k(t.logger,new T(`Market pool for ${o} not found in indexer data`,{context:{coinName:o}}));return {pool:r.pools[o],collateral:r.collaterals[o]}},Hr=async(t,{coinPrice:e,coinName:o})=>{let{metadata:r}=t,a=(await Zr(t,[o]))[o];if(!a)throw k(t.logger,new P(`Failed to fetch required market objects for ${o}`,{context:{coinName:o}}));let s=await si(t,a),c=Vt(s),i=Kt(r,c),l=s.parsedOriginMarketCollateral?qt(s.parsedOriginMarketCollateral):void 0,d=()=>({coinName:o,symbol:r.parseSymbol(o),marketCoinType:r.parseMarketCoinType(o),coinType:r.parseCoinType(o)});return {pool:{...d(),sCoinType:r.parseSCoinType(r.parseMarketCoinName(o))??"",coinWrappedType:r.getCoinWrappedType(o),coinPrice:e??0,highKink:c.highKink,midKink:c.midKink,reserveFactor:c.reserveFactor,borrowWeight:c.borrowWeight,borrowFee:c.borrowFee,marketCoinSupplyAmount:c.marketCoinSupplyAmount,minBorrowAmount:c.minBorrowAmount,...i},collateral:l?{...d(),coinWrappedType:r.getCoinWrappedType(o),coinPrice:e,collateralFactor:l.collateralFactor,liquidationFactor:l.liquidationFactor,liquidationDiscount:l.liquidationDiscount,liquidationPenalty:l.liquidationPenalty,liquidationReserveFactor:l.liquidationReserveFactor,...Wt(r,l)}:void 0}},Xr=async t=>{let{indexer:e,fetchWithCache:o}=t,r="/api/market/tvl";return o({queryKey:g.api.getTotalValueLocked(),queryFn:()=>e.get(r)})},Jr=async(t,{coinPrices:e})=>{let o=await Qt(t,{coinPrices:e});return Gr(o)},ri=async(t,e,{coinPrices:o,poolCoinNames:r,collateralCoinNames:n})=>{let{metadata:a}=t,s={},c={},i=r?new Set(r):void 0,l=n?new Set(n):void 0,d=new Set;for(let p of e?.pools??[]){let m=a.parseCoinNameFromType(p.type);a.whitelist.lending.has(m)&&(i&&!i.has(m)||d.add(m));}for(let p of e?.collaterals??[]){let m=a.parseCoinNameFromType(p.type);a.whitelist.collateral.has(m)&&(l&&!l.has(m)||d.add(m));}let u=await Zr(t,[...d],ai);for(let p of e?.pools??[]){let m=p.type,f=a.parseCoinNameFromType(m),b=o[f]??0;if(!a.whitelist.lending.has(f)||i&&!i.has(f))continue;let{supplyLimit:y,borrowLimit:h,isIsolated:S}=zr(u[f]??{}),w=Vt({...p,type:p.type,isIsolated:S,supplyLimit:y,borrowLimit:h}),O=Kt(a,w);s[f]={coinName:f,symbol:a.parseSymbol(f),marketCoinType:a.parseMarketCoinType(f),sCoinType:a.parseSCoinType(a.parseMarketCoinName(f))??"",coinWrappedType:a.getCoinWrappedType(f),coinPrice:b,...w,...O};}for(let p of e?.collaterals??[]){let m=p.type,f=a.parseCoinNameFromType(m),b=o[f]??0;if(!a.whitelist.collateral.has(f)||l&&!l.has(f))continue;let{isIsolated:y}=zr(u[f]??{}),h=qt({...p,type:p.type,liquidationPenalty:p.liquidationPanelty,isIsolated:y}),S=Wt(a,h);c[f]={coinName:f,symbol:a.parseSymbol(f),marketCoinType:a.parseMarketCoinType(f),coinWrappedType:a.getCoinWrappedType(f),coinPrice:b,...h,...S};}return {pools:s,collaterals:c}},ni=["lendingPoolAddress","collateralPoolAddress","borrowDynamic","interestModel","riskModel","borrowFeeKey","supplyLimitKey","borrowLimitKey","isolatedAssetKey"],ai=["supplyLimitKey","borrowLimitKey","isolatedAssetKey"],zr=t=>({supplyLimit:t.supplyLimitKey?A(t.supplyLimitKey):"0",borrowLimit:t.borrowLimitKey?A(t.borrowLimitKey):"0",isIsolated:t.isolatedAssetKey?.json?A(t.isolatedAssetKey):false}),si=async(t,{balanceSheet:e,borrowDynamic:o,collateralStat:r,interestModel:n,riskModel:a,borrowFeeKey:s,supplyLimitKey:c,borrowLimitKey:i,isolatedAssetKey:l})=>{if(!e||!o||!n)throw k(t.logger,new P("Missing required market objects"));let d=A(e),u=A(n),p=A(o),m=s?A(s):{value:"0"},f=c?A(c):"0",b=i?A(i):"0",y=a?A(a):void 0,h=r?A(r):void 0,S=t.metadata.parseCoinNameFromType(`0x${u.type}`),w=l?.json?A(l):await ii(t,S),O=y&&h?{type:u.type,collateralFactor:y.collateral_factor,liquidationFactor:y.liquidation_factor,liquidationPenalty:y.liquidation_penalty,liquidationDiscount:y.liquidation_discount,liquidationReserveFactor:y.liquidation_revenue_factor,maxCollateralAmount:y.max_collateral_amount,totalCollateralAmount:h.amount,isIsolated:w}:void 0;return {type:u.type,maxBorrowRate:u.max_borrow_rate,interestRate:p.interest_rate,interestRateScale:p.interest_rate_scale,borrowIndex:p.borrow_index,lastUpdated:p.last_updated,cash:d.cash,debt:d.debt,marketCoinSupply:d.market_coin_supply,reserve:d.revenue,reserveFactor:u.revenue_factor,borrowWeight:u.borrow_weight,borrowFeeRate:m,baseBorrowRatePerSec:u.base_borrow_rate_per_sec,borrowRateOnHighKink:u.borrow_rate_on_high_kink,borrowRateOnMidKink:u.borrow_rate_on_mid_kink,highKink:u.high_kink,midKink:u.mid_kink,minBorrowAmount:u.min_borrow_amount,supplyLimit:f,borrowLimit:b,isIsolated:w,parsedOriginMarketCollateral:O}},Zr=async({onchain:t,metadata:e,fetchWithCache:o},r,n=ni)=>{let a=[];for(let d of r){let u=e.poolAddresses[d];for(let p of n){let m=u?.[p];m&&a.push(m);}}let s=[],c=ye([...new Set(a)],50);for(let d of c){let u=await o({queryKey:g.rpc.getObjects({objectIds:d,node:t.url}),queryFn:()=>t.client.getObjects({objectIds:d,include:{json:true}})});s.push(...u.objects.filter(p=>!(p instanceof Error)));}let i=s.reduce((d,u)=>(d[u.objectId]=u,d),{}),l={};for(let d of r){let u=e.poolAddresses[d];l[d]={balanceSheet:i[u?.lendingPoolAddress??""],collateralStat:i[u?.collateralPoolAddress??""],borrowDynamic:i[u?.borrowDynamic??""],interestModel:i[u?.interestModel??""],riskModel:i[u?.riskModel??""],borrowFeeKey:i[u?.borrowFeeKey??""],supplyLimitKey:i[u?.supplyLimitKey??""],borrowLimitKey:i[u?.borrowLimitKey??""],isolatedAssetKey:i[u?.isolatedAssetKey??""]};}return l},en=(t,e)=>on(t,Wr,e),tn=(t,e)=>on(t,Ur,e),ii=async(t,e)=>{let o=await rn(t,Qr,e);return o?.object?.json?A(o.object):false},on=async(t,e,o)=>{let r=await rn(t,e,o);return r?.object?.json?A(r.object):"0"},rn=({onchain:t,addresses:e,metadata:o,fetchWithCache:r},n,a)=>{let s=o.parseCoinType(a).slice(2),c={type:n,value:s};return r({queryKey:g.rpc.getDynamicFieldObject({parentId:e.market,name:c,node:t.url}),queryFn:async()=>{try{let{dynamicField:i}=await t.client.getDynamicField({parentId:e.market,name:U(c)});return await t.getObject({objectId:i.fieldId,include:{json:!0}})}catch(i){if(i instanceof Error&&i.message.toLowerCase().includes("not found"))return null;throw i}}})};var nt=class extends R{indexer;addresses;onchain;constructor({indexer:e,addresses:o,onchain:r,...n}){super(n),this.indexer=e,this.addresses=o,this.onchain=r;}get context(){return {...this.baseContext,onchain:this.onchain,indexer:this.indexer,addresses:this.addresses}}getMarkets({coinPrices:e,poolCoinNames:o,collateralCoinNames:r,source:n="api-first"}){let a={coinPrices:e,poolCoinNames:o,collateralCoinNames:r};return V({source:n,label:"MarketRepository.getMarkets",logger:this.logger,api:()=>Ut(this.context,a),onchain:()=>Qt(this.context,a)})}getMarket({coinPrice:e,coinName:o,source:r="api-first"}){return V({source:r,label:"MarketRepository.getMarketPool",logger:this.logger,api:()=>Yr(this.context,{coinPrice:e,coinName:o}),onchain:()=>Hr(this.context,{coinPrice:e,coinName:o})})}getPoolSupplyLimit(e){return en(this.context,e)}getPoolBorrowLimit(e){return tn(this.context,e)}getTvl({source:e="api-first",coinPrices:o}){return V({source:e,label:"MarketRepository.getTvl",logger:this.logger,api:()=>Xr(this.context),onchain:()=>Jr(this.context,{coinPrices:o})})}};var $t=async(t,{address:e,coinType:o})=>{let{onchain:r}=t;return (await r.client.getBalance({owner:e,coinType:o})).balance},pi=(t,{balance:e,coinType:o,address:r,node:n})=>{let a=g.rpc.getCoinBalance({node:n,address:r,coinType:o});t.setQueryData(a,e,{updatedAt:Date.now()});},Gt=async(t,e)=>{let{onchain:o,queryClient:r}=t,n=[],a=null,s=true;for(;s;){let i=await o.client.listBalances({owner:e,cursor:a,limit:50});n.push(...i.balances??[]),s=i.hasNextPage,a=i.cursor;}return n.length?n.reduce((i,l)=>{if(l.balance!=="0"){let d=utils.normalizeStructTag(l.coinType);i[d]=l,pi(r,{balance:l,coinType:d,address:e,node:o.url});}return i},{}):{}},nn=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n,queryClient:a}=t,{address:s,coinNames:c=[...n.whitelist.lending.values()]}=e,i=await o({queryKey:g.rpc.getAllCoinBalances({node:r.url,activeAddress:s}),queryFn:()=>Gt({onchain:r,queryClient:a},s)});return c.reduce((d,u)=>{let p=n.parseCoinType(u);return d[u]=p?Number(i[p]?.balance??0):0,d},{})},an=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n}=t,{address:a,coinName:s}=e,c=n.parseCoinType(s);if(!c)return 0;let i=await o({queryKey:g.rpc.getCoinBalance({node:r.url,address:a,coinType:c}),queryFn:()=>$t({onchain:r},{address:a,coinType:c})});return Number(i?.balance??0)},sn=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n,queryClient:a}=t,{address:s,sCoinNames:c=[...n.whitelist.scoin.values()]}=e,i=await o({queryKey:g.rpc.getAllCoinBalances({node:r.url,activeAddress:s}),queryFn:()=>Gt({onchain:r,queryClient:a},s)});return c.reduce((d,u)=>{let p=n.parseSCoinType(u);return d[u]=p?Number(i[p]?.balance??0):0,d},{})},cn=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n}=t,{address:a,sCoinName:s}=e,c=n.parseSCoinType(s);if(!c)return 0;let i=await o({queryKey:g.rpc.getCoinBalance({node:r.url,address:a,coinType:c}),queryFn:()=>$t({onchain:r},{address:a,coinType:c})});return Number(i?.balance??0)},ln=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n,queryClient:a}=t,{address:s,marketCoinNames:c=[...n.whitelist.scoin.values()]}=e,i=await o({queryKey:g.rpc.getAllCoinBalances({node:r.url,activeAddress:s}),queryFn:()=>Gt({onchain:r,queryClient:a},s)});return c.reduce((d,u)=>{let p=n.parseMarketCoinType(u);return d[u]=p?Number(i[p]?.balance??0):0,d},{})},dn=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n}=t,{address:a,marketCoinName:s}=e,c=n.parseMarketCoinType(s);if(!c)return 0;let i=await o({queryKey:g.rpc.getCoinBalance({node:r.url,address:a,coinType:c}),queryFn:()=>$t({onchain:r},{address:a,coinType:c})});return Number(i?.balance??0)},un=async(t,e)=>{let{onchain:o,metadata:r,fetchWithCache:n}=t,{getCoinDecimal:a,parseSCoinType:s,parseUnderlyingSCoinType:c,parseCoinName:i,addresses:{scoin:l}}=r,d=`${l.id}::s_coin_converter::total_supply`,u=l.coins[e]?.treasury;if(!u)throw k(t.logger,new T(`Treasury address not found for sCoin: ${e}`,{context:{sCoinName:e}}));let p=new suiKit.SuiTxBlock,m=await n({queryKey:g.rpc.getSharedObject({objectId:u,node:o.url}),queryFn:()=>o.getObject({objectId:u})});if(!m.object)throw k(t.logger,new P(`Failed to fetch treasury object ${u}`,{context:{treasury:u}}));let f=[await Z({onchain:o,fetchWithCache:n},{tx:p,objectId:m.object})],b=[s(e),c(e)].filter(w=>!!w);p.moveCall(d,f,b);let y={include:{commandResults:true}},h=await n({queryKey:g.rpc.getInspectTxn({queryTarget:d,args:f,typeArgs:b,node:o.url,...y}),queryFn:()=>o.client.simulateTransaction({...y,transaction:p.txBlock})}),S=h?.commandResults;if(!S)throw k(t.logger,new P(`Failed to query total supply for ${e}: ${h[h.$kind]?.status.error?.message}`,{context:{sCoinName:e}}));if(S&&S[0]?.returnValues&&S[0].returnValues[0]){let w=S[0].returnValues[0].bcs,O=a(i(e)??"")??0;return bignumber_js.BigNumber(bcs.bcs.u64().parse(w)).shiftedBy(-O).toNumber()}return 0};var at=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain,queryClient:this.queryClient}}getCoinAmounts(e){return nn(this.context,e)}getCoinAmount(e){return an(this.context,e)}getSCoinAmounts(e){return sn(this.context,e)}getSCoinAmount(e){return cn(this.context,e)}getSCoinTotalSupply(e){return un(this.context,e)}getMarketCoinAmounts(e){return ln(this.context,e)}getMarketCoinAmount(e){return dn(this.context,e)}};var pn="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb";var yi=async(t,{assetTypeMap:e})=>{let{onchain:o,fetchWithCache:r}=t,n=null,a=false,s=[];do{let l={parentId:pn,limit:50,cursor:n},d=await r({queryKey:g.rpc.getDynamicFields(l),queryFn:()=>o.client.listDynamicFields(l)});if(!d)break;let u=d.dynamicFields.filter(p=>{let m=`0x${bcs.bcs.string().parse(p.name.bcs)}`;return !!e[m]}).map(p=>p.fieldId);s.push(...u),a=d.hasNextPage,n=d.cursor;}while(a);if(s.length===0)return [];let c={json:true},{objects:i}=await r({queryKey:g.rpc.getObjects({node:o.url,objectIds:s}),queryFn:()=>o.client.getObjects({objectIds:s,include:c})});return i},mn=async(t,{assetNames:e})=>{let{metadata:o}=t,r=new Set(e),n=Object.fromEntries([...o.coinTypeToCoinNameMap.entries()].filter(([,s])=>r.has(s)));return (await yi(t,{assetTypeMap:n})).filter(s=>!(s instanceof Error)).reduce((s,c)=>{if(c){let{name:i}=Kr(c),l=`0x${i}`,d=n[l];if(!d)return s;let u=+A(c);s[d]=u/1e4;}return s},{})};var st=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getFlashloanFees(e){return mn(this.context,{assetNames:e})}};var bn=t=>{let o=A(t).ownership?.of;if(!o)throw new T(`Failed to parse obligation key object ${t.objectId}`,{context:{objectId:t.objectId}});return o};var yn=t=>{if(t)return {...t,collaterals:(t.collaterals??[]).map((e,o)=>({...e,type:J(e.type,`obligation.collaterals[${o}].type`)})),debts:(t.debts??[]).map((e,o)=>({...e,type:J(e.type,`obligation.debts[${o}].type`)}))}};var gi=async(t,{address:e})=>{let{onchain:o,metadata:r,fetchWithCache:n}=t,a=`${r.addresses.protocolObjectId}::obligation::ObligationKey`,s=[],c=false,i=null;do{let l={owner:e,type:a,include:{json:true},limit:50,cursor:i},d=await n({queryKey:g.rpc.getOwnedObjects(l),queryFn:()=>o.client.listOwnedObjects(l)});s.push(...d.objects),d.hasNextPage&&d.cursor?(c=true,i=d.cursor):c=false;}while(c);return s},fn=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:n}=t,{queryPackageId:a,version:s,market:c}=n.addresses,i=`${a}::obligation_query::obligation_data`,l=new suiKit.SuiTxBlock,d=y=>({objectId:y,include:{json:false,content:false}}),u=async y=>{let h=await r({queryKey:g.rpc.getObject({...d(y),node:o.url}),queryFn:()=>o.getObject(d(y))});if(!h.object)throw k(t.logger,new P(`Failed to fetch object ${y}`,{context:{objectId:y}}));return Z({onchain:o,fetchWithCache:r},{tx:l,mutable:false,objectId:h.object})},p=await Promise.all([u(s),u(c),u(e)]);l.moveCall(i,[...p,l.txBlock.object.clock()]);let m=[s,c,e],f=await r({queryKey:g.rpc.getInspectTxn({queryTarget:i,args:m,node:o.url}),queryFn:()=>o.client.simulateTransaction({transaction:l.txBlock,include:{events:true}})}),b=f.Transaction??f.FailedTransaction;if(!b.status.success)throw k(t.logger,new P(`Failed to query obligation data for obligationId ${e}: ${b.status.error.message}`,{context:{obligationId:e}}));return yn(b?.events?.[0]?.json)},gn=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n={objectId:e,include:{json:true}},a=await r({queryKey:g.rpc.getObject(n),queryFn:()=>o.getObject(n)});return !!A(a.object)?.lock_key},hn=async(t,{address:e})=>{let o=await gi(t,{address:e}),r=o.map(bn),n=await zt(t,r);return o.map((a,s)=>{let c=n[s],i=c?A(c):void 0;return {id:r[s],keyId:a.objectId,locked:!!i?.lock_key}})},zt=async(t,e)=>{if(e.length===0)return [];let{onchain:o,fetchWithCache:r}=t,n={objectIds:e,include:{json:true}},{objects:a}=await r({queryKey:g.rpc.getObjects({objectIds:e,node:o.url}),queryFn:()=>o.client.getObjects(n)});return a.map(s=>s instanceof Error?null:s)};var it=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getObligations(e){return hn(this.context,{address:e})}getObligationData(e){return fn(this.context,e)}getObligationLocked(e){return gn(this.context,e)}getObligationObjects(e){return zt(this.context,e)}};var hi=t=>({pointType:X(t.point_type),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)}),Sn=(t,e)=>({poolType:X(e.pool_type),minStakes:Number(e.min_stakes),maxStakes:Number(e.max_stakes),staked:Number(e.stakes),poolPoints:e.points.reduce((o,r)=>{let n=hi(r),a=t(n.pointType);return o[a]=n,o},{})}),Cn=(t,e,o,r,n)=>{let s=bignumber_js.BigNumber(t.distributedPointPerPeriod).dividedBy(t.period),c=bignumber_js.BigNumber(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),i=bignumber_js.BigNumber.minimum(bignumber_js.BigNumber(c).multipliedBy(t.distributedPointPerPeriod),bignumber_js.BigNumber(t.points)),l=bignumber_js.BigNumber(t.index).plus(i.dividedBy(t.weightedAmount).isFinite()?bignumber_js.BigNumber(1e9).multipliedBy(i).dividedBy(t.weightedAmount):0),d=bignumber_js.BigNumber(t.distributedPoint).plus(i),u=bignumber_js.BigNumber(t.baseWeight),p=bignumber_js.BigNumber(t.weightedAmount),m=p.shiftedBy(-1*n),f=m.multipliedBy(r),b=365*24*60*60,y=bignumber_js.BigNumber(s).shiftedBy(-1*o),h=bignumber_js.BigNumber(y).multipliedBy(b).multipliedBy(e),S=bignumber_js.BigNumber(1e12),w=bignumber_js.BigNumber(t.baseWeight).dividedBy(S),O=h.multipliedBy(w).dividedBy(f).isFinite()&&t.points>0?h.multipliedBy(w).dividedBy(f).toNumber():1/0;return {distributedPointPerSec:s.toNumber(),accumulatedPoints:i.toNumber(),currentPointIndex:l.toNumber(),currentTotalDistributedPoint:d.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:p.toNumber(),weightedStakedCoin:m.toNumber(),weightedStakedValue:f.toNumber(),rewardApr:O,rewardPerSec:y.toNumber()}},Si=t=>({pointType:X(t.point_type),weightedAmount:Number(t.weighted_amount),points:Number(t.points),totalPoints:Number(t.total_points),index:Number(t.index)}),wn=(t,e)=>({poolType:X(e.pool_type),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((o,r)=>{let n=Si(r),a=t(n.pointType);return o[a]=n,o},{})}),xn=t=>{if(t)return {...t,incentive_pools:(t.incentive_pools??[]).map((e,o)=>({...e,pool_type:J(e.pool_type,`borrowIncentive.incentive_pools[${o}].pool_type`),points:(e.points??[]).map((r,n)=>({...r,point_type:J(r.point_type,`borrowIncentive.incentive_pools[${o}].points[${n}].point_type`)}))}))}},Tn=t=>{if(t)return {...t,pool_records:(t.pool_records??[]).map((e,o)=>({...e,pool_type:J(e.pool_type,`borrowIncentive.pool_records[${o}].pool_type`),points_list:(e.points_list??[]).map((r,n)=>({...r,point_type:J(r.point_type,`borrowIncentive.pool_records[${o}].points_list[${n}].point_type`)}))}))}};var Ci=bcs.bcs.struct("TypeName",{name:bcs.bcs.string()}),wi=bcs.bcs.struct("Table",{id:bcs.bcs.Address,size:bcs.bcs.u64()}),kn=bcs.bcs.struct("IncentiveAccount",{id:bcs.bcs.Address,pool_records:wi,pool_types:bcs.bcs.struct("VecSet",{contents:bcs.bcs.vector(Ci)}),binded_ve_sca_key:bcs.bcs.option(bcs.bcs.Address)});var On=async(t,{coinNames:e,coinPrices:o})=>{let{onchain:r,metadata:n,fetchWithCache:a}=t,{borrowIncentive:s}=n.addresses,c=new suiKit.SuiTxBlock,i=`${s.query}::incentive_pools_query::incentive_pools_data`,l={objectId:s.incentivePools},d=await a({queryKey:g.rpc.getSharedObject({...l,node:r.url}),queryFn:()=>r.getObject(l)});if(!d.object)throw k(t.logger,new P(`Failed to fetch incentive pools object ${s.incentivePools}`,{context:{objectId:s.incentivePools}}));let p=[await Z({onchain:r,fetchWithCache:a},{tx:c,mutable:true,objectId:d.object})];c.moveCall(i,p,[]);let m=await a({queryKey:g.rpc.getInspectTxn({queryTarget:i,args:[s.incentivePools],node:r.url}),queryFn:()=>r.client.simulateTransaction({transaction:c.txBlock,include:{events:true}})}),f=m?.Transaction??m?.FailedTransaction,b=xn(f?.events?.[0]?.json),y=e??[...n.whitelist.lending.values()],h={};for(let S of b?.incentive_pools??[]){let w={},O=Sn(n.parseCoinNameFromType,S),_=S.pool_type,j=n.parseCoinNameFromType(_),v=o[j]??0,x=n.getCoinDecimal(j);if(x===void 0)throw k(t.logger,new T(`Coin decimal not found for ${j}`,{context:{poolCoinName:j}}));if(!y.includes(j))continue;for(let[q,$]of Object.entries(O.poolPoints)){if(!$)continue;let de=$.pointType,te=n.parseCoinNameFromType(de),ie=n.getCoinDecimal(te);if(ie===void 0)throw k(t.logger,new T(`Coin decimal not found for ${te}`,{context:{poolCoinName:te}}));let L=o[te]??0,we=n.parseSymbol(te),W=Cn($,L,ie,v,x),Y=$.points<=W.accumulatedPoints;$.points>W.accumulatedPoints&&(w[q]={symbol:we,coinName:te,coinType:de,coinDecimal:ie,coinPrice:L,points:$.points,distributedPoint:$.distributedPoint,weightedAmount:$.weightedAmount,...W,...Y?{rewardApr:0}:{}});}let B=bignumber_js.BigNumber(O.staked),N=B.shiftedBy(-x),F=N.multipliedBy(v);h[j]={coinName:j,symbol:n.parseSymbol(j),coinType:_,coinDecimal:x,coinPrice:v,stakedAmount:B.toNumber(),stakedCoin:N.toNumber(),stakedValue:F.toNumber(),points:w};}return h},Pn=async(t,{coinNames:e,obligationId:o})=>{let{metadata:r,fetchWithCache:n,onchain:a}=t,{borrowIncentive:s}=r.addresses,c=new suiKit.SuiTxBlock,i=`${s.query}::incentive_account_query::incentive_account_data`,l=async(h,S)=>{let w=await n({queryKey:g.rpc.getSharedObject({objectId:h,node:a.url}),queryFn:()=>a.getObject({objectId:h})});if(!w.object)throw k(t.logger,new P(`Failed to fetch object ${h}`,{context:{objectId:h}}));return Z({onchain:a,fetchWithCache:n},{tx:c,mutable:S,objectId:w.object})},[d,u]=await Promise.all([l(s.incentiveAccounts,true),l(o,true)]),p=[d,u];c.moveCall(i,p,[]);let m=await n({queryKey:g.rpc.getInspectTxn({queryTarget:i,args:[s.incentiveAccounts,o],node:a.url}),queryFn:()=>a.client.simulateTransaction({transaction:c.txBlock,include:{events:true}})}),f=m?.Transaction??m?.FailedTransaction,b=Tn(f?.events?.[0]?.json),y=e??[...r.whitelist.lending.values()];return b?b.pool_records.reduce((h,S)=>{let w=wn(r.parseCoinNameFromType,S),O=w.poolType,_=r.parseCoinNameFromType(O);return y.includes(_)&&(h[_]=w),h},{}):{}},Rn=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,{borrowIncentive:a,core:s}=n,c={objectId:a.incentiveAccounts,include:{json:true}},i=await r({queryKey:g.rpc.getObject(c),queryFn:()=>o.getObject(c)});if(!i.object)throw k(t.logger,new P(`Failed to fetch incentive accounts object with id ${a.incentiveAccounts}`,{context:{objectId:a.incentiveAccounts}}));let l=A(i.object).accounts.id,d=await ce(t,{parentId:l,name:U({type:`${a.object}::typed_id::TypedID<${s.object}::obligation::Obligation>`,value:e})});return d?kn.parse(d.dynamicField.value.bcs).binded_ve_sca_key:null},vn=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,{borrowIncentive:a,vesca:s}=n,c={objectId:a.incentivePools,include:{json:true}},i=await r({queryKey:g.rpc.getObject(c),queryFn:()=>o.getObject(c)});if(!i.object)throw k(t.logger,new P(`Failed to fetch incentive pool object with id ${a.incentivePools}`,{context:{objectId:a.incentivePools}}));let l=A(i.object).ve_sca_bind.id,d=`${a.object}::typed_id::TypedID<${s.object}::ve_sca::VeScaKey>`,u=await ce(t,{parentId:l,name:U({type:d,value:e})});return u?bcs.bcs.Address.parse(u.dynamicField.value.bcs):null};var ct=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getBorrowIncentivePools(e){return On(this.context,e)}getBorrowIncentiveAccounts(e){return Pn(this.context,e)}getBindedVeScaKey(e){return Rn(this.context,e)}getBindedObligation(e){return vn(this.context,e)}};var In="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey";var Nn=bcs.bcs.bool(),Bn=bcs.bcs.string();var ki=async t=>{let{onchain:e,fetchWithCache:o,metadata:{addresses:r}}=t,n=false,a=null,s=i=>i.name.type===In,c=[];do{let i={parentId:r.market,cursor:a,limit:50,include:{value:true}},{dynamicFields:l,hasNextPage:d,cursor:u}=await o({queryKey:g.rpc.getDynamicFields({...i,node:e.url}),queryFn:()=>e.client.listDynamicFields(i)}),p=l.filter(m=>s(m)?Nn.parse(m.valueType.bcs):false).map(m=>`0x${Bn.parse(m.name.bcs)}`);c.push(...p),a=u,n=d;}while(n);return c},_n=async t=>ki(t),Mn=async t=>{let{metadata:{poolAddresses:e,whitelist:o}}=t;return Object.values(e).filter(r=>r!==void 0&&o.lending.has(r.coinName)&&r.isIsolated).map(r=>r.coinType)};var lt=class extends R{onchain;constructor(e){let{onchain:o,...r}=e;super(r),this.onchain=o;}get context(){return {...this.baseContext,onchain:this.onchain}}getIsolatedAssets({source:e}){return V({source:e,label:"IsolatedAssetsRepository.getIsolatedAssets",logger:this.logger,api:()=>Mn(this.context),onchain:()=>_n(this.context)})}};var Fn=bcs.bcs.struct("VeSca",{locked_amount:bcs.bcs.u64(),unlock_at:bcs.bcs.u64()});var Pi=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,a=`${n.veSca.object}::ve_sca::VeScaKey`,s=[],c=false,i=null;do{let l={owner:e,type:a,include:{json:true},cursor:i,limit:50},d=await r({queryKey:g.rpc.getOwnedObjects({...l,node:o.url}),queryFn:()=>o.client.listOwnedObjects(l)});s.push(...d.objects),d.hasNextPage&&d.cursor?(c=true,i=d.cursor):c=false;}while(c);return s},Ri=async t=>{let{onchain:e,fetchWithCache:o,metadata:{addresses:r}}=t,{id:n,config:a,treasury:s}=r.veSca,c=new suiKit.SuiTxBlock,i=async(S,w)=>{let O=await o({queryKey:g.rpc.getSharedObject({node:e.url,objectId:S}),queryFn:()=>e.getObject({objectId:S})});if(!O.object)throw k(t.logger,new P(`Failed to fetch object ${S}`,{context:{objectId:S}}));return Z({onchain:e,fetchWithCache:o},{tx:c,mutable:w,objectId:O.object})},[l,d]=await Promise.all([i(s,true),i(a,false)]),u=`${n}::treasury::refresh`,p=[d,l,c.txBlock.object.clock()],m=`${n}::treasury::total_ve_sca_amount`,f=[l,c.txBlock.object.clock()];c.moveCall(u,p),c.moveCall(m,f);let y=(await o({queryKey:g.rpc.getTotalVeScaTreasuryAmount({refreshArgs:p,veScaAmountArgs:f,node:e.url}),queryFn:()=>e.client.simulateTransaction({transaction:c.txBlock,include:{commandResults:true}})}))?.commandResults;if(!y)throw k(t.logger,new P("Failed to fetch total veSca amount from treasury: No command results",{context:{treasury:s}}));let h=y[1]?.returnValues?.[0].bcs;if(!h)throw k(t.logger,new P("Failed to fetch result bcs from vesca treasury",{context:{treasury:s}}));return bcs.bcs.u64().parse(h)},Ie=async(t,e)=>{let{onchain:o,metadata:{addresses:r},fetchWithCache:n}=t,a={parentId:r.veSca.tableId,name:U({type:"0x2::object::ID",value:e})},{dynamicField:s}=await n({queryKey:g.rpc.getDynamicFieldObject({...a,node:o.url}),queryFn:()=>o.client.getDynamicField(a)});if(!s?.value?.bcs)return;let c=s.value.bcs,i=Fn.parse(c),l=Math.max(+i.unlock_at*1e3-Date.now(),0),d=String(i.locked_amount),u=bignumber_js.BigNumber(i.locked_amount).shiftedBy(-9).toNumber(),p=u*(Math.floor(l/1e3)/126144e3);return {id:s.fieldId,keyId:e,object:{objectId:s.fieldId,version:s.version,digest:s.digest},lockedScaAmount:d,lockedScaCoin:u,currentVeScaBalance:p,unlockAt:bignumber_js.BigNumber(Number(i.unlock_at)*1e3).toNumber()}},Dn=async(t,{address:e,excludeEmpty:o})=>{let r=await Pi(t,e),n=(await Promise.all(r.map(a=>Ie(t,a.objectId)))).filter(a=>!!a);return n.sort((a,s)=>s.currentVeScaBalance-a.currentVeScaBalance),o?n.filter(a=>a.lockedScaAmount!=="0"):n},Ln=async(t,{veScaKey:e,tableId:o})=>{let{onchain:r,fetchWithCache:n}=t,a={type:"0x2::object::ID",value:e},s=await n({queryKey:g.rpc.getDynamicFieldObject({parentId:o,name:a,node:r.url}),queryFn:async()=>{try{let{dynamicField:i}=await r.client.getDynamicField({parentId:o,name:U(a)});return await r.getObject({objectId:i.fieldId,include:{json:!0}})}catch(i){if(Lt(i))return null;throw i}}});if(!s?.object)return false;let c=A(s.object);return Array.isArray(c?.contents)&&c.contents.length>0},En=async t=>{let{onchain:e,metadata:{addresses:o},fetchWithCache:r}=t,n={objectId:o.veSca.treasury,include:{json:true}},a=await r({queryKey:g.rpc.getObject({...n,node:e.url}),queryFn:()=>e.getObject(n)}),s=A(a.object),c=bignumber_js.BigNumber(s.unlock_schedule.locked_sca_amount).shiftedBy(-9).toNumber(),i=bignumber_js.BigNumber(await Ri(t)).shiftedBy(-9).toNumber(),l=c>0?i/c*4:0;return {totalLockedSca:c,totalVeSca:i,averageLockingPeriod:l,averageLockingPeriodUnit:"year"}};var ut=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getVeSca(e){return Ie(this.context,e)}getVeScasByAddress({address:e,excludeEmpty:o=true}){return Dn(this.context,{address:e,excludeEmpty:o})}getVeScaTreasuryInfo(){return En(this.context)}isVeScaKeyInSubsTable(e,o){return Ln(this.context,{veScaKey:e,tableId:o})}};var Vn=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean(),id:zod.z.string(),user_rewards:zod.z.object({id:zod.z.string(),size:zod.z.string()})}).transform(t=>({isClaimEnabled:t.enable_claim,totalPoolReward:bignumber_js.BigNumber(t.balance).shiftedBy(-9).toNumber(),userRewardTableId:t.user_rewards.id}));var Kn=bcs.bcs.u64();var Ni=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n={objectId:e,include:{json:true}},{object:a}=await r({queryKey:g.rpc.getObject({...n,node:o.url}),queryFn:()=>o.getObject(n)});if(!a)throw k(t.logger,new P("Failed to fetch reward pool object",{context:{rewardPoolId:e}}));return a},Bi=async(t,{veScaKey:e,tableId:o})=>{let{onchain:r,fetchWithCache:n}=t,a={parentId:o,name:U({type:"0x2::object::ID",value:e})},{dynamicField:{value:s}}=await n({queryKey:g.rpc.getDynamicFieldObject({...a,node:r.url}),queryFn:()=>r.client.getDynamicField(a)});return bignumber_js.BigNumber(Kn.parse(s.bcs)).shiftedBy(-9).toNumber()},qn=async(t,e)=>{let{metadata:{addresses:o}}=t,{rewardPool:r}=o.loyaltyProgram,n=await Ni(t,r),{data:a,success:s}=Vn.safeParse(n.json);return s?{pendingReward:e?await Bi(t,{veScaKey:e,tableId:a.userRewardTableId}).catch(()=>0):0,totalPoolReward:a.totalPoolReward,isClaimEnabled:a.isClaimEnabled}:{pendingReward:0,totalPoolReward:0,isClaimEnabled:false}};var pt=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getLoyaltyProgramInfos(e){return qn(this.context,e)}};var Ht=t=>t.startsWith("0x")?t:`0x${t}`;var _i=bcs.bcs.struct("TypeName",{name:bcs.bcs.string()}),Mi=t=>bcs.bcs.struct("VecSet",{contents:bcs.bcs.vector(t)}),Wn=Mi(_i);var Fi=3,Un=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:n}=t,{addresses:a,parseCoinNameFromType:s}=n,c=50,i={[`${a.pyth.object}::rule::Rule`]:"pyth",[`${a.supra.object}::rule::Rule`]:"supra",[`${a.switchboard.object}::rule::Rule`]:"switchboard"},l=null,d=true,u={};do{let p={parentId:e,cursor:l,limit:c,include:{value:true}},{dynamicFields:m,cursor:f,hasNextPage:b}=await r({queryKey:g.rpc.getDynamicFields({...p,node:o.url}),queryFn:()=>o.client.listDynamicFields(p)});l=f,d=b,m.forEach(y=>{let h=Ht(bcs.bcs.string().parse(y.name.bcs)),S=s(h),w=Wn.parse(y.value.bcs);u[S]||(u[S]=[]),w.contents.forEach(({name:O})=>{let _=i[Ht(O)];_&&u[S].push(_);});});}while(d);return u},Qn=async t=>{let{metadata:{addresses:e,whitelist:o}}=t,[r,n]=await Promise.all([Un(t,e.oracles.primaryPriceUpdatePolicyVecsetId),Un(t,e.oracles.secondaryPriceUpdatePolicyVecsetId)]);return [...o.lending.values()].reduce((a,s)=>(a[s]={primary:r[s]??[],secondary:n[s]??[]},a),{})},$n=async t=>{let{addresses:e}=t.metadata,o=`${e.xOracleObject}::price_update_policy::PriceUpdatePolicyRulesKey`,r=bcs.bcs.struct("TypeName",{dummy_field:bcs.bcs.bool()}).serialize({dummy_field:false}).toBytes(),[n,a]=await Promise.all([ce(t,{parentId:e.oracles.primaryPriceUpdatePolicyObject,name:{type:o,bcs:r}}),ce(t,{parentId:e.oracles.secondaryPriceUpdatePolicyObject,name:{type:o,bcs:r}})]);return {primary:n,secondary:a}},Gn=async(t,e)=>{let{addresses:o,parseCoinType:r,getSwitchboardAggAddress:n}=t.metadata,a=o.oracles.switchboardRegistryTableId,s=[],c=e.map((i,l)=>{let d=n(i);return d||(s.push({idx:l,coinName:i}),null)});if(s.length===0)return c;if(s.length>Fi){let i=new Map;for(let d of s){let u=r(d.coinName);if(!u)throw k(t.logger,new T(`Invalid coin name: ${d.coinName}`,{context:{coinName:d.coinName}}));i.set(u.slice(2),d);}let l=await Li(t,a,i);for(let[d,{idx:u}]of i){let p=l[d];if(!p)throw k(t.logger,new P(`No on-demand aggregator found for 0x${d}`,{context:{coinTypeKey:d}}));c[u]=p;}return c}return await Promise.all(s.map(async({idx:i,coinName:l})=>{let d=r(l);if(!d)throw k(t.logger,new T(`Invalid coin name: ${l}`,{context:{coinName:l}}));let u=await ce(t,{parentId:a,name:U({type:"0x1::type_name::TypeName",value:{name:d.slice(2)}})});if(!u)throw k(t.logger,new P(`No on-demand aggregator found for ${d}`,{context:{coinType:d}}));c[i]=bcs.bcs.Address.parse(u.dynamicField.value.bcs);})),c},Di=t=>{try{return bcs.bcs.struct("TypeName",{name:bcs.bcs.string()}).parse(t.name.bcs).name}catch{try{return bcs.bcs.string().parse(t.name.bcs)}catch{return}}},Li=async(t,e,o)=>{let{onchain:r,fetchWithCache:n}=t,a={},s=null,c=false;do{let i={parentId:e,cursor:s,limit:50,include:{value:true}},l=await n({queryKey:g.rpc.getDynamicFields({...i,node:r.url}),queryFn:()=>r.client.listDynamicFields(i)});for(let d of l.dynamicFields){let u=Di(d);if(!u||!o.has(u))continue;let p=d.value?.bcs;p&&(a[u]=bcs.bcs.Address.parse(p));}s=l.cursor,c=l.hasNextPage&&Object.keys(a).length<o.size;}while(c);return a};var bt=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getAssetOracles(){return Qn(this.context)}getPriceUpdatePolicies(){return $n(this.context)}getOnDemandAggObjectIds(e){return Gn(this.context,e)}};var zn=t=>({stakeType:utils.normalizeStructTag(t.stakeType),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)}),Yn=(t={})=>{let{spool:e,spoolReward:o}=t;if(!e||!o)throw new T("spool or spoolReward is undefined");let r=A(e),n=A(o);return {stakeType:r.stake_type,maxDistributedPoint:r.max_distributed_point,distributedPoint:r.distributed_point,distributedPointPerPeriod:r.distributed_point_per_period,pointDistributionTime:r.point_distribution_time,maxStake:r.max_stakes,stakes:r.stakes,index:r.index,createdAt:r.created_at,lastUpdate:r.last_update,...n}},Hn=(t,e,o)=>{let n=bignumber_js.BigNumber(t.pointPerPeriod).dividedBy(t.period),a=bignumber_js.BigNumber(t.pointPerPeriod).dividedBy(t.period),s=a.gt(0)?bignumber_js.BigNumber(t.maxPoint).minus(t.distributedPoint).dividedBy(a):bignumber_js.BigNumber(0),c=t.createdAt,i=s.plus(t.lastUpdate).integerValue().toNumber(),l=bignumber_js.BigNumber(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),d=bignumber_js.BigNumber(t.maxPoint).minus(t.distributedPoint),u=bignumber_js.BigNumber.minimum(bignumber_js.BigNumber(l).multipliedBy(t.pointPerPeriod),d),p=bignumber_js.BigNumber(t.index).plus(u.dividedBy(t.staked).isFinite()?bignumber_js.BigNumber(1e9).multipliedBy(u).dividedBy(t.staked):0),m=bignumber_js.BigNumber(t.distributedPoint).plus(u),f=bignumber_js.BigNumber(t.staked),b=f.shiftedBy(-o),y=b.multipliedBy(e);return {distributedPointPerSec:n.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:p.toNumber(),currentTotalDistributedPoint:m.toNumber(),startDate:new Date(c*1e3),endDate:new Date(i*1e3),stakedAmount:f.toNumber(),stakedCoin:b.toNumber(),stakedValue:y.toNumber()}},Xn=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)}),Jn=(t,e,o,r,n)=>{let a=bignumber_js.BigNumber(o.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),s=bignumber_js.BigNumber(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=s.shiftedBy(-n),i=c.multipliedBy(r),l=bignumber_js.BigNumber(e.rewards),d=l.shiftedBy(-n),u=d.multipliedBy(r),p=bignumber_js.BigNumber(e.claimedRewards),m=p.shiftedBy(-n),f=m.multipliedBy(r),b=bignumber_js.BigNumber(a).shiftedBy(-n).multipliedBy(31536e3).multipliedBy(r),y=b.dividedBy(o.stakedValue).isFinite()?b.dividedBy(o.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(y=1/0),{rewardApr:y,totalRewardAmount:s.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:i.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:d.toNumber(),remaindRewardValue:u.toNumber(),claimedRewardAmount:p.toNumber(),claimedRewardCoin:m.toNumber(),claimedRewardValue:f.toNumber(),rewardPerSec:a.toNumber()}},Zn=t=>({...t,stakeType:Ki(t.stakeType)}),Ki=t=>{try{return X(t)}catch(e){throw new T("Failed to map Move type at spool.stakeType",{cause:e,context:{path:"spool.stakeType"}})}};var Xt=async(t,{coinPrices:e,stakeCoinNames:o}={})=>{let{indexer:r,fetchWithCache:n,metadata:a}=t;e??={};let{spools:s}=await n({queryKey:g.api.getSpools(),queryFn:()=>r.get("/api/spools/migrate")}),c=o?new Set(o):a.whitelist.spool,i=a.getSpoolRewardCoinName();return s.reduce((l,d)=>{if(!c.has(d.marketCoinName))return l;let u=a.parseCoinName(d.marketCoinName);return l[d.marketCoinName]={...d,coinPrice:e[u]??d.coinPrice,marketCoinPrice:e[d.marketCoinName]??d.marketCoinPrice,rewardCoinPrice:e[i]??d.rewardCoinPrice},l},{})},ea=async(t,{coinPrices:e,stakeCoinName:o})=>(await Xt(t,{coinPrices:e,stakeCoinNames:[o]}))[o]??null,ta=async(t,{coinPrices:e={},stakeCoinNames:o}={})=>{let{metadata:r}=t,n=o??[...r.whitelist.spool.values()],a=n.map(i=>r.parseCoinName(i)),s=await ra(t,a);return (await Promise.allSettled(n.map((i,l)=>Jt(t,{coinPrices:e,stakeCoinName:i,requiredObjects:s[a[l]]})))).reduce((i,l,d)=>(l.status==="fulfilled"&&l.value&&(i[n[d]]=l.value),i),{})},Jt=async(t,{coinPrices:e,stakeCoinName:o,requiredObjects:r})=>{let{metadata:n}=t,a=n.parseCoinName(o),s=n.getSpoolRewardCoinName(),c=Zn(Yn(r??(await ra(t,[a]))[a])),i=zn(c),l=e[o]??0,d=Hn(i,l,n.getCoinDecimal(o)),u=Xn(c),p=e[s]??0;return {marketCoinName:o,symbol:n.parseSymbol(o),coinType:n.parseCoinType(a),marketCoinType:n.parseMarketCoinType(a),rewardCoinType:n.isMarketCoin(s)?n.parseMarketCoinType(s):n.parseCoinType(s),sCoinType:n.parseSCoinType(o)??"",coinDecimal:n.getCoinDecimal(a),rewardCoinDecimal:n.getCoinDecimal(s),coinPrice:e[a]??0,marketCoinPrice:l,rewardCoinPrice:p,maxPoint:i.maxPoint,distributedPoint:i.distributedPoint,maxStake:i.maxStake,...d,exchangeRateNumerator:u.exchangeRateNumerator,exchangeRateDenominator:u.exchangeRateDenominator,...Jn(i,u,d,p,n.getCoinDecimal(s))}},oa=async(t,{address:e,stakeCoinNames:o})=>{let{metadata:r}=t,n=`${r.addresses.spoolObjectId}::spool_account::SpoolAccount`,a=await qi(t,{address:e,stakeAccountType:n}),s=(o??[...r.whitelist.spool.values()]).reduce((l,d)=>(l[d]=[],l),{}),c=Object.keys(s).reduce((l,d)=>{let u=r.parseCoinName(d),p=r.parseMarketCoinType(u);return l[d]=`${r.addresses.spoolObjectId}::spool_account::SpoolAccount<${p}>`,l},{}),i=Object.entries(c).reduce((l,[d,u])=>(l[u]=d,l),{});for(let l of a){let{objectId:d,type:u,json:p}=l;if(!d||!u||!p)continue;let m=A(l),f=utils.normalizeStructTag(u),b=i[f],y=s[b];y&&y.push({id:d,type:f,stakePoolId:String(m.spool_id),stakeType:utils.normalizeStructTag(String(m.stake_type)),staked:Number(m.stakes),index:Number(m.index),points:Number(m.points),totalPoints:Number(m.total_points)});}return s},Zt=async(t,{stakeCoinNames:e})=>(await Promise.allSettled(e.map(r=>Wi(t,{stakeCoinName:r})))).reduce((r,n,a)=>(n.status==="fulfilled"&&(r[e[a]]=n.value),r),{}),qi=async(t,{address:e,stakeAccountType:o})=>{let{onchain:r,fetchWithCache:n}=t,a=false,s=null,c=[];do{let i={owner:e,type:o,include:{json:true},cursor:s,limit:50},l=await n({queryKey:g.rpc.getOwnedObjects(i),queryFn:()=>r.client.listOwnedObjects(i)});l.objects&&c.push(...l.objects),l.hasNextPage&&l.cursor?(a=true,s=l.cursor):a=false;}while(a);return c},ra=async({onchain:t,metadata:e,fetchWithCache:o},r)=>{let n=["spool","spoolReward","sCoinTreasury"],a=r.flatMap(l=>{let d=e.poolAddresses[l];return n.flatMap(u=>{let p=d?.[u];return p?[p]:[]})}),s=[],c=ye([...new Set(a)],50);for(let l of c){let d=await o({queryKey:g.rpc.getObjects({objectIds:l,node:t.url}),queryFn:()=>t.client.getObjects({objectIds:l,include:{json:true}})});s.push(...d.objects.filter(u=>!(u instanceof Error)));}let i=s.reduce((l,d)=>(l[d.objectId]=d,l),{});return r.reduce((l,d)=>{let u=e.poolAddresses[d];return l[d]={spool:i[u?.spool??""],spoolReward:i[u?.spoolReward??""]},l},{})},Wi=async(t,{stakeCoinName:e})=>{let{metadata:o,onchain:r,fetchWithCache:n}=t,a=o.addresses.spools[e]?.rewardPoolId;if(!a)return;let s={json:true},i=(await n({queryKey:g.rpc.getObject({objectId:a,node:r.url,include:s}),queryFn:()=>r.getObject({objectId:a,include:s})})).object;if(!i?.json)return;let l=A(i);return {id:i.objectId,type:utils.normalizeStructTag(i.type??""),stakePoolId:String(l.spool_id),ratioNumerator:Number(l.exchange_rate_numerator),ratioDenominator:Number(l.exchange_rate_denominator),rewards:Number(l.rewards),claimedRewards:Number(l.claimed_rewards)}},na=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:n}=t,a=n.addresses.spools[e]?.id;if(!a)return;let s={json:true},i=(await r({queryKey:g.rpc.getObject({objectId:a,node:o.url,include:s}),queryFn:()=>o.getObject({objectId:a,include:s})})).object;if(!i?.json)return;let l=A(i);return {id:i.objectId,type:utils.normalizeStructTag(i.type??""),maxPoint:Number(l.max_distributed_point),distributedPoint:Number(l.distributed_point),pointPerPeriod:Number(l.distributed_point_per_period),period:Number(l.point_distribution_time),maxStake:Number(l.max_stakes),stakeType:utils.normalizeStructTag(String(l.stake_type)),totalStaked:Number(l.stakes),index:Number(l.index),createdAt:Number(l.created_at),lastUpdate:Number(l.last_update)}};var yt=class extends R{indexer;onchain;constructor({indexer:e,onchain:o,...r}){super(r),this.indexer=e,this.onchain=o;}get context(){return {...this.baseContext,indexer:this.indexer,onchain:this.onchain}}getSpools({stakeCoinNames:e,coinPrices:o,source:r="api-first"}){return V({source:r,label:"SpoolRepository.getSpools",logger:this.logger,api:()=>Xt(this.context,{stakeCoinNames:e,coinPrices:o}),onchain:()=>ta(this.context,{stakeCoinNames:e,coinPrices:o})})}getSpool({stakeCoinName:e,coinPrices:o,source:r="api-first"}){return V({source:r,label:"SpoolRepository.getSpool",logger:this.logger,api:()=>ea(this.context,{stakeCoinName:e,coinPrices:o}),onchain:()=>Jt(this.context,{stakeCoinName:e,coinPrices:o})})}getStakeAccounts(e){return oa(this.context,e)}async getStakeAccountsByPool(e,o){return (await this.getStakeAccounts({address:e,stakeCoinNames:[o]}))[o]||[]}getSpoolRewardPools(e){return Zt(this.context,{stakeCoinNames:e})}getSpoolRewardPool(e){return Zt(this.context,{stakeCoinNames:[e]}).then(o=>o[e])}getStakePool(e){return na(this.context,e)}};var aa=zod.z.object({reserve_ve_sca_key:zod.z.nullable(zod.z.object({id:zod.z.string()})),enable_claim:zod.z.boolean()}).transform(t=>({reserveVeScaKey:t.reserve_ve_sca_key?.id,isClaimEnabled:t.enable_claim}));var sa=bcs.bcs.u64();var $i=async(t,e)=>{let{onchain:o,metadata:{addresses:r},fetchWithCache:n}=t,{veScaRewardTableId:a}=r.veScaLoyaltyProgram,s={parentId:a,name:U({type:"0x2::object::ID",value:e})},{dynamicField:{value:c}}=await n({queryKey:g.rpc.getDynamicFieldObject({...s,node:o.url}),queryFn:()=>o.client.getDynamicField(s)});return bignumber_js.BigNumber(sa.parse(c.bcs)).shiftedBy(-9).toNumber()},Gi=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n={objectId:e,include:{json:true}},{object:a}=await r({queryKey:g.rpc.getObject({...n,node:o.url}),queryFn:()=>o.getObject(n)});if(!a)throw k(t.logger,new P("Failed to fetch reward pool object",{context:{rewardPoolId:e}}));return a},ia=async(t,e)=>{let{metadata:{addresses:o}}=t,{veScaRewardPool:r}=o.veScaLoyaltyProgram,n=await Gi(t,r),{data:a,success:s}=aa.safeParse(n.json);if(!s||!a.reserveVeScaKey)return {isClaimEnabled:false,totalPoolReward:0,pendingVeScaReward:0,pendingScaReward:0};let c=await Ie(t,a.reserveVeScaKey),i=e?await $i(t,e).catch(()=>0):0,l=Math.max((c?.unlockAt??0)-Date.now(),0);return {pendingScaReward:i,pendingVeScaReward:i*(Math.floor(l/1e3)/126144e3),totalPoolReward:c?.currentVeScaBalance??0,isClaimEnabled:a.isClaimEnabled}};var ft=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getVeScaLoyaltyProgramInfos(e){return ia(this.context,e)}};var ca=bcs.bcs.Address;var la=async(t,e)=>{let{metadata:{addresses:o}}=t,r={parentId:o.referral.bindingTableId,name:U({type:"address",value:e})},n=await ce(t,r);return n?ca.parse(n.dynamicField.value.bcs):null};var gt=class extends R{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getVeScaKeyIdFromReferralBindings(e){return la(this.context,e)}};var se=zod.z.object({id:zod.z.string(),keys:zod.z.nullable(zod.z.object({contents:zod.z.array(zod.z.string())})),table:zod.z.object({id:zod.z.string(),size:zod.z.string()}),with_keys:zod.z.boolean()}),da=zod.z.object({id:zod.z.string(),size:zod.z.string()}),ua=zod.z.object({asset_active_states:zod.z.object({base:se,collateral:se}),borrow_dynamics:se,collateral_stats:se,id:zod.z.string(),interest_models:se,limiters:se,reward_factors:se,risk_models:se,vault:zod.z.object({balance_sheets:se,flash_loan_fees:se,id:zod.z.string(),market_coin_supplies:da,underlying_balances:da})});var Te="0x1::type_name::TypeName",pa="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",ma="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",ba="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",ya="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey";var fa=async(t,{poolNames:e=[]})=>{let o=new Set(e),{fetchWithCache:r,api:n}=t,a=await r({queryKey:g.api.getPoolAddresses(),queryFn:()=>n.get("/pool/addresses")});return o.size===0?a:Object.entries(a).reduce((s,[c,i])=>(o.has(c)&&(s[c]=i),s),{})},Yi=t=>{try{return t.name.type.includes("::type_name::TypeName")?bcs.bcs.struct("TypeName",{name:bcs.bcs.string()}).parse(t.name.bcs).name:bcs.bcs.string().parse(t.name.bcs)}catch{return}},le=async(t,{parentId:e,type:o,coinTypeKeys:r})=>{let{onchain:n,fetchWithCache:a}=t,s={},c=null,i=false;do{let l={parentId:e,cursor:c,limit:50},d=await a({queryKey:g.rpc.getDynamicFields({...l,node:n.url}),queryFn:()=>n.client.listDynamicFields(l)});for(let u of d.dynamicFields){if(u.name.type!==o)continue;let p=Yi(u);p&&r.has(p)&&(s[p]=u.fieldId);}c=d.cursor,i=d.hasNextPage;}while(i);return s},Hi=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n=[...new Set(Object.values(e).flatMap(s=>Object.values(s)))],a={};for(let s of ye(n,50)){let{objects:c}=await r({queryKey:g.rpc.getObjects({objectIds:s,node:o.url}),queryFn:()=>o.client.getObjects({objectIds:s,include:{json:true}})});for(let i of c)i instanceof Error||(a[i.objectId]=i);}return Object.entries(e).reduce((s,[c,i])=>(s[c]=Object.entries(i).reduce((l,[d,u])=>{let p=a[u];return l[d]=p?{objectId:p.objectId,json:p.json}:void 0,l},{}),s),{})},Xi=async(t,e,o)=>{let{onchain:r,fetchWithCache:n}=t,a={},s=null,c=false;do{let i={parentId:o,limit:50,cursor:s},l=await n({queryKey:g.rpc.getDynamicFields({...i,node:r.url}),queryFn:()=>r.client.listDynamicFields(i)});if(!l)break;for(let d of l.dynamicFields){let p=`0x${bcs.bcs.struct("TypeName",{name:bcs.bcs.string()}).parse(d.name.bcs).name}`;e.has(p)&&(a[p]=d.fieldId);}s=l.cursor,c=l.hasNextPage;}while(c);return a},ga=async(t,{poolNames:e=[]})=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,{core:a,spool:s,scoin:c}=n,{market:i,coins:l}=a,d={objectId:i,include:{json:true}},{object:u}=await r({queryKey:g.rpc.getObject({...d,node:o.url}),queryFn:()=>o.getObject(d)}),p=ua.safeParse(u?.json);if(!p.success)throw k(t.logger,new T("Failed to parse market object from on-chain data",{context:{market:i},cause:p.error}));let m=p.data,f=m.vault.balance_sheets.table.id,b=m.collateral_stats.table.id,y=m.borrow_dynamics.table.id,h=m.interest_models.table.id,S=m.risk_models.table.id,w=m.vault.flash_loan_fees.table.id,O=new Set(e),_=Object.entries(l).filter(W=>{let[Y,he]=W;return he?.coinType?O.size===0||O.has(Y):false});if(_.length===0)throw k(t.logger,new P("No coins to resolve pool addresses for (empty config or filter matched nothing)",{context:{poolNames:e}}));let j=await Xi(t,new Set(_.map(([,W])=>W.coinType)),w),v=new Set(_.map(([,W])=>W.coinType.slice(2))),[x,B,N,F,q,$,de,te,ie]=await Promise.all([le(t,{parentId:f,type:Te,coinTypeKeys:v}),le(t,{parentId:b,type:Te,coinTypeKeys:v}),le(t,{parentId:y,type:Te,coinTypeKeys:v}),le(t,{parentId:h,type:Te,coinTypeKeys:v}),le(t,{parentId:S,type:Te,coinTypeKeys:v}),le(t,{parentId:i,type:pa,coinTypeKeys:v}),le(t,{parentId:i,type:ma,coinTypeKeys:v}),le(t,{parentId:i,type:ba,coinTypeKeys:v}),le(t,{parentId:i,type:ya,coinTypeKeys:v})]),L=await Hi(t,{lendingPool:x,collateralPool:B,borrowDynamic:N,interestModel:F,riskModel:q,borrowFee:$,supplyLimit:de,borrowLimit:te,isolatedAsset:ie}),we={};for(let[W,Y]of _){let{coinType:he}=Y,oe=he.slice(2),It=L.lendingPool[oe],Ka=L.collateralPool[oe],qa=L.borrowDynamic[oe],Wa=L.interestModel[oe],Ua=L.riskModel[oe],Qa=L.borrowFee[oe],$a=L.supplyLimit[oe],Ga=L.borrowLimit[oe],uo=L.isolatedAsset[oe]?.json,De=`s${W}`,po=s.pools[De],Le=c.coins[De],mo=Y.oracle?.pyth;we[W]={coinName:W,symbol:Y.symbol,coinType:he,coinMetadataId:Y.metaData,decimals:Y.decimals,lendingPoolAddress:It?.objectId??"",collateralPoolAddress:Ka?.objectId??"",borrowDynamic:qa?.objectId??"",interestModel:Wa?.objectId??"",riskModel:Ua?.objectId,borrowFeeKey:Qa?.objectId??"",supplyLimitKey:$a?.objectId??"",borrowLimitKey:Ga?.objectId??"",isolatedAssetKey:uo?.id??"",isIsolated:uo?.value??false,spool:po?.id??"",spoolReward:po?.rewardPoolId??"",spoolName:De,sCoinName:De,sCoinType:Le?.coinType??"",sCoinTreasury:Le?.treasury??"",sCoinMetadataId:Le?.metaData??"",sCoinSymbol:Le?.symbol??"",pythFeed:mo?.feed??"",pythFeedObjectId:mo?.feedObject??"",flashloanFeeObject:j[he]??""};}return we};var ht=class extends R{api;onchain;constructor({api:e,onchain:o,...r}){super(r),this.api=e,this.onchain=o;}get context(){return {...this.baseContext,api:this.api,onchain:this.onchain}}getPoolAddresses({poolNames:e,source:o="api"}){return V({source:o,label:"PoolAddressesRepository.getPoolAddresses",logger:this.logger,api:()=>fa(this.context,{poolNames:e}),onchain:()=>ga(this.context,{poolNames:e})})}};var ha="https://hermes.pyth.network";var Sa=zod.z.object({id:zod.z.string(),price_info:zod.z.object({arrival_time:zod.z.string(),attestation_time:zod.z.string(),price_feed:zod.z.object({ema_price:zod.z.object({conf:zod.z.string(),expo:zod.z.object({magnitude:zod.z.string(),negative:zod.z.boolean()}),price:zod.z.object({magnitude:zod.z.string(),negative:zod.z.boolean()}),timestamp:zod.z.string()}),price:zod.z.object({conf:zod.z.string(),expo:zod.z.object({magnitude:zod.z.string(),negative:zod.z.boolean()}),price:zod.z.object({magnitude:zod.z.string(),negative:zod.z.boolean()}),timestamp:zod.z.string()}),price_identifier:zod.z.object({bytes:zod.z.string()})})})});var wa=({price:t,expo:e})=>{let o=e.negative?-1:1,r=t.negative?-1:1;return bignumber_js.BigNumber(t.magnitude).multipliedBy(bignumber_js.BigNumber(10).shiftedBy(o*+e.magnitude)).multipliedBy(r)};var xa=async(t,e)=>{let{fetchWithCache:o,metadata:{addresses:r},pythPriceServiceConfig:{endpoint:n,config:a}}=t,s=new Map(e.map(d=>[d,r.coins[d]?.oracle?.pyth?.feed])),c=Array.from(new Set(s.values())).filter(d=>!!d),l=await new pythSuiJs.SuiPriceServiceConnection(n,a).getLatestPriceFeeds(c);if(!l)throw k(t.logger,new Qe("Failed to fetch price feeds from Pyth API",{context:{endpoint:n,priceFeedIds:c}}));return await o({queryKey:g.oracle.getPythLatestPriceFeeds(n,c),queryFn:()=>{let d=new Map;for(let p of l)d.set(p.id,p.getPriceUnchecked().getPriceAsNumberUnchecked());let u={};for(let[p,m]of s)u[p]=(m!==void 0?d.get(m):void 0)??0;return u}})},Ta=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n={objectId:e,include:{json:true}},{object:a}=await r({queryKey:g.rpc.getObject({...n,node:o.url}),queryFn:()=>o.getObject(n)});return a??null},ka=async(t,e)=>{if(e.length===0)return [];let{onchain:o,fetchWithCache:r}=t,n={objectIds:e,include:{json:true}},{objects:a}=await r({queryKey:g.rpc.getObjects({...n,node:o.url}),queryFn:()=>o.client.getObjects(n)});return a.filter(s=>!(s instanceof Error))},Aa=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,a=new Map(e.map(l=>[l,n.coins[l]?.oracle?.pyth?.feedObject])),s=Array.from(new Set(a.values())).filter(l=>!!l),c=new Map;for(let l of ye(s,50)){let d={objectIds:l,include:{json:true}},{objects:u}=await r({queryKey:g.rpc.getObjects({...d,node:o.url}),queryFn:()=>o.client.getObjects(d)});for(let p of u){if(p instanceof Error)throw k(t.logger,new P("Failed to fetch price feed object on chain",{cause:p}));let{data:m,success:f}=Sa.safeParse(p.json);if(!f)throw k(t.logger,new T("Failed to parse price feed object",{context:{objectId:p.objectId,json:JSON.stringify(p.json)}}));let{price_feed:b}=m.price_info;c.set(p.objectId,wa(b.price).toNumber());}}let i={};for(let[l,d]of a)i[l]=(d!==void 0?c.get(d):void 0)??0;return i},Oa=async(t,{coinNames:e})=>{let{indexer:o,fetchWithCache:r}=t,n="/api/market/migrate";return (await r({queryKey:g.api.getMarkets(),queryFn:()=>o.get(n)})).pools.reduce((s,c)=>(e.includes(c.coinName)&&(s[c.coinName]=c.coinPrice),s),{})};var St=class extends R{config;indexer;onchain;constructor({pythPriceServiceConfig:e,indexer:o,onchain:r,...n}){super(n),this.config=e??{endpoint:ha,config:{timeout:4e3,httpRetries:1}},this.indexer=o,this.onchain=r;}get context(){return {...this.baseContext,onchain:this.onchain,indexer:this.indexer,pythPriceServiceConfig:this.config}}getPricesFromPyth({coinNames:e,source:o="api-first"}){return V({source:o,label:"PriceRepository.getPriceFromPyth",logger:this.logger,api:()=>xa(this.context,e),onchain:()=>Aa(this.context,e)})}getPythFeedObject(e){return Ta(this.context,e)}getPythFeedObjects(e){return ka(this.context,e)}getPricesFromIndexer(e){return Oa(this.context,e)}};var Pa=t=>{let{utils:e,indexerUrl:o,queryClientConfig:r=Ke}=t,n=e.onchain,a=gr(o),s=t.queryClient??new queryCore.QueryClient(r),c=e.logger,i={onchain:n,queryClient:s,logger:c},l,d,u,p,m,f,b,y,h,S,w,O,_,j;return {get market(){return l??=new nt({...i,indexer:a,addresses:wr(e),metadata:Cr(e)})},get coinBalance(){return d??=new at({...i,metadata:xr(e)})},get flashloan(){return u??=new st({...i,metadata:Tr(e)})},get obligation(){return p??=new it({...i,metadata:kr(e)})},get borrowIncentive(){return m??=new ct({...i,metadata:Ar(e)})},get isolatedAssets(){return f??=new lt({...i,metadata:vr(e)})},get veSca(){return b??=new ut({...i,metadata:Ir(e)})},get loyaltyProgram(){return y??=new pt({...i,metadata:jr(e)})},get xOracle(){return h??=new bt({...i,metadata:_r(e)})},get spool(){return S??=new yt({...i,indexer:a,metadata:Br(e)})},get veScaLoyaltyProgram(){return w??=new ft({...i,metadata:Nr(e)})},get referral(){return O??=new gt({...i,metadata:Or(e)})},get price(){return _??=new St({...i,indexer:a,metadata:Pr(e)})},get poolAddresses(){return j??=new ht({...i,api:hr(),metadata:Rr(e)})}}};var Ra=(t={})=>t.source?t.source:t.useOnChainQuery!==void 0?t.useOnChainQuery?"onchain":"api-first":t.indexer!==void 0?t.indexer?"api-first":"onchain":"api-first",ec={rpc:"onchain",indexer:"api","indexer-first":"api-first"},ge=t=>t?.source?ec[t.source]:t?.indexer?"api-first":"onchain";var va=t=>{let e=new Date(t*1e3),o=new Date(t*1e3);o.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&o.setUTCDate(o.getUTCDate()+1);let r=new Date().getTime();return o.getTime()-r>126144e3*1e3&&o.setUTCDate(o.getUTCDate()-1),Math.floor(o.getTime()/1e3)};var Ia=async(t,e)=>{let{api:o,fetchWithCache:r}=t;return r({queryKey:g.api.getAddresses({addressId:e}),queryFn:()=>o.get(`/addresses/${e}`)})};var Ct=class extends R{api;constructor({api:e,...o}){super(o),this.api=e;}get context(){return {...this.baseContext,api:this.api}}read(e){return Ia(this.context,e)}};var eo=class{url;addressId;addressApiRepo;network;logger;currentAddresses;addressMap=new Map;constructor({addressId:e,url:o=Ee,timeout:r,client:n,network:a="mainnet",logger:s=me,forceAddressesInterface:c}){this.url=o,this.addressId=e,this.network=a,this.logger=s,this.addressApiRepo=new Ct({api:new pe({url:o,timeout:r,client:n})}),c&&this.initializeForcedAddresses(c);}initializeForcedAddresses(e){let o=["localnet","devnet","testnet","mainnet"];Object.entries(e).forEach(([r,n])=>{if(!n){this.logger.warn(`No addresses provided for network: ${r}. Skipping initialization for this network.`);return}if(o.includes(r)){let a=r;this.addressMap.set(a,n),a===this.network&&(this.currentAddresses=n);}});}async read(e=this.addressId){let o=await this.addressApiRepo.read(e),r=n=>["localnet","devnet","testnet","mainnet"].includes(n);for(let[n,a]of Object.entries(o))r(n)&&typeof a=="object"&&(n===this.network&&(this.currentAddresses=a),this.addressMap.set(n,a));return this.addressId!==o.id&&this.logger.warn(`The addressId provided (${this.addressId}) does not match the id returned from the API (${o.id}).`),this.getAllAddresses()}get(e){if(this.currentAddresses)return e.split(".").reduce((r,n)=>typeof r=="object"?r[n]:r,this.currentAddresses)||void 0}set(e,o){if(this.currentAddresses){let r=e.split(".");r.reduce((n,a,s)=>{if(s===r.length-1)n[a]=o;else return n[a]},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)}getAllAddresses(){return Object.fromEntries(this.addressMap)}},wt=eo;var xt=({poolAddresses:t,whitelist:e,parseToOldMarketCoin:o})=>{let r=Object.fromEntries([...Object.entries(t).filter(([b,y])=>!!y).map(([b,y])=>[b,y.decimals]),...Object.entries(t).filter(([b,y])=>!!y?.sCoinName).map(([b,y])=>[y.sCoinName,y.decimals])]),n=Object.fromEntries([...Object.entries(t).filter(([b,y])=>!!y).map(([b,y])=>[b,y?.coinType]),...Object.entries(t).filter(([b,y])=>!!y&&y.sCoinName&&y.sCoinType).map(([b,y])=>[y.sCoinName,y.sCoinType])]),a=Object.fromEntries(Object.entries(n).map(([b,y])=>[y,b])),s=Object.fromEntries(Object.entries(t).filter(([b,y])=>!!y&&e.wormhole.has(b)).map(([b,y])=>[y.coinType,y.coinName])),c=Object.fromEntries(Object.entries(t).filter(([b,y])=>!!y).map(([b,y])=>[y.coinName,o(y.coinType)])),i=Object.fromEntries(Object.entries(t).filter(([b,y])=>!!y&&y.sCoinType&&y.sCoinName).map(([b,y])=>[suiKit.parseStructTag(y.sCoinType).name,y.sCoinName])),l=Object.fromEntries(Object.entries(t).filter(([b,y])=>!!y&&y.sCoinType&&y.sCoinName).map(([b,y])=>[y.sCoinType,y.sCoinName])),d=t.vsui?.coinType,u=d?{[d]:"vsui"}:{},p=Object.fromEntries(Object.entries(t).filter(([b,y])=>!!y&&e.suiBridge.has(y.coinName)).map(([b,y])=>[y.coinType,y.coinName])),m=Object.fromEntries(Object.entries(t).filter(([b,y])=>!!y&&y.sCoinName&&y.sCoinType).map(([b,y])=>[y.sCoinName,y.sCoinType])),f=new Set([...Object.values(t).filter(b=>!!b).map(b=>b.sCoinName?[b.coinName,b.sCoinName]:[b.coinName]).flat()]);return {coinDecimals:Object.freeze(r),coinTypes:Object.freeze(n),coinTypeToCoinNameMap:Object.freeze(a),coinNameToOldMarketCoinTypeMap:Object.freeze(c),wormholeCoinTypeToCoinNameMap:Object.freeze(s),voloCoinTypeToCoinNameMap:Object.freeze(u),suiBridgeCoinTypeToCoinNameMap:Object.freeze(p),scoinRawNameToSCoinNameMap:Object.freeze(i),scoinTypeToSCoinNameMap:Object.freeze(l),sCoinTypes:Object.freeze(m),supportedBorrowIncentiveRewards:f}};var ja={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};var _e=()=>Object.fromEntries(Object.entries(ja).map(([t,e])=>[t,new Set(e)])),oc=t=>{let e=new Set(t),o=()=>{throw new TypeError("Cannot mutate readonly ScallopConstants whitelist")};return Object.defineProperties(e,{add:{value:o},clear:{value:o},delete:{value:o}}),Object.freeze(e)},Me=t=>Object.freeze(Object.fromEntries(Object.entries(t).map(([e,o])=>[e,oc(o)]))),Fe=t=>Object.freeze(Object.fromEntries(Object.entries(t).map(([e,o])=>[e,o?Object.freeze({...o}):void 0]))),Tt=t=>{let e=_e();for(let[o,r]of Object.entries(t))r&&(Array.isArray(r)?e[o]=new Set(r):r instanceof Set&&(e[o]=new Set(r)));return Me(e)},to=t=>Object.keys(t).length===0;var Na=({address:t,logger:e,defaultValues:o})=>({async ensureAddresses({network:r,force:n,addressId:a}){let s=t.getAddresses(r);(!s||Object.keys(s).length===0||n)&&await t.read(a);},getAddresses(r){return t.getAddresses(r)},async fetchWhitelist(){let{api:r,fetchWithCache:n}=t.addressApiRepo.context,a=await(async()=>{try{return await n({queryKey:g.api.getWhiteList(),queryFn:()=>r.get("/pool/whitelist")})}catch(s){return e.warn("whitelist fetch failed; using default values",{message:s?.message}),o?.whitelist??_e()}})();return Tt(a)},async fetchPoolAddresses(){let{api:r,fetchWithCache:n}=t.addressApiRepo.context;return await(async()=>{try{return await n({queryKey:g.api.getPoolAddresses(),queryFn:()=>r.get("/pool/addresses")})}catch(s){return e.warn("poolAddresses fetch failed; using default values",{message:s?.message}),o?.poolAddresses??{}}})()}});var oo=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints","emerging"],rc=(t,e)=>Object.fromEntries(Object.entries(t).filter(([o])=>Object.values(e).some(r=>r.has(o))).filter(o=>o[1]!==void 0).map(([o,r])=>{let n=Object.fromEntries(Object.entries(r).map(([a,s])=>[a,typeof s=="boolean"?s??false:s||void 0]));return [o,n]})),nc=(t,e,o,r)=>{let n=t.getAddresses(e);return !!n&&Object.keys(n).length>0&&Object.keys(r).length>0&&oo.every(s=>o[s].size>0)},Ba=async({source:t,network:e,force:o,addressId:r,overrides:n={},current:a,parseToOldMarketCoin:s})=>{await t.ensureAddresses({network:e,force:o,addressId:r});let c=a.whitelist,i=a.poolAddresses;n.forcePoolAddressInterface&&(i=Fe(n.forcePoolAddressInterface)),n.forceWhitelistInterface&&(c=Tt(n.forceWhitelistInterface));let l=()=>xt({poolAddresses:i,whitelist:c,parseToOldMarketCoin:s});if(nc(t,e,c,i)&&!o)return {whitelist:c,poolAddresses:i,derived:l()};let[d,u]=await Promise.all([t.fetchWhitelist(),t.fetchPoolAddresses()]);return n.forceWhitelistInterface||(c=Me(d)),n.forcePoolAddressInterface||(i=Fe(rc(u,c))),{whitelist:c,poolAddresses:i,derived:l()}};var _a=t=>({getAddresses:()=>t.getAddresses()});var Ma=t=>({getPoolAddresses:()=>t.poolAddresses});var Fa=t=>({getWhitelist:()=>t.whitelist});var ac=["core.version","core.market","core.packages.protocol.id","core.coinDecimalsRegistry","core.oracles.xOracle"],sc=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints"],ic=(t,e)=>{let r=(e?.requiredPaths??ac).filter(a=>{let s=t.get(a);return s===void 0||s===""}),n=sc.filter(a=>{let s=t.whitelist[a];return !s||s.size===0});return {valid:r.length===0&&n.length===0,missingPaths:r,emptyWhitelistKeys:n}},Da=(t,e)=>{let o=ic(t,e);if(!o.valid)throw new re("Scallop config snapshot is incomplete",{context:{missingPaths:o.missingPaths,emptyWhitelistKeys:o.emptyWhitelistKeys}})};var cc=(t,e)=>{let o=e.split(".").reduce((r,n)=>{if(r&&typeof r=="object"&&n in r)return r[n]},t);return typeof o=="string"&&o!==""?o:void 0},lc=["lending","borrowing","collateral","packages","spool","scoin","suiBridge","wormhole","layerZero","oracles","borrowIncentiveRewards","rewardsAsPoint","pythEndpoints","deprecated","emerging"],dc=t=>{let e=t;return lc.reduce((o,r)=>{let n=e?.[r];return o[r]=n instanceof Set?new Set(n):new Set(Array.isArray(n)?n:[]),o},{})},La=(t,e)=>{let o=t.addressSource.getAddresses(),r={addresses:o,poolAddresses:t.poolAddressSource.getPoolAddresses(),whitelist:dc(t.whitelistSource.getWhitelist()),get:n=>cc(o,n)};return e?.validate&&Da(r,{requiredPaths:e.requiredPaths}),r};var dg=t=>({addresses:t.getAddresses(),poolAddresses:t.poolAddresses,whitelist:t.whitelist,get:e=>{let o=t.get(e);return o===""?void 0:o}});var uc=()=>{let t=Me(_e()),e=Fe({});return {whitelist:t,poolAddresses:e,derived:xt({poolAddresses:e,whitelist:t,parseToOldMarketCoin:()=>""})}},ro=class{address;logger;params;source;_state=uc();get coinDecimals(){return this._state.derived.coinDecimals}get coinNameToOldMarketCoinTypeMap(){return this._state.derived.coinNameToOldMarketCoinTypeMap}get scoinRawNameToSCoinNameMap(){return this._state.derived.scoinRawNameToSCoinNameMap}get scoinTypeToSCoinNameMap(){return this._state.derived.scoinTypeToSCoinNameMap}get wormholeCoinTypeToCoinNameMap(){return this._state.derived.wormholeCoinTypeToCoinNameMap}get voloCoinTypeToCoinNameMap(){return this._state.derived.voloCoinTypeToCoinNameMap}get suiBridgeCoinTypeToCoinNameMap(){return this._state.derived.suiBridgeCoinTypeToCoinNameMap}get coinTypes(){return this._state.derived.coinTypes}get sCoinTypes(){return this._state.derived.sCoinTypes}get coinTypeToCoinNameMap(){return this._state.derived.coinTypeToCoinNameMap}get supportedBorrowIncentiveRewards(){return this._state.derived.supportedBorrowIncentiveRewards}constructor(e){let{logger:o=me,scallopAddress:r,defaultValues:n,forcePoolAddressInterface:a,forceWhitelistInterface:s,strictInit:c,urls:i,...l}=e;this.address=r??new wt({...l,defaultValues:n?.addresses?{addresses:n.addresses}:void 0}),this.logger=o,this.params=e,this.source=e.constantsSource??Na({address:this.address,logger:this.logger,defaultValues:n});}get url(){return this.address.url}get protocolObjectId(){return this.address.get("core.object")??"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf"}get isInitialized(){return this.isInitializedFor("mainnet")}get whitelist(){return this._state.whitelist}get poolAddresses(){return this._state.poolAddresses}get(e){return this.address.get(e)}set(e,o){return this.address.set(e,o)}getAddresses(e){return this.address.getAddresses(e)}getAllAddresses(){return this.address.getAllAddresses()}switchCurrentAddresses(e){return this.address.switchCurrentAddresses(e)}isAddressInitialized({network:e="mainnet"}={}){let o=this.address.getAddresses(e);return !!o&&!to(o)}parseToOldMarketCoin(e){return `${this.protocolObjectId}::reserve::MarketCoin<${e}>`}isInitializedFor(e){return this.isAddressInitialized({network:e})&&!to(this._state.poolAddresses)&&oo.every(o=>this._state.whitelist[o].size>0)}async init({network:e="mainnet",force:o=false,addressId:r,constantsParams:n=this.params}={}){this._state=await Ba({source:this.source,network:e,force:o,addressId:r,overrides:{forcePoolAddressInterface:n.forcePoolAddressInterface,forceWhitelistInterface:n.forceWhitelistInterface},current:{whitelist:this._state.whitelist,poolAddresses:this._state.poolAddresses},parseToOldMarketCoin:a=>this.parseToOldMarketCoin(a)}),this.maybeAssertStrictInit();}maybeAssertStrictInit(){this.params.strictInit&&La({addressSource:_a(this),poolAddressSource:Ma(this),whitelistSource:Fa(this)},{validate:true});}},kt=ro;var Ea=10,ao=class{onchain;walletAddress;constants;logger;constructor(e){if(this.constants=e.scallopConstants??new kt(e),e.client){let{client:o,fullnodeUrl:r,tokensPerSecond:n=Ea}=e;this.onchain=Et(o,r,{tokensPerSecond:n});}else {let{network:o,fullnodeUrl:r,tokensPerSecond:n=Ea}=e,a=new grpc.SuiGrpcClient({baseUrl:r,network:o});this.onchain=Et(a,r,{tokensPerSecond:n});}this.walletAddress=e.walletAddress,this.logger=e.logger??me;}get address(){return this.constants.address}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 o=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.constants.whitelist.lending.has(o)}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,o=false){return o?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.constants.whitelist.scoin.has(e))return e;{let o=`s${e}`;return this.constants.whitelist.scoin.has(o)?o:void 0}}parseSCoinTypeNameToMarketCoinName(e){return this.constants.scoinRawNameToSCoinNameMap[e]??e}parseSCoinType(e){return this.constants.sCoinTypes[e]??""}parseSCoinNameFromType(e){return this.constants.scoinTypeToSCoinNameMap[e]}parseUnderlyingSCoinType(e){let o=this.parseCoinName(e);return this.parseCoinType(o)}getSCoinTreasury(e){return this.address.get(`scoin.coins.${e}.treasury`)}parseMarketCoinType(e){return this.parseCoinType(this.isMarketCoin(e)?this.parseCoinName(e):e,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:o,module:r,name:n,typeParams:a}=suiKit.parseStructTag(e);return o===this.constants.protocolObjectId&&r==="reserve"&&n==="MarketCoin"?this.parseMarketCoinName((typeof a[0]=="string"?suiKit.parseStructTag(a[0]):a[0]).name.toLowerCase()):this.constants.coinTypeToCoinNameMap[e]||this.constants.scoinTypeToSCoinNameMap[e]||suiKit.parseStructTag(e).name.toLowerCase()}async selectCoins({amount:e,count:o,coinType:r=suiKit.SUI_TYPE_ARG,ownerAddress:n=this.walletAddress}){if(e!==void 0&&e<=0)throw new Error("selectCoins amount must be greater than 0.");if(o!==void 0&&o<=0)throw new Error("selectCoins count must be greater than 0.");let a=[],s=e===void 0?void 0:BigInt(Math.trunc(e)),c=o??0,i=0n,l=true,d=null;for(;l&&(s===void 0?a.length<c:i<s);){let{objects:u,hasNextPage:p,cursor:m}=await this.onchain.client.listCoins({owner:n,coinType:r,cursor:d});u.sort((f,b)=>Number(BigInt(b.balance)-BigInt(f.balance)));for(let f of u)if(a.push({objectId:f.objectId,digest:f.digest,version:f.version,balance:f.balance}),i+=BigInt(f.balance),s===void 0?a.length>=c:i>=s)break;d=m,l=p;}if(!a.length)throw new Error("No valid coins found for the transaction.");return a}async mergeSimilarCoins(e,o,r,n=this.walletAddress){try{let a=await this.selectCoins({amount:Number.MAX_SAFE_INTEGER,coinType:r,ownerAddress:n});a.length>0&&e.mergeCoins(o,a.slice(0,500).map(e.objectRef));}catch{}}parseAprToApy(e,o=365){return (1+e/o)**o-1}parseApyToApr(e,o=365){return ((1+e)**(1/o)-1)*o}getUnlockAt(e,o){let r=Math.floor(new Date().getTime()/1e3),n=o?Math.max(Math.floor(o/1e3)-r,0):0,a=0;if(n===0){let s=(e??1)*86400;a=Math.min(r+s,r+126144e3);}else {let s=Math.min(e?e*86400+n:n,126144e3);a=r+s;}return va(a)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0&&this.constants.whitelist.lending.has(e.coinName)):[]}},At=ao;var Ot=(t,e)=>e.reduce((o,r)=>{let n=t[r];return n!==void 0&&(o[r]=n),o},{});var so=class{utils;repos;constructor({utils:e,queryClient:o,queryClientConfig:r,...n}){this.utils=e??new At(n),this.repos=Pa({utils:this.utils,queryClient:o,queryClientConfig:r});}get logger(){return this.utils.logger}async init(e=false){await this.utils.init({force:e});}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get onchain(){return this.utils.onchain}get address(){return this.utils.address}async fetchMarkets(e){let o=e?.poolCoinNames||e?.collateralCoinNames?Array.from(new Set([...e.poolCoinNames??[],...e.collateralCoinNames??[]])):void 0,r=e?.coinPrices??await this.getPythCoinPrices({coinNames:o})??{};return this.repos.market.getMarkets({coinPrices:r,poolCoinNames:e?.poolCoinNames,collateralCoinNames:e?.collateralCoinNames,source:ge(e)})}async getMarketPools(e=[...this.constants.whitelist.lending],o){let{pools:r,collaterals:n}=await this.fetchMarkets({...o,poolCoinNames:e,collateralCoinNames:e});return {pools:Ot(r,e),collaterals:Ot(n,e)}}async getMarketPool(e,o){return (await this.getMarketPools(void 0,o)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],o){let{collaterals:r}=await this.fetchMarkets({...o,poolCoinNames:[],collateralCoinNames:e});return Ot(r,e)}async getMarketCollateral(e,o){return (await this.getMarketCollaterals(void 0,o))[e]}async getObligations(e=this.walletAddress){return this.repos.obligation.getObligations(e)}async queryObligation(e){let o=typeof e=="string"?e:"objectId"in e?e.objectId:void 0;if(o===void 0)throw new T("queryObligation expects an object id (string) or an object reference");return this.repos.obligation.getObligationData(o)}async getObligationLocked(e){let o=typeof e=="string"?e:"objectId"in e?e.objectId:void 0;if(o===void 0)throw new T("getObligationLocked expects an object id (string) or an object reference");return this.repos.obligation.getObligationLocked(o)}async getCoinAmounts(e,o=this.walletAddress){return await this.repos.coinBalance.getCoinAmounts({coinNames:e,address:o})}async getCoinAmount(e,o=this.walletAddress){return await this.repos.coinBalance.getCoinAmount({coinName:e,address:o})}async getMarketCoinAmounts(e,o=this.walletAddress){let r=e??[...this.constants.whitelist.lending].map(n=>this.utils.parseMarketCoinName(n));return await this.repos.coinBalance.getMarketCoinAmounts({marketCoinNames:r,address:o})}async getMarketCoinAmount(e,o=this.walletAddress){return await this.repos.coinBalance.getMarketCoinAmount({marketCoinName:e,address:o})}async getSpools(e,o){let r=o?.coinPrices??await this.getAllCoinPrices({marketPools:o?.marketPools})??{};return this.repos.spool.getSpools({stakeCoinNames:e??[...this.constants.whitelist.spool],coinPrices:r,source:ge(o)})}async getSpool(e,o){let r=o?.coinPrices??await this.getAllCoinPrices()??{};return this.repos.spool.getSpool({stakeCoinName:e,coinPrices:r,source:ge(o)})}async getAllStakeAccounts(e=this.walletAddress){return await this.repos.spool.getStakeAccounts({address:e})}async getStakeAccounts(e,o=this.walletAddress){return (await this.getAllStakeAccounts(o))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let o={};for(let r of e){let n=await this.repos.spool.getStakePool(r);n&&(o[r]=n);}return o}async getStakePool(e){return this.repos.spool.getStakePool(e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){return this.repos.spool.getSpoolRewardPools(e)}async getStakeRewardPool(e){return this.repos.spool.getSpoolRewardPool(e)}async getPythCoinPrices(e){let o=e?.coinNames??Array.from(new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral]).values());return this.repos.price.getPricesFromPyth({coinNames:o,source:"api-first"})}async getPythCoinPrice(e){return (await this.getPythCoinPrices({coinNames:[e]}))[e]}async getIndexerCoinPrices(e){let o=e?.coinNames??Array.from(new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral]).values());return this.repos.price.getPricesFromIndexer({coinNames:o})}async getIndexerCoinPrice(e){return (await this.getIndexerCoinPrices({coinNames:[e]}))[e]}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],o){let r=o?.coinPrices??await this.getAllCoinPrices({marketPools:o?.marketPools})??{};return this.repos.borrowIncentive.getBorrowIncentivePools({coinNames:e,coinPrices:r})}async getBorrowIncentiveAccounts(e,o=[...this.constants.whitelist.lending]){return await this.repos.borrowIncentive.getBorrowIncentiveAccounts({obligationId:typeof e=="string"?e:e.objectId,coinNames:o})}async getLendings(e,o=this.walletAddress,r){let n=e??[...this.constants.whitelist.lending],a=n.map(b=>this.utils.parseMarketCoinName(b)),s=a.filter(b=>this.constants.whitelist.spool.has(b)),c=r?.coinPrices??await this.getPythCoinPrices({coinNames:n})??{},i=r?.marketPools??(await this.getMarketPools(n,{...r,coinPrices:c})).pools,l=await this.getSpools(s,{...r,marketPools:i,coinPrices:c}),[d,u,p,m]=await Promise.all([this.getCoinAmounts(n,o),this.getMarketCoinAmounts(a,o),this.getSCoinAmounts(a,o),this.getAllStakeAccounts(o)]),f={};for(let b of n){let y=this.utils.parseMarketCoinName(b),h=s.includes(y);f[b]=Co({coinName:b,symbol:this.utils.parseSymbol(b),coinType:this.utils.parseCoinType(b),marketCoinType:this.utils.parseMarketCoinType(b),coinDecimal:this.utils.getCoinDecimal(b)??0,coinPrice:c[b]??0,marketPool:i?.[b],spool:h?l[y]:void 0,stakeAccounts:h?m[y]??[]:[],coinAmount:d[b]??0,marketCoinAmount:u[y]??0,sCoinAmount:p[y]??0});}return f}async getLending(e,o=this.walletAddress,r){return (await this.getLendings([e],o,r))[e]}async getObligationAccounts(e=this.walletAddress,o){return V({source:ge(o),label:"ScallopQuery.getObligationAccounts",logger:this.logger,api:()=>this.assembleObligationAccountsByOwner(e,o,true),onchain:()=>this.assembleObligationAccountsByOwner(e,o,false)})}async getObligationAccountsByIds(e,o){return V({source:ge(o),label:"ScallopQuery.getObligationAccountsByIds",logger:this.logger,api:()=>this.assembleObligationAccountsByIds(e,o,true),onchain:()=>this.assembleObligationAccountsByIds(e,o,false)})}async getObligationAccountById(e,o){return V({source:ge(o),label:"ScallopQuery.getObligationAccountById",logger:this.logger,api:()=>this.assembleObligationAccountById(e,o,true),onchain:()=>this.assembleObligationAccountById(e,o,false)})}async resolveObligationMarketInputs(e,o){let r=e?.market??await this.getMarketPools(void 0,{indexer:o}),n=e?.coinPrices??await this.getAllCoinPrices({marketPools:r.pools});return {market:r,coinPrices:n}}async assembleObligationAccount(e,o){let{market:r,coinPrices:n,coinAmounts:a}=o,[s,c,i]=await Promise.all([this.queryObligation(e),this.getBorrowIncentivePools(void 0,{coinPrices:n,marketPools:r.pools}),this.getBorrowIncentiveAccounts(e)]);return wo({obligationId:typeof e=="string"?e:e.objectId,collateralCoinNames:Array.from(this.constants.whitelist.collateral),market:r,coinPrices:n,coinAmounts:a,obligationQuery:s,borrowIncentivePools:c,borrowIncentiveAccounts:i,utils:{parseCoinNameFromType:l=>this.utils.parseCoinNameFromType(l),parseCoinType:l=>this.utils.parseCoinType(l),parseSymbol:l=>this.utils.parseSymbol(l),getCoinDecimal:l=>this.utils.getCoinDecimal(l),parseSCoinTypeNameToMarketCoinName:l=>this.utils.parseSCoinTypeNameToMarketCoinName(l)}})}async assembleObligationAccountsByOwner(e,o,r){let{market:n,coinPrices:a}=await this.resolveObligationMarketInputs(o,r),[s,c]=await Promise.all([this.getCoinAmounts(void 0,e),this.getObligations(e)]),i=await this.repos.obligation.getObligationObjects(c.map(d=>d.id)),l={};return await Promise.allSettled(c.map(async(d,u)=>{l[d.keyId]=await this.assembleObligationAccount(i[u]??d.id,{market:n,coinPrices:a,coinAmounts:s});})),l}async assembleObligationAccountsByIds(e,o,r){let{market:n,coinPrices:a}=await this.resolveObligationMarketInputs(o,r),s=[];return await Promise.allSettled(e.map(async c=>{let i=await this.assembleObligationAccount(c,{market:n,coinPrices:a,coinAmounts:{}});i&&s.push(i);})),s}async assembleObligationAccountById(e,o,r){let{market:n,coinPrices:a}=await this.resolveObligationMarketInputs(o,r);return this.assembleObligationAccount(e,{market:n,coinPrices:a,coinAmounts:{}})}async getObligationAccount(e,o=this.walletAddress,r){let n=await this.getObligationAccounts(o,r);return Object.values(n).find(a=>a?.obligationId===e)}async getTvl(e){let o=await this.getIndexerCoinPrices();return this.repos.market.getTvl({source:ge(e),coinPrices:o})}async getVeSca(e){return await this.repos.veSca.getVeSca(typeof e=="string"?e:e.objectId)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:o=false}={}){return await this.repos.veSca.getVeScasByAddress({address:e,excludeEmpty:o})}async getVeScaTreasuryInfo(){return await this.repos.veSca.getVeScaTreasuryInfo()}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return this.repos.referral.getVeScaKeyIdFromReferralBindings(e)}async getBindedObligation(e){return this.repos.borrowIncentive.getBindedObligation(e)}async getBindedVeScaKey(e){return this.repos.borrowIncentive.getBindedVeScaKey(e)}async getLoyaltyProgramInfos(e){let o=e??(await this.getVeScas())[0]?.keyId,r=typeof o=="string"?o:o?.objectId;return this.repos.loyaltyProgram.getLoyaltyProgramInfos(r)}async getVeScaLoyaltyProgramInfos(e){return this.repos.veScaLoyaltyProgram.getVeScaLoyaltyProgramInfos(e)}async getSCoinTotalSupply(e){return await this.repos.coinBalance.getSCoinTotalSupply(e)}async getSCoinAmounts(e,o=this.walletAddress){return await this.repos.coinBalance.getSCoinAmounts({sCoinNames:e,address:o})}async getSCoinAmount(e,o=this.walletAddress){let r=this.utils.parseSCoinName(e);return r?await this.repos.coinBalance.getSCoinAmount({sCoinName:r,address:o}):0}async getSCoinSwapRate(e,o){if(e===o)throw new T("fromAsset and toAsset must be different");if(!this.constants.whitelist.scoin.has(e))throw new T("fromAsset is not supported");if(!this.constants.whitelist.scoin.has(o))throw new T("toAsset is not supported");let r=this.utils.parseCoinName(e),n=this.utils.parseCoinName(o),[a,s]=await Promise.all([this.getMarketPool(r),this.getMarketPool(n)]);if(!a||!s)throw new T("Failed to fetch the lendings data");if(a.conversionRate===0||s.conversionRate===0)throw new T("Conversion rate cannot be zero");let c=a.conversionRate,i=1/s.conversionRate,l=await this.getPythCoinPrices();if(!l[r]||!l[n]||l[r]===0||l[n]===0){let u=await this.getIndexerCoinPrices().catch(()=>({}));l={...l,...u};}if(!l[r]||!l[n])throw new T("Failed to fetch the coin prices");let d=l[r]/l[n];return bignumber_js.BigNumber(c).multipliedBy(d).multipliedBy(i).toNumber()}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await this.repos.flashloan.getFlashloanFees(e)}async getPoolSupplyLimit(e){return this.repos.market.getPoolSupplyLimit(e)}async getPoolBorrowLimit(e){return this.repos.market.getPoolBorrowLimit(e)}async getIsolatedAssets(e=false){return await this.repos.isolatedAssets.getIsolatedAssets({source:Ra({useOnChainQuery:e})})}async isIsolatedAsset(e,o=false){let r=this.constants.poolAddresses[e];return r&&!o?r.isIsolated:(await this.repos.isolatedAssets.getIsolatedAssets({source:"onchain"})).includes(this.utils.parseCoinType(e))}async getAllCoinPrices(e){let o=e?.indexer??false,r=e?.coinPrices??(o?await this.getIndexerCoinPrices():await this.getPythCoinPrices()),n=e?.marketPools??(await this.getMarketPools(void 0,{coinPrices:r,indexer:o})).pools;return To({coinPrices:r,marketPools:n,sCoinNames:[...this.constants.whitelist.scoin],parseCoinName:a=>this.utils.parseCoinName(a)})}async getPoolAddresses(e=this.address.addressId){if(!e)throw new T("apiAddressId is required");return this.repos.poolAddresses.getPoolAddresses({})}async getUserPortfolio(e){let o=e?.walletAddress??this.walletAddress,r=e?.indexer??false,n=await this.getAllCoinPrices({indexer:r}),a=await this.getMarketPools(void 0,{indexer:r,coinPrices:n}),[s,c,i]=await Promise.all([this.getLendings(void 0,o,{indexer:r,marketPools:a.pools,coinPrices:n}),this.getObligationAccounts(o,{indexer:r,market:a,coinPrices:n}),this.getVeScas({walletAddress:o,excludeEmpty:true})]);return xo({lendings:s,obligationAccounts:c,veScas:i,coinPrices:n,marketPools:a.pools})}async getPriceUpdatePolicies(){return this.repos.xOracle.getPriceUpdatePolicies()}async getAssetOracles(){return this.repos.xOracle.getAssetOracles()}async getSwitchboardOnDemandAggregatorObjectIds(e){return this.repos.xOracle.getOnDemandAggObjectIds(e)}},Pt=so;var io=class{query;usePythPullModel;useOnChainXOracleList;sponsoredFeeds;suiKit;pythEndpoints;constructor({usePythPullModel:e=true,useOnChainXOracleList:o=true,sponsoredFeeds:r=[],pythEndpoints:n=[],query:a,...s}){this.suiKit=new suiKit.SuiKit({...s,fullnodeUrls:[s.fullnodeUrl]}),this.query=a??new Pt({...s,walletAddress:s.walletAddress??this.suiKit.currentAddress}),this.usePythPullModel=e,this.useOnChainXOracleList=o,this.sponsoredFeeds=r,this.pythEndpoints=n;}_executor;get executor(){return this._executor??=new xe(this.suiKit)}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get onchain(){return this.utils.onchain}get address(){return this.utils.address}async init(e=false){await this.query.init(e);}createTxBlock(e){return br(this,e)}async selectCoin(e,o,r,n=this.walletAddress,a=false){if(o==="sui"&&!a){let[s]=e.splitSUIFromGas([r]);return {takeCoin:s}}else {let s=this.utils.parseCoinType(o),c=await this.utils.selectCoins({amount:r,coinType:s,ownerAddress:n}),i=c.reduce((u,p)=>(u+=Number(p.balance),u),0),[l,d]=e.takeAmountFromCoins(c,r);return {takeCoin:l,leftCoin:d,totalAmount:i}}}async selectMarketCoin(e,o,r,n=this.walletAddress){let a=this.utils.parseMarketCoinType(o),s=await this.utils.selectCoins({amount:r,coinType:a,ownerAddress:n}),c=s.reduce((d,u)=>(d+=Number(u.balance),d),0),[i,l]=e.takeAmountFromCoins(s,Math.min(r,c));return {takeCoin:i,leftCoin:l,totalAmount:c}}async selectSCoin(e,o,r,n=this.walletAddress){let a=this.utils.parseSCoinType(o),s=await this.utils.selectCoins({amount:r,coinType:a,ownerAddress:n}),c=s.reduce((d,u)=>(d+=Number(u.balance),d),0),[i,l]=e.takeAmountFromCoins(s,Math.min(c,r));return {takeCoin:i,leftCoin:l,totalAmount:c}}async selectSCoinOrMarketCoin(e,o,r,n=this.walletAddress){let a=r,s={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:l,takeCoin:d,totalAmount:u}=await this.selectSCoin(e,o,a,n);if(s.leftCoins.push(l),s.sCoins.push(d),a-=u,a>0){let{leftCoin:p,takeCoin:m}=await this.selectMarketCoin(e,o,r,n);e.transferObjects([p],n),s.marketCoins.push(m);}}catch{let{takeCoin:d,leftCoin:u}=await this.selectMarketCoin(e,o,r,n);s.leftCoins.push(u),s.marketCoins.push(d);}e.transferObjects(s.leftCoins,n);let c=s.marketCoins.length>0?s.marketCoins.length>1?e.mergeCoins(s.marketCoins[0],s.marketCoins.slice(1)):s.marketCoins[0]:void 0;return {sCoin:s.sCoins.length>0?s.sCoins.length>1?e.mergeCoins(s.sCoins[0],s.sCoins.slice(1)):s.sCoins[0]:void 0,marketCoin:c}}async signAndSendTxBlock(e){return await this.executor.signAndSendTxn(e)}moveCall(e,o,r,n){return e.moveCall(o,r,n)}},Rt=io;var co=class{builder;collateralService;lendingService;borrowService;spoolService;veScaService;referralService;networkType;constructor({builder:e,networkType:o,...r}){this.builder=e??new Rt(r),this.collateralService=new We(this),this.lendingService=new Ue(this),this.borrowService=new $e(this),this.spoolService=new Ge(this),this.veScaService=new ze(this),this.referralService=new Ye(this),this.networkType=o??"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 suiKit(){return this.builder.suiKit}get onchain(){return this.utils.onchain}get executor(){return this.builder.executor}get address(){return this.builder.address}async init(e=false){await this.builder.init(e);}async openObligation(e=true){return this.borrowService.openObligation(e)}async depositCollateral(e,o,r=true,n,a,s){return this.collateralService.depositCollateral(e,o,r,n,a,s)}async withdrawCollateral(e,o,r=true,n,a,s,c){return this.collateralService.withdrawCollateral(e,o,r,n,a,s,c)}async supply(e,o,r=true,n){return this.lendingService.supply(e,o,r,n)}async supplyAndStake(e,o,r=true,n,a){return this.borrowService.supplyAndStake(e,o,r,n,a)}async withdraw(e,o,r=true,n){return this.lendingService.withdraw(e,o,r,n)}async borrow(e,o,r=true,n,a,s,c){return this.borrowService.borrow(e,o,r,n,a,s,c)}async repay(e,o,r=true,n,a,s,c){return this.borrowService.repay(e,o,r,n,a,s,c)}async flashLoan(e,o,r,n=true,a){return this.lendingService.flashLoan(e,o,r,n,a)}async createStakeAccount(e,o=true,r){return this.spoolService.createStakeAccount(e,o,r)}async stake(e,o,r=true,n,a){return this.spoolService.stake(e,o,r,n,a)}async unstake(e,o,r=true,n,a){return this.spoolService.unstake(e,o,r,n,a)}async unstakeAndWithdraw(e,o,r=true,n,a){return this.spoolService.unstakeAndWithdraw(e,o,r,n,a)}async claim(e,o=true,r,n){return this.spoolService.claim(e,o,r,n)}async stakeObligation(e,o,r=true,n){return this.borrowService.stakeObligation(e,o,r,n)}async unstakeObligation(e,o,r=true,n){return this.borrowService.unstakeObligation(e,o,r,n)}async claimBorrowIncentive(e,o,r=true,n){return this.borrowService.claimBorrowIncentive(e,o,r,n)}async migrateAllMarketCoin(e=true,o=true,r){let n=r??this.walletAddress,a=this.builder.createTxBlock();a.setSender(n);let s=[];for(let c of this.constants.whitelist.scoin){let i=[];try{let{takeCoin:l}=await this.builder.selectMarketCoin(a,c,Number.MAX_SAFE_INTEGER,n);if(l){let d=a.mintSCoin(c,l);i.push(d);}}catch(l){if(!l.toString().includes("No valid coins found for the transaction"))throw l}if(e&&this.constants.whitelist.spool.has(c))try{let l=await a.unstakeQuick(Number.MAX_SAFE_INTEGER,c);l&&i.push(l);}catch{}if(i.length>0){let l=i[0];i.length>1&&a.mergeCoins(l,i.slice(1));let d=this.utils.parseSCoinType(c);await this.utils.mergeSimilarCoins(a,l,d,n),s.push(l);}}return s.length>0&&a.transferObjects(s,n),o?await this.executor.signAndSendTxn(a):a.txBlock}async claimAllUnlockedSca(e=true,o){return this.veScaService.claimAllUnlockedSca(e,o)}async mintTestCoin(e,o,r=true,n){if(!(this.networkType==="testnet"))throw new Error("Only be used on the test network.");let s=this.builder.createTxBlock(),c=n??this.walletAddress,i=this.address.get("core.packages.testCoin.id"),l=this.address.get(`core.coins.${e}.treasury`),d=`${i}::${e}::mint`,u=s.moveCall(d,[l,o]);return s.transferObjects([u],c),r?await this.executor.signAndSendTxn(s):s.txBlock}},vt=co;var lo=class{client;constructor({client:e,...o}){this.client=e??new vt(o);}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 getScallopConstants(){return await this.init(),this.client.constants}},Va=lo;
|
|
19
20
|
|
|
20
|
-
exports.API_BASE_URL =
|
|
21
|
-
exports.DEFAULT_CACHE_OPTIONS =
|
|
22
|
-
exports.IS_VE_SCA_TEST =
|
|
23
|
-
exports.MAX_LOCK_DURATION =
|
|
24
|
-
exports.MAX_LOCK_ROUNDS =
|
|
25
|
-
exports.MIN_INITIAL_LOCK_AMOUNT =
|
|
26
|
-
exports.MIN_TOP_UP_AMOUNT =
|
|
27
|
-
exports.OLD_BORROW_INCENTIVE_PROTOCOL_ID =
|
|
28
|
-
exports.POOL_ADDRESSES =
|
|
29
|
-
exports.
|
|
30
|
-
exports.
|
|
31
|
-
exports.
|
|
32
|
-
exports.
|
|
33
|
-
exports.
|
|
34
|
-
exports.
|
|
35
|
-
exports.
|
|
36
|
-
exports.
|
|
37
|
-
exports.
|
|
38
|
-
exports.
|
|
39
|
-
exports.
|
|
40
|
-
exports.
|
|
41
|
-
exports.
|
|
42
|
-
exports.
|
|
43
|
-
exports.
|
|
44
|
-
exports.
|
|
45
|
-
exports.
|
|
46
|
-
exports.
|
|
21
|
+
exports.API_BASE_URL = Ee;
|
|
22
|
+
exports.DEFAULT_CACHE_OPTIONS = Ke;
|
|
23
|
+
exports.IS_VE_SCA_TEST = wc;
|
|
24
|
+
exports.MAX_LOCK_DURATION = H;
|
|
25
|
+
exports.MAX_LOCK_ROUNDS = ke;
|
|
26
|
+
exports.MIN_INITIAL_LOCK_AMOUNT = Nt;
|
|
27
|
+
exports.MIN_TOP_UP_AMOUNT = Bt;
|
|
28
|
+
exports.OLD_BORROW_INCENTIVE_PROTOCOL_ID = jt;
|
|
29
|
+
exports.POOL_ADDRESSES = Ic;
|
|
30
|
+
exports.REQUIRED_CORE_PATHS = ac;
|
|
31
|
+
exports.REQUIRED_WHITELIST_KEYS = sc;
|
|
32
|
+
exports.RPC_PROVIDERS = Oc;
|
|
33
|
+
exports.SCA_COIN_TYPE = qe;
|
|
34
|
+
exports.SDK_API_BASE_URL = Ve;
|
|
35
|
+
exports.Scallop = Va;
|
|
36
|
+
exports.ScallopAddress = wt;
|
|
37
|
+
exports.ScallopBuilder = Rt;
|
|
38
|
+
exports.ScallopClient = vt;
|
|
39
|
+
exports.ScallopConfigError = re;
|
|
40
|
+
exports.ScallopConstants = kt;
|
|
41
|
+
exports.ScallopError = G;
|
|
42
|
+
exports.ScallopIndexerError = Qe;
|
|
43
|
+
exports.ScallopParseError = T;
|
|
44
|
+
exports.ScallopQuery = Pt;
|
|
45
|
+
exports.ScallopRpcError = P;
|
|
46
|
+
exports.ScallopTransactionBuildError = ne;
|
|
47
|
+
exports.ScallopUtils = At;
|
|
48
|
+
exports.SuiKitTransactionExecutor = xe;
|
|
49
|
+
exports.TEST_ADDRESSES = Rc;
|
|
50
|
+
exports.UNLOCK_ROUND_DURATION = ue;
|
|
51
|
+
exports.USE_TEST_ADDRESS = xc;
|
|
52
|
+
exports.WHITELIST = vc;
|
|
53
|
+
exports.assertConfigSnapshot = Da;
|
|
54
|
+
exports.consoleLogger = Wu;
|
|
55
|
+
exports.createLiveAddressConfigSource = _a;
|
|
56
|
+
exports.createLivePoolAddressConfigSource = Ma;
|
|
57
|
+
exports.createLiveWhitelistConfigSource = Fa;
|
|
58
|
+
exports.createScallopConfigSnapshot = dg;
|
|
59
|
+
exports.loadScallopConfigSnapshot = La;
|
|
60
|
+
exports.noopLogger = me;
|
|
61
|
+
exports.queryKeys = g;
|
|
62
|
+
exports.validateConfigSnapshot = ic;
|
|
63
|
+
exports.xOracleList = bo;
|