@bze/bze-ui-kit 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +90 -30
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +80 -30
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/constants/chain.ts","../src/constants/assets.ts","../src/constants/testnet.ts","../src/storage/storage.ts","../src/constants/placeholders.ts","../src/types/asset.ts","../src/types/market.ts","../src/types/settings.ts","../src/types/events.ts","../src/utils/amount.ts","../src/utils/address.ts","../src/utils/strings.ts","../src/utils/charts.ts","../src/utils/debounce.ts","../src/utils/denom.ts","../src/utils/events.ts","../src/utils/formatter.ts","../src/utils/functions.ts","../src/utils/coins.ts","../src/utils/ibc.ts","../src/utils/liquidity_pool.ts","../src/utils/market.ts","../src/utils/number.ts","../src/utils/staking.ts","../src/utils/user_errors.ts","../src/constants/settings.ts","../src/storage/settings.ts","../src/query/client.ts","../src/query/burner.ts","../src/constants/endpoints.ts","../src/query/module.ts","../src/query/bank.ts","../src/query/epoch.ts","../src/utils/validation.ts","../src/utils/validator.ts","../src/utils/ws_rpc_client.ts","../src/constants/market.ts","../src/constants/ecosystem.ts","../src/constants/keplr.ts","../src/service/amm_router.ts","../src/service/blockchain_event_manager.ts","../src/query/supply.ts","../src/service/assets_factory.ts","../src/query/ibc.ts","../src/service/keplr.ts","../src/query/block.ts","../src/query/raffle.ts","../src/query/factory.ts","../src/query/liquidity_pools.ts","../src/query/markets.ts","../src/query/prices.ts","../src/query/rewards.ts","../src/query/staking.ts","../src/query/aggregator.ts","../src/contexts/assets_context.ts","../src/hooks/useAssets.ts","../src/hooks/useConnectionType.ts","../src/hooks/useSigningClient.ts","../src/utils/signing_client_setup.ts","../src/hooks/usePrices.ts","../src/hooks/useSettings.ts","../src/hooks/useBalances.ts","../src/hooks/useEpochs.ts","../src/hooks/useLiquidityPools.ts","../src/hooks/useAssetsValue.ts","../src/hooks/useFeeTokens.ts","../src/hooks/useMarkets.ts","../src/hooks/useToast.tsx","../src/components/toaster.tsx","../src/hooks/useTx.tsx","../src/hooks/useValidatorLogos.ts","../src/components/highlight.tsx","../src/components/sidebar/sidebar.tsx","../src/components/sidebar/settings-sidebar.tsx","../src/components/sidebar/wallet-sidebar.tsx","../src/components/settings-toggle.tsx","../src/components/testnet-banner.tsx"],"sourcesContent":["// === Configuration ===\n// Call these early in your app to configure the lib for your specific app\nexport { setStorageKeyVersion } from './storage/storage';\nexport { setDefaultTxMemo, getDefaultTxMemo } from './constants/placeholders';\n\n// === Types ===\nexport type { Asset, IBCData, IBCCounterparty, IbcTransitionMock, ChainAssets } from './types/asset';\nexport { LP_ASSETS_DECIMALS } from './types/asset';\nexport type { Balance, PrettyBalance } from './types/balance';\nexport type { TradeViewChart } from './types/charts';\nexport type { HistoryOrder, SwapHistory } from './types/aggregator';\nexport type { DenomTrace, CounterpartyChainForChannel } from './types/ibc';\nexport type { LiquidityPoolData, UserPoolData, SwapRouteResult } from './types/liquidity_pool';\nexport type { Market, MarketData, ActiveOrders } from './types/market';\nexport { ORDER_TYPE_BUY, ORDER_TYPE_SELL } from './types/market';\nexport type { PriceApiResponse } from './types/price';\nexport type { ValidationResult, BeeZeeEndpoints, AppSettings, EndpointValidationResults } from './types/settings';\nexport { CONNECTION_TYPE_WS, CONNECTION_TYPE_POLLING, CONNECTION_TYPE_NONE } from './types/settings';\nexport type { ConnectionType } from './types/settings';\nexport type {\n NativeStakingData, UserNativeStakingData, UserNativeStakingRewards,\n NativeUnbondingSummary, AddressRewardsStaking, ExtendedPendingUnlockParticipantSDKType\n} from './types/staking';\nexport type { AddressValidationResult } from './types/validation';\nexport type { BurnHistoryItem, NextBurn } from './types/burn';\nexport type { BlockResults } from './types/block';\nexport type {\n Attribute, TendermintEvent, InternalEvent, EventCallback\n} from './types/events';\nexport {\n CURRENT_WALLET_BALANCE_EVENT, ORDER_EXECUTED_EVENT, ORDER_BOOK_CHANGED_EVENT,\n SUPPLY_CHANGED_EVENT, SWAP_EXECUTED_EVENT, NEXT_BURN_CHANGED_EVENT,\n RAFFLE_CHANGED_EVENT, LOCK_CHANGED_EVENT, EPOCH_START_EVENT\n} from './types/events';\n\n// === Utils ===\nexport {\n toBigNumber, uAmountToAmount, uAmountToBigNumberAmount,\n amountToBigNumberUAmount, amountToUAmount, prettyAmount,\n priceToUPrice, priceToBigNumberUPrice, uPriceToPrice, uPriceToBigNumberPrice\n} from './utils/amount';\nexport { truncateAddress, validateBech32Address, validateBZEBech32Address } from './utils/address';\nexport {\n CHART_4H, CHART_1D, CHART_7D, CHART_30D, CHART_1Y,\n getNoOfIntervalsNeeded, getChartIntervalsLimit, getChartMinutes\n} from './utils/charts';\nexport { addDebounce, addMultipleDebounce, cancelDebounce } from './utils/debounce';\nexport {\n isFactoryDenom, isIbcDenom, isLpDenom, isNativeDenom,\n getDenomType, truncateDenom, isIbcAsset\n} from './utils/denom';\nexport { getMarketOrderBookChangedEvent, getMarketEventKey, mapEventAttributes } from './utils/events';\nexport {\n formatUsdAmount, shortNumberFormat, intlDateFormat,\n formatDate, formatTimeRemaining, formatTimeRemainingFromEpochs\n} from './utils/formatter';\nexport { sleep, openExternalLink } from './utils/functions';\nexport { coins, parseCoins } from './utils/coins';\nexport { canDepositFromIBC, canSendToIBC, denomOnFirstHopChainFromTrace, getIbcTransferTimeout } from './utils/ibc';\nexport {\n calculateUserPoolData, calculatePoolOppositeAmount, calculatePoolPrice,\n createPoolId, poolIdFromPoolDenom\n} from './utils/liquidity_pool';\nexport {\n createMarketId, calculateTotalAmount, calculatePricePerUnit,\n calculateAmountFromPrice, getMinAmount\n} from './utils/market';\nexport { sanitizeNumberInput, sanitizeIntegerInput, toPercentage } from './utils/number';\nexport {\n calcNativeStakingApr, parseUnbondingDays,\n calculateRewardsStakingApr, calculateRewardsStakingPendingRewards\n} from './utils/staking';\nexport { stringTruncateFromCenter, removeLeadingZeros } from './utils/strings';\nexport { prettyError } from './utils/user_errors';\nexport {\n validateRestEndpoint, validateRpcEndpoint, validateEndpoints, convertToWebSocketUrl\n} from './utils/validation';\nexport { getValidatorSupportedDenoms, getValidatorPageUrl, isPoolSupportedByValidator } from './utils/validator';\nexport { subscribeToBlockchainEvents } from './utils/ws_rpc_client';\n\n// === Constants ===\nexport {\n ASSET_TYPE_FACTORY, ASSET_TYPE_IBC, ASSET_TYPE_NATIVE, ASSET_TYPE_LP,\n VERIFIED_ASSETS, EXCLUDED_ASSETS, STABLE_COINS,\n getChainNativeAssetDenom, getUSDCDenom\n} from './constants/assets';\nexport {\n getChainId, getChainName, isTestnetChain, getChains, getChainByChainId,\n getChainByName, getWalletChainsNames, getAssetLists, getIBCAssetList,\n getChainAddressPrefix, getChainExplorerURL, getLockerAddress\n} from './constants/chain';\nexport {\n getRestURL, getRpcURL, getArchwayRpcURL, getOsmosisRpcUrl, getNobleRpcUrl,\n getJackalRpcUrl, getOmniFlixRpcUrl, getAtomOneRpcUrl, getArchwayRestURL,\n getOsmosisRestURL, getNobleRestURL, getJackalRestURL, getOmniFlixRestURL,\n getAtomOneRestURL, getAggregatorHost\n} from './constants/endpoints';\nexport { TOKEN_LOGO_PLACEHOLDER, BZE_CIRCLE_LOGO, DEFAULT_TX_MEMO } from './constants/placeholders';\nexport { SETTINGS_STORAGE_KEY, DEFAULT_SETTINGS, VALIDATION_ERRORS, getAppName } from './constants/settings';\nexport { EXCLUDED_MARKETS } from './constants/market';\nexport { ECOSYSTEM_MENU_LABEL, getEcosystemApps } from './constants/ecosystem';\nexport type { EcosystemApp } from './constants/ecosystem';\nexport { MAINNET_CHAIN_INFO_FALLBACK, TESTNET_CHAIN_INFO_FALLBACK } from './constants/keplr';\nexport { BZE_TESTNET_2_SUGGEST_CHAIN, BZE_TESTNET_NETWORK } from './constants/testnet';\n\n// === Storage ===\nexport {\n TTL_NO_EXPIRY, getFromLocalStorage, setInLocalStorage,\n removeFromLocalStorage, getKeyExpiry, setKeyExpiry\n} from './storage/storage';\nexport { getSettings, setSettings } from './storage/settings';\n\n// === Services ===\nexport { ammRouter } from './service/amm_router';\nexport { blockchainEventManager } from './service/blockchain_event_manager';\nexport { getChainAssets } from './service/assets_factory';\nexport { keplrSuggestChain } from './service/keplr';\n\n// === Query ===\nexport { getRestClient, createRestClient, getPageRequestWithLimit } from './query/client';\nexport { getAddressBalances, getLockedBalances } from './query/bank';\nexport { getBurnerParams, getBurnerParamsWithClient, getAllBurnedCoins, getNextBurning } from './query/burner';\nexport { getBlockDetailsByHeight, getBlockTimeByHeight, getBlockResults } from './query/block';\nexport { getHardcodedLockAddress, getBurnerModuleAddress, getRaffleModuleAddress, getModuleAddress } from './query/module';\nexport { getRaffles, getRaffleWinners, checkAddressWonRaffle } from './query/raffle';\nexport { getAllSupply, getAllSupplyMetadata } from './query/supply';\nexport {\n getEpochsInfo, getCurrentEpoch, getHourEpochInfo, getWeekEpochInfo,\n getCurrentWeekEpochEndTime, getPeriodicWeekEpochEndTime, getPeriodicEpochEndTime,\n getEpochDurationByIdentifier\n} from './query/epoch';\nexport { getFactoryDenomAdminAddress } from './query/factory';\nexport { getIBCTraces, getHashIBCTrace, counterpartyChainForChannel } from './query/ibc';\nexport { getLiquidityPools, getLiquidityPool } from './query/liquidity_pools';\nexport {\n getMarkets, getMarketBuyOrders, getMarketSellOrders, getMarketOrders,\n getMarketHistory, getAddressMarketOrders, getAddressFullMarketOrders, getMarketOrder\n} from './query/markets';\nexport { getBZEUSDPrice } from './query/prices';\nexport {\n getStakingRewards, getAddressPendingUnlock, getPendingUnlockParticipants,\n getStakingRewardParticipantByAddress, getAddressStakingRewards\n} from './query/rewards';\nexport {\n getAddressDelegations, getAddressNativeDelegatedBalance,\n getAddressUnbondingDelegations, getAddressUnbondingDelegationsSummary,\n getAddressRewards, getAddressNativeTotalRewards,\n getAnnualProvisions, getDistributionParams, getStakingParams, getStakingPool,\n getValidators, getDelegatorValidators, getDelegatorDelegations, getValidatorDelegatorRewards\n} from './query/staking';\nexport {\n getAllTickers, getMarketOrdersHistory, getAddressHistory,\n getTradingViewIntervals, getAddressSwapHistory\n} from './query/aggregator';\n\n// === Context ===\nexport { AssetsContext } from './contexts/assets_context';\nexport type { AssetsContextType } from './contexts/assets_context';\n\n// === Hooks ===\nexport { useAssetsContext, useAssets, useAsset, useAssetsManager, useIBCChains } from './hooks/useAssets';\nexport { useConnectionType } from './hooks/useConnectionType';\nexport { useSigningClient } from './hooks/useSigningClient';\nexport { useAssetPrice } from './hooks/usePrices';\nexport { useSettings } from './hooks/useSettings';\nexport { useBalances, useBalance } from './hooks/useBalances';\nexport type { AssetBalance } from './hooks/useBalances';\nexport { useEpochs, useEpochsManager } from './hooks/useEpochs';\nexport { useLiquidityPools, useAssetLiquidityPools, useLiquidityPool } from './hooks/useLiquidityPools';\nexport { useAssetsValue } from './hooks/useAssetsValue';\nexport { useFeeTokens } from './hooks/useFeeTokens';\nexport { useMarkets, useAssetMarkets, useMarket, useMarketsManager } from './hooks/useMarkets';\nexport { useToast } from './hooks/useToast';\nexport { useSDKTx, useBZETx, useIBCTx, TxStatus } from './hooks/useTx';\nexport type { TxOptions } from './hooks/useTx';\nexport { useValidatorLogos } from './hooks/useValidatorLogos';\n\n// === Components ===\nexport { Toaster } from './components/toaster';\nexport { HighlightText } from './components/highlight';\nexport { Sidebar } from './components/sidebar/sidebar';\nexport { SettingsSidebarContent } from './components/sidebar/settings-sidebar';\nexport { WalletSidebarContent } from './components/sidebar/wallet-sidebar';\nexport { SettingsToggle } from './components/settings-toggle';\nexport { TestnetBanner } from './components/testnet-banner';\n","\nimport { chains as testnetChains } from \"chain-registry/testnet\";\nimport {getAssetLists as ibcAssetsList} from \"@chain-registry/utils\";\nimport {BZE_TESTNET_2_SUGGEST_CHAIN, BZE_TESTNET_NETWORK} from \"./testnet\";\nimport {Chain} from \"@chain-registry/types\";\nimport {assetLists, chains, ibcData} from \"chain-registry\";\n\nexport const getChainId = (): string => {\n return process.env.NEXT_PUBLIC_CHAIN_ID || 'beezee-1'\n}\n\nexport const getChainName = (): string => {\n return process.env.NEXT_PUBLIC_CHAIN_NAME || 'beezee'\n}\n\nexport const isTestnetChain = (): boolean => {\n const isTestnet = process.env.NEXT_PUBLIC_CHAIN_IS_TESTNET\n return isTestnet === 'true' || isTestnet === '1'\n}\n\nexport const getChains = () => {\n let localChains = chains\n if (isTestnetChain()) {\n //@ts-expect-error - testnet chains are not in the chain-registry package\n localChains = [...testnetChains, BZE_TESTNET_2_SUGGEST_CHAIN]\n }\n\n return localChains\n}\n\nexport const getChainByChainId = (chainId: string) => {\n let localChains = chains\n if (isTestnetChain()) {\n //@ts-expect-error - testnet chains are not in the chain-registry package\n localChains = [...testnetChains, BZE_TESTNET_2_SUGGEST_CHAIN]\n }\n\n return localChains.find(c => c.chainId?.toLowerCase() === chainId.toLowerCase())\n}\n\nexport const getChainByName = (name: string) => {\n let localChains = chains\n if (isTestnetChain()) {\n //@ts-expect-error - testnet chains are not in the chain-registry package\n localChains = [...testnetChains, BZE_TESTNET_2_SUGGEST_CHAIN]\n }\n\n return localChains.find(c => c.chainName.toLowerCase() === name.toLowerCase())\n}\n\nexport const getWalletChainsNames = () => {\n const localChains = getChains()\n\n const envChainsNames = process.env.NEXT_PUBLIC_WALLET_CHAINS_NAMES\n if (!envChainsNames) {\n return localChains.filter(c => c.chainId === getChainId())\n }\n\n const split = envChainsNames.split(',')\n\n return appChainFirst(localChains.filter(c => split.includes(c.chainName)))\n}\n\nconst appChainFirst = (chains: Chain[]) => {\n return chains.sort((a, b) => a.chainId === getChainId() ? -1 : b.chainId === getChainId() ? 1 : 0)\n}\n\nexport const getAssetLists = () => {\n let localAssetLists = assetLists\n if (isTestnetChain()) {\n //@ts-expect-error - testnet asset lists are not in the chain-registry package\n localAssetLists = BZE_TESTNET_NETWORK.assets\n }\n\n return localAssetLists\n}\n\nexport const getIBCAssetList = () => {\n const all = ibcAssetsList(getChainName(), ibcData, getAssetLists())\n\n return all.length > 0 ? all[0].assets : []\n}\n\nexport const getChainAddressPrefix = () => {\n return process.env.NEXT_PUBLIC_CHAIN_ADDRESS_PREFIX || 'bze'\n}\n\nexport const getChainExplorerURL = (chainName: string): string => {\n if (process.env.NEXT_PUBLIC_EXPLORER_URL) {\n return `${process.env.NEXT_PUBLIC_EXPLORER_URL}/${chainName}`\n }\n\n return `https://explorer.chaintools.tech/${chainName}`\n}\n\nexport const getLockerAddress = (): string => {\n return process.env.NEXT_PUBLIC_LOCKER_ADDRESS || 'bze1pc5zjcvhx3e8l305zjl72grytfa30r5mdypmw4'\n}\n\nexport const getGasMultiplier = (): number => {\n const val = parseFloat(process.env.NEXT_PUBLIC_GAS_MULTIPLIER || '');\n return isNaN(val) || val <= 0 ? 1.5 : val;\n}\n","\nexport const ASSET_TYPE_FACTORY = \"Factory\"\nexport const ASSET_TYPE_IBC = \"IBC\"\nexport const ASSET_TYPE_NATIVE = \"Native\"\nexport const ASSET_TYPE_LP = \"LP\"\n\nexport const VERIFIED_ASSETS: { [key: string]: boolean } = {\n \"factory/testbz1w9vva0muctcrmd9xgret9x4wasw2rrflsdkwfs/faneatiku2\": true,\n \"factory/testbz1z3mkcr2jz424w6m49frgjmy9uhlrx69p4cvrgf/vidulum\": true,\n \"factory/testbz1z3mkcr2jz424w6m49frgjmy9uhlrx69p4cvrgf/bitcoinz\": true,\n \"ubze\": true,\n \"utbz\": true,\n \"factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl\": true,\n \"factory/bze15pqjgk4la0mfphwddce00d05n3th3u66n3ptcv/2MARS\": true,\n \"factory/bze12gyp30f29zg26nuqrwdhl26ej4q066pt572fhm/GGE\": true,\n}\n\nexport const EXCLUDED_ASSETS: { [key: string]: boolean } = {\n \"factory/testbz1w9vva0muctcrmd9xgret9x4wasw2rrflsdkwfs/faneatiku1\": false,\n \"factory/bze1972aqfzdg29ugjln74edx0xvcg4ehvysjptk77/1000000000\": true,\n \"ibc/689DD6F80E4DBCE14877462B182504037FAEAD0699D5804A7F5CB328D33ED24B\": true,\n \"factory/bze1f0qgels0eu96ev6a67znu70q7rquy9eragn8nw/ucorey\": true,\n}\n\nexport const STABLE_COINS: { [key: string]: boolean } = {\n \"factory/testbz1z3mkcr2jz424w6m49frgjmy9uhlrx69p4cvrgf/uusdt\": true,\n \"factory/bze1z3mkcr2jz424w6m49frgjmy9uhlrx69phqwg3l/testusd\": true,\n \"ibc/6490A7EAB61059BFC1CDDEB05917DD70BDF3A611654162A1A47DB930D40D8AF4\": true,\n}\n\nexport const getChainNativeAssetDenom = (): string => {\n return process.env.NEXT_PUBLIC_CHAIN_NATIVE_ASSET_DENOM || 'ubze'\n}\n\nexport const getUSDCDenom = (): string => {\n return process.env.NEXT_PUBLIC_USDC_IBC_DENOM || ''\n}\n","import {getChainNativeAssetDenom} from \"./assets\";\n\nexport const BZE_TESTNET_2_SUGGEST_CHAIN = {\n chainId: \"bzetestnet-3\",\n chainType: \"cosmos\",\n chainName: \"BeeZee Testnet 3\",\n prettyName: 'BeeZee Testnet 3',\n networkType: 'mainnet',\n bech32Prefix: \"bze\",\n status: \"live\",\n slip44: 118,\n logoURIs: {\n svg: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/beezee/images/bze.svg',\n },\n fees: {\n feeTokens: [\n {\n denom: getChainNativeAssetDenom(),\n fixedMinGasPrice: 0.01,\n lowGasPrice: 0.01,\n averageGasPrice: 0.025,\n highGasPrice: 0.04\n }\n ]\n },\n keyAlgos: [\n \"secp256k1\"\n ],\n staking: {\n stakingTokens: [\n {\n denom: getChainNativeAssetDenom()\n }\n ]\n },\n explorers: [\n {\n \"kind\": \"ping.pub\",\n \"url\": \"https://testnet.explorer.thesilverfox.pro/beezee\",\n \"tx_page\": \"https://testnet.explorer.thesilverfox.pro/beezee/tx/${txHash}\"\n }\n ],\n codebase: {\n \"git_repo\": \"https://github.com/bze-alphateam/bze\",\n \"recommended_version\": \"v5.1.2\",\n \"compatible_versions\": [\n \"v5.1.2\"\n ],\n \"binaries\": {\n \"darwin/amd64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-darwin-amd64.tar.gz\",\n \"darwin/arm64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-darwin-arm64.tar.gz\",\n \"linux/amd64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-linux-amd64.tar.gz\",\n \"linux/arm64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-linux-arm64.tar.gz\",\n \"windows/amd64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-win64.zip\"\n },\n \"genesis\": {\n \"genesis_url\": \"https://raw.githubusercontent.com/bze-alphateam/bze/main/genesis.json\"\n }\n },\n apis: {\n \"rpc\": [\n {\n \"address\": \"https://testnet-rpc.getbze.com\",\n \"provider\": \"AlphaTeam\"\n }\n ],\n \"rest\": [\n {\n \"address\": \"https://testnet.getbze.com\",\n \"provider\": \"AlphaTeam\"\n },\n ],\n \"grpc\": [\n {\n \"address\": \"grpc.getbze.com:9999\",\n \"provider\": \"AlphaTeam\"\n }\n ]\n }\n};\n\nexport const BZE_TESTNET_NETWORK = {\n base: {\n explorerBaseUrl: 'https://explorer.getbze.com/bze%20testnet',\n rpcUrl: 'https://testnet-rpc.getbze.com',\n restUrl: 'https://testnet.getbze.com',\n chainName: BZE_TESTNET_2_SUGGEST_CHAIN.chainName,\n },\n chain: [BZE_TESTNET_2_SUGGEST_CHAIN],\n assets: [\n {\n chainName: BZE_TESTNET_2_SUGGEST_CHAIN.chainName,\n assets: [\n {\n \"description\": \"BeeZee native blockchain\",\n \"typeAsset\": \"sdk.coin\",\n \"denomUnits\": [\n {\n \"denom\": getChainNativeAssetDenom(),\n \"exponent\": 0\n },\n {\n \"denom\": \"TBZE\",\n \"exponent\": 6\n }\n ],\n \"base\": getChainNativeAssetDenom(),\n \"name\": \"BeeZee\",\n \"display\": \"TBZE\",\n \"symbol\": \"TBZE\",\n \"logoURIs\": {\n \"svg\": \"https://raw.githubusercontent.com/cosmos/chain-registry/master/beezee/images/bze.svg\",\n \"png\": \"https://raw.githubusercontent.com/cosmos/chain-registry/master/beezee/images/bze.png\"\n },\n \"coingeckoId\": \"bzedge\"\n },\n {\n \"description\": \"Lumen\",\n \"typeAsset\": \"sdk.coin\",\n \"denomUnits\": [\n {\n \"denom\": \"ibc/9DA252F9F9C86132CC282EA431DFB7DE7729501F6DC9A3E0F50EC8C6EE380CC7\",\n \"exponent\": 0,\n \"aliases\": []\n },\n {\n \"denom\": \"LMN\",\n \"exponent\": 6,\n \"aliases\": []\n },\n ],\n \"base\": \"ibc/9DA252F9F9C86132CC282EA431DFB7DE7729501F6DC9A3E0F50EC8C6EE380CC7\",\n \"display\": \"LMN\",\n \"name\": \"Lumen\",\n \"symbol\": \"LMN\",\n \"logoURIs\": {\n \"png\": \"https://raw.githubusercontent.com/cosmos/chain-registry/master/lumen/images/lmn.png\"\n }\n },\n {\n \"description\": \"Vidulum app token\",\n \"typeAsset\": \"sdk.coin\",\n \"denomUnits\": [\n {\n \"denom\": \"factory/bze1z3mkcr2jz424w6m49frgjmy9uhlrx69phqwg3l/vidulum\",\n \"exponent\": 0,\n \"aliases\": []\n },\n {\n \"denom\": \"VDL\",\n \"exponent\": 6,\n \"aliases\": []\n },\n ],\n \"base\": \"factory/bze1z3mkcr2jz424w6m49frgjmy9uhlrx69phqwg3l/vidulum\",\n \"display\": \"VDL\",\n \"name\": \"Vidulum\",\n \"symbol\": \"VDL\",\n \"logoURIs\": {\n \"png\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl.png\"\n }\n },\n ]\n }\n ]\n}\n","'use client';\n\nimport {getChainId} from \"../constants/chain\";\n\nexport const TTL_NO_EXPIRY = 0;\n\n// Configurable storage key prefix - apps set this via setStorageKeyVersion()\nlet _storageKeyVersion = '1';\n\nexport const setStorageKeyVersion = (version: string) => {\n _storageKeyVersion = version;\n}\n\nexport const getFromLocalStorage = (key: string): string | null => {\n if (typeof window === 'undefined') return null;\n\n try {\n const cachedItem = localStorage.getItem(prefixedKey(key));\n if (cachedItem) {\n const item = JSON.parse(cachedItem);\n const now = new Date().getTime();\n if (item.expiry === TTL_NO_EXPIRY || now < item.expiry) {\n return item.data;\n }\n\n localStorage.removeItem(prefixedKey(key));\n }\n } catch (error) {\n console.error('Failed to get data from localStorage:', error);\n }\n\n return null;\n}\n\nexport const setInLocalStorage = (key: string, data: string, ttl: number): boolean => {\n if (typeof window === 'undefined') return false;\n\n try {\n if (ttl < 0) ttl = 0\n\n const item = {\n data: data,\n expiry: TTL_NO_EXPIRY\n };\n\n if (ttl > 0) {\n const now = new Date().getTime();\n item.expiry = now + (ttl * 1000)\n }\n\n localStorage.setItem(prefixedKey(key), JSON.stringify(item));\n\n return true;\n } catch (error) {\n console.error('Failed to set data in localStorage:', error);\n }\n\n return false;\n}\n\nexport const removeFromLocalStorage = (key: string): void => {\n if (typeof window === 'undefined') return;\n try {\n localStorage.removeItem(prefixedKey(key));\n } catch (error) {\n console.error('Failed to remove data from localStorage:', error);\n }\n}\n\nexport const getKeyExpiry = (key: string): Date | null => {\n if (typeof window === 'undefined') return null;\n\n try {\n const cachedItem = localStorage.getItem(prefixedKey(key));\n if (cachedItem) {\n const item = JSON.parse(cachedItem);\n if (item.expiry > TTL_NO_EXPIRY) {\n return new Date(item.expiry);\n }\n }\n } catch (error) {\n console.error('Failed to get data from localStorage:', error);\n }\n\n return null;\n}\n\nexport const setKeyExpiry = (key: string, expiry: Date): boolean => {\n if (typeof window === 'undefined') return false;\n\n try {\n const cachedItem = localStorage.getItem(prefixedKey(key));\n if (cachedItem) {\n const item = JSON.parse(cachedItem);\n if (item) {\n item.expiry = expiry.getTime();\n localStorage.setItem(prefixedKey(key), JSON.stringify(item));\n\n return true;\n }\n }\n } catch (error) {\n console.error('Failed to set data in localStorage:', error);\n }\n\n return false;\n}\n\n\nconst prefixedKey = (key: string): string => {\n return `${_storageKeyVersion}-${getChainId()}:${key}`;\n}\n","\nexport const TOKEN_LOGO_PLACEHOLDER = '/images/token.svg';\nexport const BZE_CIRCLE_LOGO = '/images/bze_alternative_512x512.png';\n\n// Apps should override this with their own memo via setDefaultTxMemo()\nlet _defaultTxMemo = 'getbze.com';\n\nexport const DEFAULT_TX_MEMO = _defaultTxMemo;\n\nexport const setDefaultTxMemo = (memo: string) => {\n _defaultTxMemo = memo;\n}\n\nexport const getDefaultTxMemo = (): string => {\n return _defaultTxMemo;\n}\n","\nexport const LP_ASSETS_DECIMALS = 12\n\nexport interface Asset {\n type: string; //ibc, factory or native\n denom: string; //base denom (blockchain denom)\n decimals: number; //exponent\n name: string;\n ticker: string;\n logo: string; //logo or placeholder\n stable: boolean; //is stablecoin\n verified: boolean; //is verified\n supply: bigint; //total supply on BZE chain\n IBCData?: IBCData;\n}\n\nexport interface IBCData {\n chain: IBCChainData;\n counterparty: IBCCounterparty;\n}\n\nexport interface IBCCounterparty {\n chainName: string;\n chainPrettyName: string;\n channelId: string;\n baseDenom: string;\n}\n\ninterface IBCChainData {\n channelId: string;\n}\n\n// we created a custom interface that we can use to mock the traces of type IbcTransition\n// this is needed because the IbcTransition type from chain-registry/utils is not actually what we get from the chain-registry\n// the IbcTransition type has fields camelCase while the chain-registry returns fields with snake_case\nexport interface IbcTransitionMock {\n type: \"ibc\";\n counterparty: {\n chain_name: string;\n base_denom: string;\n channel_id: string;\n };\n chain: {\n channel_id: string;\n path?: string;\n };\n}\n\nexport interface ChainAssets {\n assets: Map<string, Asset>;\n ibcData: Map<string, IBCData>;\n}\n","import {AggregatedOrderSDKType, MarketSDKType} from \"@bze/bzejs/bze/tradebin/store\";\n\nexport const ORDER_TYPE_BUY = 'buy';\nexport const ORDER_TYPE_SELL = 'sell';\n\nexport type Market = MarketSDKType\n\nexport interface MarketData {\n base: string;\n quote: string;\n market_id: string;\n last_price: number;\n base_volume: number;\n quote_volume: number;\n bid: number;\n ask: number;\n high: number;\n low: number;\n open_price: number;\n change: number;\n}\n\nexport interface ActiveOrders {\n buyOrders: AggregatedOrderSDKType[];\n sellOrders: AggregatedOrderSDKType[];\n}\n","// Validation result type\nexport interface ValidationResult {\n isValid: boolean\n error?: string\n}\n\n// BeeZee endpoint configuration\nexport interface BeeZeeEndpoints {\n restEndpoint: string\n rpcEndpoint: string\n}\n\n// Main application settings\nexport interface AppSettings {\n endpoints: BeeZeeEndpoints\n preferredFeeDenom?: string // User's preferred token for paying fees\n}\n\n// Validation results for both endpoints\nexport interface EndpointValidationResults {\n rest?: ValidationResult\n rpc?: ValidationResult\n}\n\nexport const CONNECTION_TYPE_WS = 2;\nexport const CONNECTION_TYPE_POLLING = 1;\nexport const CONNECTION_TYPE_NONE = 0;\n\nexport type ConnectionType = 0 | 1 | 2;\n","export interface Attribute {\n key: string;\n value: string;\n index: boolean;\n}\n\nexport interface TendermintEvent {\n type: string;\n attributes: Attribute[];\n}\n\nexport interface InternalEvent {\n marketId?: string;\n blockHeight?: number;\n}\n\nexport type EventCallback = (event?: InternalEvent) => void;\n\nexport const CURRENT_WALLET_BALANCE_EVENT = \"current_wallet_balance\";\nexport const ORDER_EXECUTED_EVENT = \"order_executed\";\nexport const ORDER_BOOK_CHANGED_EVENT = \"order_book_changed\";\nexport const SUPPLY_CHANGED_EVENT = \"supply_changed\";\nexport const SWAP_EXECUTED_EVENT = \"swap_executed\";\nexport const NEXT_BURN_CHANGED_EVENT = \"next_burn_changed\";\nexport const RAFFLE_CHANGED_EVENT = \"raffle_changed\";\nexport const LOCK_CHANGED_EVENT = \"lock_changed\";\nexport const EPOCH_START_EVENT = \"epoch_start\";\n","\"use client\";\n\nimport BigNumber from 'bignumber.js';\n\nconst MAX_PRICE_DECIMALS = 14;\n\nexport function toBigNumber(amount: string | number | BigNumber | bigint): BigNumber {\n if (amount instanceof BigNumber) {\n return amount;\n }\n\n return new BigNumber(amount);\n}\n\nexport function uAmountToAmount(amount: string | number | BigNumber | bigint | undefined, noOfDecimals: number): string {\n return uAmountToBigNumberAmount(amount, noOfDecimals).toString();\n}\n\nexport function uAmountToBigNumberAmount(amount: string | number | BigNumber | bigint | undefined, noOfDecimals: number): BigNumber {\n return toBigNumber(amount || 0)\n .shiftedBy((-1) * noOfDecimals)\n .decimalPlaces(noOfDecimals || 6)\n}\n\nexport function amountToBigNumberUAmount(amount: string | number | BigNumber | bigint, noOfDecimals: number): BigNumber {\n return toBigNumber(amount)\n .shiftedBy(noOfDecimals)\n .decimalPlaces(noOfDecimals || 6);\n}\n\nexport function amountToUAmount(amount: string | number | BigNumber | bigint, noOfDecimals: number): string {\n return amountToBigNumberUAmount(amount, noOfDecimals).toString();\n}\n\nexport function prettyAmount(amount: number | string | BigNumber | bigint): string {\n const num = toBigNumber(amount)\n if (num.isNaN()) {\n return \"0\";\n }\n\n if (num.lt(1) && num.gt(0)) {\n return num.toFixed(6);\n }\n\n return Intl.NumberFormat('en', {notation: 'standard'}).format(num.toNumber());\n}\n\nexport const priceToUPrice = (price: BigNumber, quoteExponent: number, baseExponent: number): string => {\n return priceToBigNumberUPrice(price, quoteExponent, baseExponent).toFixed(MAX_PRICE_DECIMALS).toString();\n}\n\nexport const priceToBigNumberUPrice = (price: BigNumber | number | string, quoteExponent: number, baseExponent: number): BigNumber => {\n price = toBigNumber(price);\n\n return price.multipliedBy(Math.pow(10, (quoteExponent - baseExponent)));\n}\n\nexport const uPriceToPrice = (price: BigNumber | string, quoteExponent: number, baseExponent: number): string => {\n return uPriceToBigNumberPrice(toBigNumber(price), quoteExponent, baseExponent).toString()\n}\n\nexport const uPriceToBigNumberPrice = (price: BigNumber|number|bigint|string, quoteExponent: number, baseExponent: number): BigNumber => {\n const converted = toBigNumber(price);\n\n return converted.multipliedBy(Math.pow(10, (baseExponent - quoteExponent)));\n}\n","import {fromBech32} from \"@interchainjs/encoding\";\nimport {AddressValidationResult} from \"../types/validation\";\nimport {getChainAddressPrefix} from \"../constants/chain\";\nimport {stringTruncateFromCenter} from \"./strings\";\n\nexport const truncateAddress = (address: string): string => {\n return stringTruncateFromCenter(address, 12);\n}\n\nexport const validateBech32Address = (address: string, prefix: string): AddressValidationResult => {\n const result = {\n isValid: false,\n message: \"\"\n }\n\n try {\n const { prefix: addressPrefix } = fromBech32(address);\n if (addressPrefix === prefix) {\n result.isValid = true;\n return result;\n }\n\n result.message = `This address is from another network (${addressPrefix}). Please use an address from the destination network (${prefix}).`\n } catch (e) {\n console.error(\"invalid address \", e);\n result.message = \"Invalid address\"\n }\n\n return result;\n}\n\nexport const validateBZEBech32Address = (address: string) => validateBech32Address(address, getChainAddressPrefix());\n","\nexport function stringTruncateFromCenter(str: string, maxLength: number) {\n const midChar = '\\u2026'; // character to insert into the center of the result\n\n if (str.length <= maxLength) return str;\n\n // length of beginning part\n const left = Math.ceil(maxLength / 2);\n\n // start index of ending part\n const right = str.length - Math.floor(maxLength / 2) + 1;\n\n return str.substring(0, left) + midChar + str.substring(right);\n}\n\nexport function removeLeadingZeros(str: string): string {\n return str.replace(/^0+/, '') || '0';\n}\n","//chart periods\nexport const CHART_4H = '4H';\nexport const CHART_1D = '1D';\nexport const CHART_7D = '7D';\nexport const CHART_30D = '30D';\nexport const CHART_1Y = '1Y';\n\nexport function getNoOfIntervalsNeeded(chart: string) {\n switch (chart) {\n case CHART_4H:\n return 12 * 4;\n case CHART_1D:\n return 4 * 24;\n case CHART_7D:\n return 24 * 7;\n case CHART_30D:\n return 6 * 30;\n case CHART_1Y:\n return 365;\n default:\n return 0;\n }\n}\n\nexport function getChartIntervalsLimit(chart: string) {\n switch (chart) {\n case CHART_4H:\n return (12 * 24) * 7;\n case CHART_1D:\n return (4 * 24) * 30;\n case CHART_7D:\n return 24 * 90;\n case CHART_30D:\n return 6 * 365;\n case CHART_1Y:\n return 365 * 3;\n default:\n return 12;\n }\n}\n\nexport function getChartMinutes(chart: string) {\n switch (chart) {\n case CHART_4H:\n return 5;\n case CHART_1D:\n return 15;\n case CHART_7D:\n return 60;\n case CHART_30D:\n return 240;\n case CHART_1Y:\n return 1440;\n default:\n return 5;\n }\n}\n","const debounces: Map<string, NodeJS.Timeout> = new Map();\n\nexport async function addMultipleDebounce(name: string, delay: number, callback: () => void, times: number): Promise<void> {\n for (let index = 1; index <= times; index++) {\n addDebounce(`${name}-${index}`, delay * index, callback);\n }\n}\n\nexport async function addDebounce(name: string, delay: number, callback: () => void): Promise<void> {\n cancelDebounce(name);\n const newTimer = setTimeout(() => {\n callback();\n }, delay);\n\n debounces.set(name, newTimer);\n}\n\nexport async function cancelDebounce(name: string): Promise<void> {\n const timer = debounces.get(name);\n if (timer) {\n clearTimeout(timer);\n debounces.delete(name);\n }\n}\n","import {stringTruncateFromCenter} from \"./strings\";\nimport {\n ASSET_TYPE_FACTORY,\n ASSET_TYPE_IBC,\n ASSET_TYPE_LP,\n ASSET_TYPE_NATIVE,\n getChainNativeAssetDenom\n} from \"../constants/assets\";\nimport {Asset} from \"../types/asset\";\n\nconst MAX_DENOM_LEN = 8;\n\nexport const isFactoryDenom = (denom: string) => denom.startsWith(\"factory/\");\nexport const isIbcDenom = (denom: string) => denom.startsWith(\"ibc/\");\nexport const isLpDenom = (denom: string) => denom.startsWith(\"ulp_\");\nexport const isNativeDenom = (denom: string) => getChainNativeAssetDenom() === denom;\n\nexport const getDenomType = (denom: string) => isFactoryDenom(denom) ? ASSET_TYPE_FACTORY : isIbcDenom(denom) ? ASSET_TYPE_IBC: isLpDenom(denom) ? ASSET_TYPE_LP : ASSET_TYPE_NATIVE;\n\nexport function truncateDenom(denom: string) {\n return stringTruncateFromCenter(denom, MAX_DENOM_LEN);\n}\n\nexport const isIbcAsset = (asset: Asset): boolean => asset.type === ASSET_TYPE_IBC;\n","import {Attribute, ORDER_BOOK_CHANGED_EVENT} from \"../types/events\";\n\nexport const getMarketOrderBookChangedEvent = (marketId: string) => getMarketEventKey(ORDER_BOOK_CHANGED_EVENT, marketId)\nexport const getMarketEventKey = (eventType: string, marketId: string) => `${eventType}:${marketId}`\n\nexport const mapEventAttributes = (attributes: Attribute[]): Record<string, string> => {\n return attributes.reduce((acc, attr) => ({ ...acc, [attr.key]: attr.value.replace('\\\"', '').replace('\\\"', '') }), {});\n}\n","import BigNumber from 'bignumber.js';\nimport {toBigNumber} from './amount';\n\nexport const formatUsdAmount = (priceNum: BigNumber): string => {\n const price = priceNum.toString();\n const decimalIndex = price.indexOf('.');\n\n if (decimalIndex === -1) {\n return price;\n }\n\n const decimalPart = price.substring(decimalIndex + 1);\n let significantDigitCount = 0;\n let decimalsFound = 0;\n\n for (let i = 0; i < decimalPart.length; i++) {\n const digit = decimalPart[i];\n decimalsFound++;\n\n if (digit !== '0' || significantDigitCount > 0) {\n significantDigitCount++;\n }\n\n if (significantDigitCount >= 6) {\n break;\n }\n }\n\n return priceNum.toFixed(decimalsFound).toString();\n}\n\nexport function shortNumberFormat(amount: BigNumber): string {\n if (amount.isNaN() || amount.isZero()) {\n return '0';\n }\n\n if (amount.lt(0.001)) {\n return '0';\n }\n\n const units = [\n { value: new BigNumber('1e15'), suffix: 'Q' },\n { value: new BigNumber('1e12'), suffix: 'T' },\n { value: new BigNumber('1e9'), suffix: 'B' },\n { value: new BigNumber('1e6'), suffix: 'M' },\n { value: new BigNumber('1e3'), suffix: 'K' },\n ];\n\n for (const unit of units) {\n if (amount.gte(unit.value)) {\n const formatted = amount.div(unit.value);\n const result = formatted.toFixed(3).replace(/\\.?0+$/, '');\n return `${result}${unit.suffix}`;\n }\n }\n\n return amount.toFixed(3).replace(/\\.?0+$/, '');\n}\n\nexport const intlDateFormat = new Intl.DateTimeFormat(\"en-US\", {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: false,\n});\n\nexport const formatDate = (date: Date): string => {\n return intlDateFormat.format(date);\n}\n\nexport const formatTimeRemaining = (targetDate: Date): string => {\n const now = new Date();\n const diff = targetDate.getTime() - now.getTime();\n\n if (diff <= 0) {\n return 'Now';\n }\n\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\n const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));\n\n const parts: string[] = [];\n if (days > 0) parts.push(`${days}d`);\n if (hours > 0) parts.push(`${hours}h`);\n if (minutes > 0) parts.push(`${minutes}m`);\n\n return parts.join(' ') || 'Now';\n}\n\nexport function formatTimeRemainingFromEpochs(endEpoch: bigint | number | BigNumber, currentEpoch?: bigint | number | BigNumber): string {\n let epochDiff: BigNumber;\n\n if (currentEpoch !== undefined) {\n // Two-arg form: (endEpoch, currentEpoch) — each epoch is 1 hour\n const endBN = toBigNumber(endEpoch);\n const currentBN = toBigNumber(currentEpoch);\n epochDiff = endBN.minus(currentBN);\n\n if (epochDiff.lte(0)) {\n return 'Ended';\n }\n\n const hoursRemaining = epochDiff.toNumber();\n const daysRemaining = Math.floor(hoursRemaining / 24);\n const hoursRemainder = hoursRemaining % 24;\n\n if (daysRemaining > 0) {\n return `${daysRemaining}d ${hoursRemainder}h`;\n }\n\n return `${hoursRemainder}h`;\n }\n\n // Single-arg form: epochs as minutes-based duration\n epochDiff = toBigNumber(endEpoch);\n if (epochDiff.lte(0)) {\n return 'Now';\n }\n\n const totalSeconds = epochDiff.multipliedBy(60).toNumber();\n const days = Math.floor(totalSeconds / (60 * 60 * 24));\n const hours = Math.floor((totalSeconds % (60 * 60 * 24)) / (60 * 60));\n const minutes = Math.floor((totalSeconds % (60 * 60)) / 60);\n\n const parts: string[] = [];\n if (days > 0) parts.push(`${days}d`);\n if (hours > 0) parts.push(`${hours}h`);\n if (minutes > 0) parts.push(`${minutes}m`);\n\n return parts.join(' ') || 'Now';\n}\n","\nexport async function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport const openExternalLink = (url: string) => {\n if (!window) return;\n window.open(url, '_blank', 'noopener,noreferrer')\n}\n","import {Coin} from \"@bze/bzejs/cosmos/base/v1beta1/coin\";\n\n/**\n * Creates a coin. Mirrors cosmjs `coin()` from @cosmjs/amino.\n */\nexport const coin = (amount: number | string, denom: string): Coin => {\n let outAmount: string;\n if (typeof amount === \"number\") {\n if (!Number.isInteger(amount) || amount < 0 || amount > Number.MAX_SAFE_INTEGER) {\n throw new Error(\"Given amount is not a safe integer. Consider using a string instead to overcome the limitations of JS numbers.\");\n }\n outAmount = String(amount);\n } else {\n if (!amount.match(/^[0-9]+$/)) {\n throw new Error(\"Invalid unsigned integer string format\");\n }\n outAmount = amount.replace(/^0*/, \"\") || \"0\";\n }\n return {amount: outAmount, denom};\n};\n\n/**\n * Creates a list of coins with one element. Mirrors cosmjs `coins()` from @cosmjs/amino.\n */\nexport const coins = (amount: number | string, denom: string): Coin[] => {\n return [coin(amount, denom)];\n};\n\n/**\n * Parses a coins string like \"819966000ucosm,700000000ustake\" into a Coin array.\n * Mirrors cosmjs `parseCoins()` from @cosmjs/amino.\n * Denom regex follows Cosmos SDK 0.53 (cosmos-sdk/types/coin.go).\n */\nexport const parseCoins = (input: string): Coin[] => {\n return input\n .replace(/\\s/g, \"\")\n .split(\",\")\n .filter(Boolean)\n .map((part) => {\n const match = part.match(/^([0-9]+)([a-zA-Z][a-zA-Z0-9/:._-]{2,127})$/);\n if (!match) throw new Error(\"Got an invalid coin string\");\n return {\n amount: match[1].replace(/^0+/, \"\") || \"0\",\n denom: match[2],\n };\n });\n};\n","import {IBCData} from \"../types/asset\";\nimport {DenomTrace} from \"../types/ibc\";\nimport BigNumber from \"bignumber.js\";\n\nexport const canDepositFromIBC = (ibcData: IBCData): boolean => {\n return ibcData.counterparty.baseDenom !== \"\" && ibcData.counterparty.channelId !== \"\" && ibcData.counterparty.chainName != \"\"\n}\n\nexport const canSendToIBC = (ibcData: IBCData): boolean => {\n return ibcData.chain.channelId !== \"\" && ibcData.counterparty.chainName != \"\"\n}\n\n/** Compute the denom on the first-hop (counterparty) chain, using only this trace. */\nexport async function denomOnFirstHopChainFromTrace(trace: DenomTrace): Promise<string | undefined> {\n try {\n if (!trace?.base_denom) return undefined;\n\n const parts = trace.path.split(\"/\").filter(Boolean);\n if (parts.length < 2) {\n return trace.base_denom || undefined;\n }\n\n const remaining = parts.slice(2);\n if (remaining.length === 0) {\n return trace.base_denom;\n }\n\n const remainingPath = remaining.join(\"/\");\n const full = `${remainingPath}/${trace.base_denom}`;\n\n const enc = new TextEncoder();\n const buf = enc.encode(full);\n const digest = await crypto.subtle.digest(\"SHA-256\", buf);\n\n const hashBytes = new Uint8Array(digest);\n let hex = \"\";\n for (let i = 0; i < hashBytes.length; i++) {\n const b = hashBytes[i].toString(16).padStart(2, \"0\");\n hex += b;\n }\n return `ibc/${hex.toUpperCase()}`;\n } catch (e) {\n console.error(\"[denomOnFirstHopChainFromTrace] error:\", e);\n return undefined;\n }\n}\n\nexport const getIbcTransferTimeout = (): BigNumber => {\n return new BigNumber(Date.now() + 600_000).multipliedBy(1_000_000)\n}\n","import {Balance} from \"../types/balance\";\nimport {Asset} from \"../types/asset\";\nimport {LiquidityPoolData, UserPoolData} from \"../types/liquidity_pool\";\nimport {toBigNumber} from \"./amount\";\nimport {LiquidityPoolSDKType} from \"@bze/bzejs/bze/tradebin/store\";\nimport BigNumber from \"bignumber.js\";\n\nexport const calculateUserPoolData = (\n balance: Balance | undefined,\n lpAsset: Asset | undefined,\n poolData: LiquidityPoolData | undefined\n): UserPoolData => {\n const zeroBN = toBigNumber(0)\n if (!balance || balance.amount.isZero()) {\n return { userLiquidityUsd: zeroBN, userSharesPercentage: 0 }\n }\n\n if (!lpAsset) {\n return { userLiquidityUsd: zeroBN, userSharesPercentage: 0 }\n }\n\n const userShares = toBigNumber(balance.amount)\n const totalShares = toBigNumber(lpAsset.supply)\n\n if (totalShares.isZero()) {\n return { userLiquidityUsd: zeroBN, userSharesPercentage: 0 }\n }\n\n const userSharesPercentage = userShares.dividedBy(totalShares).multipliedBy(100).toNumber()\n\n let userLiquidityUsd = zeroBN\n if (poolData && poolData.usdValue) {\n userLiquidityUsd = userShares.dividedBy(totalShares).multipliedBy(poolData.usdValue)\n }\n\n return { userLiquidityUsd, userSharesPercentage }\n}\n\nexport const calculatePoolOppositeAmount = (pool: LiquidityPoolSDKType, amount: string | BigNumber, isBase: boolean): BigNumber => {\n const amountBN = toBigNumber(amount);\n if (amountBN.isZero() || amountBN.isNaN()) {\n return toBigNumber(0);\n }\n\n const reserveBase = toBigNumber(pool.reserve_base);\n const reserveQuote = toBigNumber(pool.reserve_quote);\n\n if (reserveBase.isZero() || reserveQuote.isZero()) {\n return toBigNumber(0);\n }\n\n if (isBase) {\n return amountBN.multipliedBy(reserveQuote).dividedBy(reserveBase);\n } else {\n return amountBN.multipliedBy(reserveBase).dividedBy(reserveQuote);\n }\n}\n\nexport const calculatePoolPrice = (\n denom: string,\n pool: LiquidityPoolSDKType\n): BigNumber | null => {\n if (!pool || !denom) return null;\n\n const reserveBase = toBigNumber(pool.reserve_base);\n const reserveQuote = toBigNumber(pool.reserve_quote);\n\n if (reserveBase.lte(0) || reserveQuote.lte(0)) {\n return null;\n }\n\n if (denom === pool.base) {\n return reserveQuote.dividedBy(reserveBase);\n }\n\n if (denom === pool.quote) {\n return reserveBase.dividedBy(reserveQuote);\n }\n\n return null;\n}\n\nexport const createPoolId = (base: string, quote: string) => {\n if (base > quote) return (\n `${quote}_${base}`\n )\n\n return `${base}_${quote}`\n};\n\nexport const poolIdFromPoolDenom = (poolDenom: string) => poolDenom.replace(\"ulp_\", '');\n","import BigNumber from \"bignumber.js\";\nimport {toBigNumber} from \"./amount\";\n\nexport const createMarketId = (base: string, quote: string) => `${base}/${quote}`;\n\nexport const calculateTotalAmount = (price: string|BigNumber, amount: string|BigNumber, decimals: number): string => {\n const priceNum = toBigNumber(price);\n const amountNum = toBigNumber(amount);\n if (priceNum.isNaN() || amountNum.isNaN() || priceNum.isZero() || amountNum.isZero()) return '';\n\n const total = priceNum.multipliedBy(amountNum);\n\n return total.decimalPlaces(decimals).toString();\n}\n\nexport const calculatePricePerUnit = (amount: string|BigNumber, totalPrice: string|BigNumber, decimals: number): string => {\n const amountNum = toBigNumber(amount);\n const total = toBigNumber(totalPrice);\n if (amountNum.isNaN() || total.isNaN() || amountNum.isZero() || total.isZero()) return '';\n\n return total.dividedBy(amountNum).decimalPlaces(decimals).toString();\n}\n\nexport const calculateAmountFromPrice = (price: string|BigNumber, totalPrice: string|BigNumber, decimals: number): string => {\n const total = toBigNumber(totalPrice);\n const priceNum = toBigNumber(price);\n if (total.isNaN() || priceNum.isNaN() || total.isZero() || priceNum.isZero()) return '';\n\n return total.div(priceNum).decimalPlaces(decimals).toString();\n}\n\nexport const getMinAmount = (uPrice: string|BigNumber, noOfDecimals: number): BigNumber => {\n const uPriceDec = toBigNumber(uPrice);\n if (uPriceDec.lte(0)) {\n return new BigNumber(0);\n }\n\n const oneDec = new BigNumber(1);\n const amtDec = oneDec.dividedBy(uPriceDec).decimalPlaces(0, BigNumber.ROUND_CEIL).multipliedBy(2);\n\n return amtDec.shiftedBy((-1) * noOfDecimals).decimalPlaces(noOfDecimals || 6).multipliedBy(2);\n}\n","import {toBigNumber} from \"./amount\";\nimport BigNumber from \"bignumber.js\";\n\nexport const sanitizeNumberInput = (input: string) => {\n let sanitized = input.replace(/[^0-9.,]/g, '');\n sanitized = sanitized.replace(\",\", \".\");\n\n const parts = sanitized.split('.');\n if (parts.length > 2) {\n sanitized = parts[0] + '.' + parts.slice(1).join('');\n }\n\n return sanitized;\n}\n\nexport const sanitizeIntegerInput = (input: string): string => {\n if (input.length === 0) {\n return \"\";\n }\n\n const sanitized = input.replace(/[^0-9]/g, '');\n\n const parsed = parseInt(sanitized, 10);\n if (!parsed) {\n return \"1\";\n }\n\n return `${parsed}`;\n}\n\nexport const toPercentage = (dec: number|bigint|BigNumber|string) => toBigNumber(dec).multipliedBy(100).decimalPlaces(2).toString();\n","import BigNumber from \"bignumber.js\";\nimport {PoolSDKType} from \"@bze/bzejs/cosmos/staking/v1beta1/staking\";\nimport {StakingRewardParticipantSDKType, StakingRewardSDKType} from \"@bze/bzejs/bze/rewards/store\";\n\nconst DAY_TO_SECONDS = 24 * 60 * 60;\n\nexport const calcNativeStakingApr = (pool: PoolSDKType, communityTax: string, annualProvisions: BigNumber) => {\n const totalSupply = new BigNumber(pool?.bonded_tokens || 0).plus(\n pool?.not_bonded_tokens || 0\n );\n\n if (totalSupply.isZero() || annualProvisions.isZero()) {\n return \"0.00\";\n }\n\n const bondedTokens = new BigNumber(pool?.bonded_tokens || 0);\n\n if (bondedTokens.isZero()) {\n return \"0.00\";\n }\n\n const bondedTokensRatio = bondedTokens.div(totalSupply);\n const inflation = annualProvisions.div(totalSupply);\n const communityTaxRate = new BigNumber(communityTax || 0);\n\n const apr = inflation\n .multipliedBy(new BigNumber(1).minus(communityTaxRate))\n .div(bondedTokensRatio)\n .multipliedBy(100)\n .decimalPlaces(2, BigNumber.ROUND_DOWN);\n\n return apr.toString();\n};\n\nexport const parseUnbondingDays = (unbondingTime: string) => {\n const split = unbondingTime.split(\"s\");\n\n return new BigNumber(split[0] || 0)\n .div(DAY_TO_SECONDS)\n .decimalPlaces(0)\n .toString();\n};\n\nexport const calculateRewardsStakingApr = (dailyAmount: string | number | BigNumber, staked: string | number | BigNumber): BigNumber => {\n const stakedNum = new BigNumber(staked);\n let computedApr = new BigNumber(dailyAmount).dividedBy(stakedNum).multipliedBy(365).multipliedBy(100);\n\n if (computedApr.lt(1)) {\n computedApr = computedApr.decimalPlaces(6);\n } else {\n computedApr = computedApr.decimalPlaces(2);\n }\n\n return computedApr;\n}\n\nexport const calculateRewardsStakingPendingRewards = (stakingReward?: StakingRewardSDKType, userStake?: StakingRewardParticipantSDKType): BigNumber => {\n const distr = new BigNumber(stakingReward?.distributed_stake || 0);\n const joinedAt = new BigNumber(userStake?.joined_at || 0);\n if (distr.isEqualTo(joinedAt)) {\n return new BigNumber(0);\n }\n\n const deposited = new BigNumber(userStake?.amount || 0);\n\n return deposited.multipliedBy(distr.minus(joinedAt)).decimalPlaces(0);\n}\n","const errorsMap: { [key: string]: string } = {\n \"failed to execute message; message index: 0: amount is smaller than staking reward min stake\": \"Amount is smaller than minimum required stake\",\n \"the resulted amount is too low\": \"Swap minimum amount could not be met. Increase the slippage and try again.\",\n \"amount is too low to be traded\": \"Amount is too low to be traded\",\n \"can not buy more than 50 tickets\": \"You can only contribute up to 50 times per transaction.\",\n};\n\nexport const prettyError = (err: string|undefined): string|undefined => {\n if (!err) return undefined;\n\n if (errorsMap[err]) {\n return errorsMap[err];\n }\n\n for (const [key, value] of Object.entries(errorsMap)) {\n if (err.includes(key)) {\n return value;\n }\n }\n\n return err;\n}\n","import { AppSettings } from '../types/settings'\nimport {getChainNativeAssetDenom} from \"./assets\";\n\nexport const SETTINGS_STORAGE_KEY = 'bze_app_settings'\n\nexport const DEFAULT_SETTINGS: AppSettings = {\n endpoints: {\n restEndpoint: process.env.NEXT_PUBLIC_REST_ENDPOINT ?? '',\n rpcEndpoint: process.env.NEXT_PUBLIC_RPC_ENDPOINT ?? ''\n },\n preferredFeeDenom: getChainNativeAssetDenom()\n}\n\nexport const VALIDATION_ERRORS = {\n EMPTY_ENDPOINT: 'Endpoint cannot be empty',\n INVALID_URL: 'Invalid URL format',\n INVALID_REST_PROTOCOL: 'REST endpoint must use HTTP or HTTPS protocol',\n INVALID_RPC_PROTOCOL: 'RPC endpoint must use WS or WSS protocol for WebSocket connection',\n CORS_ERROR: 'Endpoint validation failed - unable to connect or CORS not enabled',\n WEBSOCKET_ERROR: 'WebSocket connection failed - unable to connect to RPC endpoint',\n NETWORK_ERROR: 'Network error - unable to validate endpoint'\n} as const\n\nexport const getAppName = () => process.env.NEXT_PUBLIC_APP_NAME ?? 'BZE'\n","import {DEFAULT_SETTINGS, SETTINGS_STORAGE_KEY} from \"../constants/settings\";\nimport {AppSettings} from \"../types/settings\";\nimport {getFromLocalStorage, setInLocalStorage, TTL_NO_EXPIRY} from \"./storage\";\n\nexport const getSettings = (): AppSettings => {\n const saved = getFromLocalStorage(SETTINGS_STORAGE_KEY)\n if (saved) {\n const parsed = JSON.parse(saved)\n return { ...DEFAULT_SETTINGS, ...parsed }\n }\n\n return DEFAULT_SETTINGS;\n}\n\nexport const setSettings = (newSettings: AppSettings): boolean => {\n return setInLocalStorage(SETTINGS_STORAGE_KEY, JSON.stringify(newSettings), TTL_NO_EXPIRY)\n}\n","import {getSettings} from \"../storage/settings\";\nimport {bze} from '@bze/bzejs';\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\n\nexport const getRestClient = () => {\n const settings = getSettings()\n\n return createRestClient(settings.endpoints.restEndpoint)\n}\n\nexport const createRestClient = async (endpoint: string): Promise<ReturnType<typeof bze.ClientFactory.createLCDClient>> => {\n return bze.ClientFactory.createLCDClient({restEndpoint: endpoint})\n}\n\nexport const getPageRequestWithLimit = (limit: number)=> {\n return PageRequest.fromPartial({\n limit: BigInt(limit)\n })\n}\n","import {ParamsSDKType as BurnerParams} from \"@bze/bzejs/bze/burner/params\";\nimport {getRestClient} from \"./client\";\nimport {QueryAllBurnedCoinsResponseSDKType} from \"@bze/bzejs/bze/burner/query\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {bze} from '@bze/bzejs'\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\nimport {getBurnerModuleAddress} from \"./module\";\nimport {NextBurn} from \"../types/burn\";\nimport {getAddressBalances} from \"./bank\";\nimport {getPeriodicWeekEpochEndTime} from \"./epoch\";\nimport {toBigNumber} from \"../utils/amount\";\n\nconst BURNED_KEY = 'burner:all_burned_coins';\nconst LOCAL_CACHE_TTL = 60 * 60 * 4; //4 hours\n\nconst {fromPartial: QueryAllBurnedCoinsRequestFromPartial} = bze.burner.QueryAllBurnedCoinsRequest;\n\nexport const getBurnerParams = async (): Promise<BurnerParams|undefined> => {\n try {\n const client = await getRestClient();\n\n return getBurnerParamsWithClient(client)\n } catch (error) {\n console.error('failed to get burner params: ', error);\n }\n\n return undefined\n}\n\nexport const getBurnerParamsWithClient = async (client: Awaited<ReturnType<typeof getRestClient>>): Promise<BurnerParams|undefined>=> {\n try {\n const response = await client.bze.burner.params();\n\n return response.params;\n } catch (error) {\n console.error('failed to get burner params: ', error);\n }\n\n return undefined;\n}\n\nexport async function getAllBurnedCoins(): Promise<QueryAllBurnedCoinsResponseSDKType> {\n try {\n const localData = getFromLocalStorage(BURNED_KEY);\n if (null !== localData) {\n const parsed = JSON.parse(localData);\n if (parsed) {\n return parsed;\n }\n }\n\n const client = await getRestClient();\n const response = await client.bze.burner.allBurnedCoins(\n QueryAllBurnedCoinsRequestFromPartial({\n pagination: PageRequest.fromPartial({reverse: true})\n })\n );\n setInLocalStorage(BURNED_KEY, JSON.stringify(response), LOCAL_CACHE_TTL);\n\n return response;\n } catch (e) {\n console.error(e);\n return {\n burnedCoins: [],\n };\n }\n}\n\nconst BURN_EPOCH_COUNT = 4;\n\nexport async function getNextBurning(): Promise<NextBurn | undefined> {\n const address = getBurnerModuleAddress()\n if (address === '') {\n return undefined;\n }\n\n const balances = await getAddressBalances(address);\n if (balances.length === 0) {\n return undefined;\n }\n\n const timeFromEpoch = await getBurningTimeFromEpoch();\n\n if (!timeFromEpoch) {\n return undefined;\n }\n\n return {\n coins: balances,\n date: timeFromEpoch,\n }\n}\n\nasync function getBurningTimeFromEpoch(): Promise<Date|undefined> {\n const params = await getBurnerParams();\n let defaultBurningMod = BURN_EPOCH_COUNT;\n if (params) {\n defaultBurningMod = toBigNumber(params.periodic_burning_weeks).toNumber();\n }\n\n return await getPeriodicWeekEpochEndTime(defaultBurningMod);\n}\n","\nexport function getRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL || '';\n}\n\nexport function getRpcURL(): string {\n return process.env.NEXT_PUBLIC_RPC_URL || '';\n}\n\nexport function getArchwayRpcURL(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_ARCHWAY || '';\n}\n\nexport function getOsmosisRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_OSMOSIS || '';\n}\n\nexport function getNobleRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_NOBLE || '';\n}\n\nexport function getJackalRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_JACKAL || '';\n}\n\nexport function getOmniFlixRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_FLIX || '';\n}\n\nexport function getAtomOneRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_ATOMONE || '';\n}\n\nexport function getArchwayRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_ARCHWAY || '';\n}\n\nexport function getOsmosisRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_OSMOSIS || '';\n}\n\nexport function getNobleRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_NOBLE || '';\n}\n\nexport function getJackalRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_JACKAL || '';\n}\n\nexport function getOmniFlixRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_FLIX || '';\n}\n\nexport function getAtomOneRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_ATOMONE || '';\n}\n\nexport const getAggregatorHost = (): string => {\n return process.env.NEXT_PUBLIC_AGG_API_HOST ?? \"https://getbze.com\";\n}\n","import {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {getRestURL} from \"../constants/endpoints\";\n\nconst MODULE_ADDRESS_KEY = 'auth:module:address:';\nconst MODULE_ADDRESS_CACHE_TTL = 60 * 60 * 48; //48 hours\n\nfunction getHardcodedBurnerAddress(): string {\n return 'bze1v7uw4xhrcv0vk7qp8jf9lu3hm5d8uu5yjp5qun';\n}\n\nfunction getHardcodedRaffleAddress(): string {\n return 'bze18hsqalgwlzqavrrkfnxmrjmygwyjy8senx5tgs';\n}\n\nexport function getHardcodedLockAddress(): string {\n return 'bze1pc5zjcvhx3e8l305zjl72grytfa30r5mdypmw4';\n}\n\nexport function getBurnerModuleAddress(): string {\n return getHardcodedBurnerAddress();\n}\n\nexport function getRaffleModuleAddress(): string {\n return getHardcodedRaffleAddress()\n}\n\nexport async function getModuleAddress(module: string): Promise<string> {\n try {\n const cacheKey = `${MODULE_ADDRESS_KEY}${module}`;\n const localData = getFromLocalStorage(cacheKey);\n if (null !== localData) {\n return localData;\n }\n\n const url = getRestURL();\n const response = await fetch(`${url}/cosmos/auth/v1beta1/module_accounts/${module}`)\n if (!response.ok) {\n return '';\n }\n\n const parsed = await response.json()\n const addy = parsed.account.base_account?.address;\n if (addy === undefined) {\n return \"\";\n }\n\n setInLocalStorage(cacheKey, addy, MODULE_ADDRESS_CACHE_TTL);\n\n return addy;\n } catch (e) {\n console.error(e);\n\n return '';\n }\n}\n","import {getRestClient} from \"./client\";\nimport {Coin} from \"@bze/bzejs/cosmos/base/v1beta1/coin\";\nimport {getLockerAddress} from \"../constants/chain\";\n\nexport async function getAddressBalances(address: string): Promise<Coin[]> {\n try {\n const client = await getRestClient();\n const response = await client.cosmos.bank.v1beta1.spendableBalances({address: address});\n\n return response.balances;\n } catch (e) {\n console.error(\"failed to get balances\",e);\n\n return [];\n }\n}\n\nexport async function getLockedBalances(): Promise<Coin[]> {\n try {\n const lockerAddress = getLockerAddress();\n if (!lockerAddress) {\n console.warn(\"Locker address not configured\");\n return [];\n }\n\n return await getAddressBalances(lockerAddress);\n } catch (e) {\n console.error(\"failed to get locked balances\", e);\n return [];\n }\n}\n","import {QueryEpochsInfoResponseSDKType} from \"@bze/bzejs/bze/epochs/query\";\nimport {getRestClient} from \"./client\";\nimport {EpochInfoSDKType} from \"@bze/bzejs/bze/epochs/epoch\";\nimport {toBigNumber} from \"../utils/amount\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\n\nconst EPOCH_HOUR = \"hour\";\nconst EPOCH_DAY = \"day\";\nconst EPOCH_WEEK = \"week\";\nconst EPOCHS_INFO_CACHE_KEY = \"epochs:info\";\nconst EPOCHS_INFO_CACHE_TTL = 60 * 60;\n\nexport async function getEpochsInfo(): Promise<QueryEpochsInfoResponseSDKType> {\n try {\n const cachedData = getFromLocalStorage(EPOCHS_INFO_CACHE_KEY);\n let shouldFetchFromEndpoint = false;\n\n if (cachedData !== null) {\n const cached: QueryEpochsInfoResponseSDKType = JSON.parse(cachedData);\n\n const now = new Date().getTime();\n for (const epoch of cached.epochs) {\n if (epoch.current_epoch_start_time) {\n const startTime = new Date(epoch.current_epoch_start_time).getTime();\n const duration = getEpochDurationByIdentifier(epoch.identifier);\n const epochEndTime = startTime + duration - (15 * 1000);\n\n if (now >= epochEndTime) {\n shouldFetchFromEndpoint = true;\n break;\n }\n }\n }\n\n if (!shouldFetchFromEndpoint) {\n return cached;\n }\n }\n\n const client = await getRestClient();\n const response = await client.bze.epochs.epochInfos();\n setInLocalStorage(EPOCHS_INFO_CACHE_KEY, JSON.stringify(response), EPOCHS_INFO_CACHE_TTL);\n\n return response;\n } catch (e) {\n console.error(e);\n\n return {epochs: []};\n }\n}\n\nexport async function getCurrentEpoch(identifier: string): Promise<EpochInfoSDKType|undefined> {\n const all = await getEpochsInfo();\n\n return all.epochs.find((item: EpochInfoSDKType) => item.identifier === identifier);\n}\n\nexport async function getHourEpochInfo() {\n return getCurrentEpoch(EPOCH_HOUR);\n}\n\nexport async function getWeekEpochInfo() {\n return getCurrentEpoch(EPOCH_WEEK);\n}\n\nexport async function getCurrentWeekEpochEndTime(): Promise<Date|undefined> {\n return getPeriodicEpochEndTime(EPOCH_WEEK);\n}\n\nexport async function getPeriodicWeekEpochEndTime(modWeek: number = 1): Promise<Date|undefined> {\n return getPeriodicEpochEndTime(EPOCH_WEEK, modWeek);\n}\n\nexport async function getPeriodicEpochEndTime(identifier: string, mod: number = 1): Promise<Date|undefined> {\n const epoch = await getCurrentEpoch(identifier);\n if (!epoch || !epoch.current_epoch_start_time) {\n return undefined;\n }\n const current = toBigNumber(epoch.current_epoch);\n let remainingEpochs = mod - (current.toNumber() % mod);\n if (remainingEpochs === mod) {\n remainingEpochs = 0;\n }\n\n const startAt = (new Date(epoch.current_epoch_start_time));\n const duration = getEpochDurationByIdentifier(identifier);\n startAt.setTime(startAt.getTime() + duration + (duration * remainingEpochs));\n\n return startAt;\n}\n\nexport function getEpochDurationByIdentifier(identifier: string): number {\n const hourMs = 60 * 60 * 1000;\n switch (identifier) {\n case EPOCH_HOUR:\n return hourMs;\n case EPOCH_DAY:\n return hourMs * 24;\n case EPOCH_WEEK:\n return hourMs * 24 * 7;\n default:\n return hourMs;\n }\n}\n","import { ValidationResult } from '../types/settings'\nimport { VALIDATION_ERRORS } from '../constants/settings'\nimport {getBurnerParamsWithClient} from \"../query/burner\";\nimport {createRestClient} from \"../query/client\";\n\nfunction isValidUrl(urlString: string): boolean {\n try {\n const url = new URL(urlString)\n return url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'ws:' || url.protocol === 'wss:'\n } catch {\n return false\n }\n}\n\nexport async function validateRestEndpoint(endpoint: string): Promise<ValidationResult> {\n if (!endpoint.trim()) {\n return { isValid: false, error: VALIDATION_ERRORS.EMPTY_ENDPOINT }\n }\n\n if (!isValidUrl(endpoint)) {\n return { isValid: false, error: VALIDATION_ERRORS.INVALID_URL }\n }\n\n const url = new URL(endpoint)\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n return { isValid: false, error: VALIDATION_ERRORS.INVALID_REST_PROTOCOL }\n }\n\n try {\n const client = await createRestClient(endpoint)\n const params = await getBurnerParamsWithClient(client)\n if (params) {\n return { isValid: true }\n }\n\n return { isValid: false, error: VALIDATION_ERRORS.CORS_ERROR }\n } catch (error) {\n console.error(error)\n return { isValid: false, error: VALIDATION_ERRORS.NETWORK_ERROR }\n }\n}\n\nexport async function validateRpcEndpoint(endpoint: string): Promise<ValidationResult> {\n if (!endpoint.trim()) {\n return { isValid: false, error: VALIDATION_ERRORS.EMPTY_ENDPOINT }\n }\n\n if (!isValidUrl(endpoint)) {\n return { isValid: false, error: VALIDATION_ERRORS.INVALID_URL }\n }\n\n const wsEndpoint = convertToWebSocketUrl(endpoint);\n const url = new URL(wsEndpoint);\n\n if (url.protocol !== 'ws:' && url.protocol !== 'wss:') {\n return { isValid: false, error: VALIDATION_ERRORS.INVALID_RPC_PROTOCOL }\n }\n\n try {\n const isConnectable = await testWebSocketConnection(wsEndpoint);\n\n if (isConnectable) {\n return { isValid: true };\n } else {\n return { isValid: false, error: VALIDATION_ERRORS.WEBSOCKET_ERROR };\n }\n } catch (error) {\n console.error('WebSocket validation error:', error);\n return { isValid: false, error: VALIDATION_ERRORS.NETWORK_ERROR };\n }\n}\n\nfunction testWebSocketConnection(endpoint: string): Promise<boolean> {\n return new Promise((resolve) => {\n const ws = new WebSocket(`${endpoint}/websocket`);\n const timeout = setTimeout(() => {\n ws.close();\n resolve(false);\n }, 5000);\n\n ws.onopen = () => {\n clearTimeout(timeout);\n ws.close();\n resolve(true);\n };\n\n ws.onerror = () => {\n clearTimeout(timeout);\n resolve(false);\n };\n\n ws.onclose = (event) => {\n clearTimeout(timeout);\n if (event.wasClean) {\n resolve(true);\n }\n };\n });\n}\n\nexport async function validateEndpoints(restEndpoint: string, rpcEndpoint: string) {\n const [restResult, rpcResult] = await Promise.all([\n validateRestEndpoint(restEndpoint),\n validateRpcEndpoint(rpcEndpoint)\n ])\n\n return {\n rest: restResult,\n rpc: rpcResult,\n isValid: restResult.isValid && rpcResult.isValid\n }\n}\n\nexport function convertToWebSocketUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n\n if (parsedUrl.protocol === 'http:') {\n parsedUrl.protocol = 'ws:';\n } else if (parsedUrl.protocol === 'https:') {\n parsedUrl.protocol = 'wss:';\n }\n\n return parsedUrl.toString();\n } catch (error) {\n console.warn('Failed to parse URL for WebSocket conversion:', error);\n return url;\n }\n}\n","export const getValidatorSupportedDenoms = (): string[] => {\n const denoms = process.env.NEXT_PUBLIC_ATONE_VALIDATOR_SUPPORTED_DENOMS || '';\n return denoms.split(',').map(d => d.trim()).filter(d => d.length > 0);\n}\n\nexport const getValidatorPageUrl = (): string => {\n return process.env.NEXT_PUBLIC_ATONE_VALIDATOR_PAGE_URL || '';\n}\n\nexport const isPoolSupportedByValidator = (baseDenom: string, quoteDenom: string): boolean => {\n const supportedDenoms = getValidatorSupportedDenoms();\n return supportedDenoms.includes(baseDenom) || supportedDenoms.includes(quoteDenom);\n}\n","/**\n * Shared WebSocket singleton for CometBFT event subscriptions.\n *\n * One persistent connection is reused across all callers (useBlockchainListener,\n * etc.) so the app opens a single WebSocket to the RPC node instead of one\n * per hook instance.\n *\n * CometBFT sends subscription notifications by reusing the original request ID\n * (not the Ethereum-style params.subscription pattern), so we track active\n * subscriptions by their call ID and dispatch incoming messages accordingly.\n */\n\ntype EventSubscription = {\n query: string;\n handler: (result: unknown) => void;\n};\n\n// ── Singleton state ──────────────────────────────────────────────────────────\nlet socket: WebSocket | null = null;\nlet activeUrl: string = '';\nlet socketConnected = false;\nlet connectingPromise: Promise<void> | null = null;\nlet msgId = 0;\nlet reconnectAttempts = 0;\nlet reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n\nconst MAX_RECONNECT_ATTEMPTS = 10;\n\nconst activeSubscriptions = new Map<string, EventSubscription>();\n// ────────────────────────────────────────────────────────────────────────────\n\nconst handleMessage = (event: MessageEvent) => {\n try {\n const msg = JSON.parse(event.data as string);\n const id = String(msg?.id ?? '');\n\n // CometBFT subscription notification: same id as the subscribe call,\n // non-empty result object (the empty {} ack is ignored here).\n if (id && activeSubscriptions.has(id) && msg.result && Object.keys(msg.result).length > 0) {\n activeSubscriptions.get(id)!.handler(msg.result);\n }\n } catch {}\n};\n\nconst resubscribeAll = () => {\n for (const [id, sub] of activeSubscriptions) {\n socket!.send(JSON.stringify({\n jsonrpc: '2.0',\n method: 'subscribe',\n id,\n params: {query: sub.query},\n }));\n }\n};\n\nconst scheduleReconnect = () => {\n if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {\n console.error('[WS] Max reconnect attempts reached');\n return;\n }\n reconnectAttempts++;\n const delay = Math.min(1000 * Math.pow(2, reconnectAttempts - 1), 30_000);\n reconnectTimeout = setTimeout(async () => {\n try {\n await openSocket(activeUrl);\n resubscribeAll();\n reconnectAttempts = 0;\n } catch {\n scheduleReconnect();\n }\n }, delay);\n};\n\nconst openSocket = (url: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(url);\n\n ws.onopen = () => {\n socket = ws;\n socketConnected = true;\n resolve();\n };\n\n ws.onmessage = handleMessage;\n\n ws.onclose = () => {\n socketConnected = false;\n scheduleReconnect();\n };\n\n ws.onerror = (err) => {\n socketConnected = false;\n reject(err);\n };\n });\n};\n\nconst getOrCreateSocket = async (rpcEndpoint: string): Promise<void> => {\n const url = rpcEndpoint.replace(/\\/?$/, '') + '/websocket';\n if (socket && socketConnected && activeUrl === url) return;\n\n // If a connection attempt is already in flight for this URL, wait on it\n // instead of opening a second socket (concurrent callers race condition).\n if (connectingPromise && activeUrl === url) {\n return connectingPromise;\n }\n\n // Endpoint changed — tear down cleanly without triggering reconnect\n if (socket) {\n socket.onclose = null;\n socket.close(1000, 'Endpoint changed');\n socket = null;\n socketConnected = false;\n if (reconnectTimeout) {\n clearTimeout(reconnectTimeout);\n reconnectTimeout = null;\n }\n reconnectAttempts = 0;\n }\n\n activeUrl = url;\n connectingPromise = openSocket(url).finally(() => {\n connectingPromise = null;\n });\n return connectingPromise;\n};\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\n/**\n * Subscribes to CometBFT events using the shared WebSocket connection.\n * The handler receives `msg.result` for every notification:\n * result.data.value.result_finalize_block.events — NewBlock events\n * result.data.value.txs_results — block Tx results\n * result.data.value.TxResult.result.events — Tx subscription events\n *\n * Returns an unsubscribe function that cleans up the subscription.\n * Active subscriptions are automatically resubscribed after reconnection.\n */\nexport const subscribeToBlockchainEvents = async (\n rpcEndpoint: string,\n query: string,\n handler: (result: unknown) => void,\n): Promise<() => void> => {\n await getOrCreateSocket(rpcEndpoint);\n const id = String(++msgId);\n activeSubscriptions.set(id, {query, handler});\n socket!.send(JSON.stringify({jsonrpc: '2.0', method: 'subscribe', id, params: {query}}));\n\n return () => {\n activeSubscriptions.delete(id);\n if (socket?.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify({\n jsonrpc: '2.0',\n method: 'unsubscribe',\n id: String(++msgId),\n params: {query},\n }));\n }\n };\n};\n","export const EXCLUDED_MARKETS: { [key: string]: boolean } = {\n \"factory/bze1f0qgels0eu96ev6a67znu70q7rquy9eragn8nw/ucorey/factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl\": true,\n \"factory/bze1f0qgels0eu96ev6a67znu70q7rquy9eragn8nw/ucorey/ubze\": true,\n}\n","import type { IconType } from 'react-icons';\nimport { LuGlobe, LuCoins, LuChartColumn, LuFlame, LuFactory } from 'react-icons/lu';\n\nexport const ECOSYSTEM_MENU_LABEL = 'Other';\n\nexport interface EcosystemApp {\n name: string;\n href: string;\n disabled: boolean;\n icon: IconType;\n /** Unique key used for env var overrides and exclusions (e.g. 'website', 'staking', 'dex') */\n key: string;\n}\n\n/**\n * Default ecosystem apps. Each app has a unique `key` used for:\n * - Link overrides: NEXT_PUBLIC_ECOSYSTEM_LINK_{KEY} (e.g. NEXT_PUBLIC_ECOSYSTEM_LINK_WEBSITE=https://testnet.getbze.com)\n * - Label overrides: NEXT_PUBLIC_ECOSYSTEM_LABEL_{KEY} (e.g. NEXT_PUBLIC_ECOSYSTEM_LABEL_DEX=TestDEX)\n * - Exclusions: NEXT_PUBLIC_ECOSYSTEM_EXCLUDED=website,factory (comma-separated keys)\n */\nconst DEFAULT_APPS: Array<{ key: string; name: string; href: string; disabled: boolean; icon: IconType }> = [\n { key: 'website', name: 'Website', href: 'https://getbze.com', disabled: false, icon: LuGlobe },\n { key: 'staking', name: 'Staking', href: 'https://staking.getbze.com', disabled: false, icon: LuCoins },\n { key: 'dex', name: 'DEX', href: 'https://dex.getbze.com', disabled: false, icon: LuChartColumn },\n { key: 'burner', name: 'Burner', href: 'https://burner.getbze.com', disabled: false, icon: LuFlame },\n { key: 'factory', name: 'Factory', href: '#', disabled: true, icon: LuFactory },\n];\n\n/**\n * Reads the NEXT_PUBLIC_ECOSYSTEM_EXCLUDED env var and returns a Set of excluded keys.\n */\nconst getExcludedKeys = (): Set<string> => {\n const raw = process.env.NEXT_PUBLIC_ECOSYSTEM_EXCLUDED || '';\n if (!raw.trim()) {\n return new Set();\n }\n\n return new Set(raw.split(',').map(k => k.trim().toLowerCase()).filter(Boolean));\n};\n\n/**\n * Static env var lookups — Next.js only inlines process.env.NEXT_PUBLIC_*\n * when the full string is written statically. Dynamic access like\n * process.env[`NEXT_PUBLIC_ECOSYSTEM_LINK_${key}`] does NOT get replaced.\n */\nconst LINK_OVERRIDES: Record<string, string | undefined> = {\n website: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_WEBSITE,\n staking: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_STAKING,\n dex: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_DEX,\n burner: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_BURNER,\n factory: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_FACTORY,\n};\n\nconst LABEL_OVERRIDES: Record<string, string | undefined> = {\n website: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_WEBSITE,\n staking: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_STAKING,\n dex: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_DEX,\n burner: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_BURNER,\n factory: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_FACTORY,\n};\n\n/**\n * Returns the list of ecosystem apps with env var overrides applied and exclusions removed.\n *\n * Env vars:\n * - NEXT_PUBLIC_ECOSYSTEM_LINK_{KEY} — override the href for an app (key uppercased, e.g. NEXT_PUBLIC_ECOSYSTEM_LINK_WEBSITE)\n * - NEXT_PUBLIC_ECOSYSTEM_LABEL_{KEY} — override the label for an app (e.g. NEXT_PUBLIC_ECOSYSTEM_LABEL_DEX)\n * - NEXT_PUBLIC_ECOSYSTEM_EXCLUDED — comma-separated keys to exclude (e.g. \"staking,factory\")\n */\nexport const getEcosystemApps = (): EcosystemApp[] => {\n const excluded = getExcludedKeys();\n\n return DEFAULT_APPS\n .filter(app => !excluded.has(app.key))\n .map(app => {\n const linkOverride = LINK_OVERRIDES[app.key];\n const labelOverride = LABEL_OVERRIDES[app.key];\n\n return {\n key: app.key,\n name: labelOverride || app.name,\n href: linkOverride || app.href,\n disabled: linkOverride ? false : app.disabled,\n icon: app.icon,\n };\n });\n};\n","export const MAINNET_CHAIN_INFO_FALLBACK = {\n \"chainId\": \"beezee-1\",\n \"chainName\": \"BeeZee\",\n \"chainSymbolImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/chain.png\",\n \"rpc\": \"https://rpc.getbze.com\",\n \"rest\": \"https://rest.getbze.com\",\n \"nodeProvider\": {\n \"name\": \"BZE Alpha Team\",\n \"email\": \"alphateam@getbze.com\",\n \"website\": \"https://getbze.com\"\n },\n \"stakeCurrency\": {\n \"coinDenom\": \"BZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/chain.png\"\n },\n \"bip44\": {\n \"coinType\": 118\n },\n \"bech32Config\": {\n \"bech32PrefixAccAddr\": \"bze\",\n \"bech32PrefixAccPub\": \"bzepub\",\n \"bech32PrefixValAddr\": \"bzevaloper\",\n \"bech32PrefixValPub\": \"bzevaloperpub\",\n \"bech32PrefixConsAddr\": \"bzevalcons\",\n \"bech32PrefixConsPub\": \"bzevalconspub\"\n },\n \"currencies\": [\n {\n \"coinDenom\": \"BZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/chain.png\"\n },\n {\n \"coinDenom\": \"VDL\",\n \"coinMinimalDenom\": \"factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"vidulum\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl.png\"\n }\n ],\n \"feeCurrencies\": [{\n \"coinDenom\": \"BZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"gasPriceStep\": {\n \"low\": 0.001,\n \"average\": 0.01,\n \"high\": 0.1\n },\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/chain.png\"\n }],\n \"features\": []\n};\n\nexport const TESTNET_CHAIN_INFO_FALLBACK = {\n \"chainId\": \"bzetestnet-3\",\n \"chainName\": \"BeeZee Testnet 3\",\n \"chainSymbolImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/chain.png\",\n \"rpc\": \"https://testnet-rpc.getbze.com\",\n \"rest\": \"https://testnet.getbze.com\",\n \"nodeProvider\": {\n \"name\": \"BZE Alpha Team\",\n \"email\": \"alphateam@getbze.com\",\n \"website\": \"https://getbze.com\"\n },\n \"stakeCurrency\": {\n \"coinDenom\": \"TBZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/chain.png\"\n },\n \"bip44\": {\n \"coinType\": 118\n },\n \"bech32Config\": {\n \"bech32PrefixAccAddr\": \"bze\",\n \"bech32PrefixAccPub\": \"bzepub\",\n \"bech32PrefixValAddr\": \"bzevaloper\",\n \"bech32PrefixValPub\": \"bzevaloperpub\",\n \"bech32PrefixConsAddr\": \"bzevalcons\",\n \"bech32PrefixConsPub\": \"bzevalconspub\"\n },\n \"currencies\": [\n {\n \"coinDenom\": \"TBZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/chain.png\"\n },\n {\n \"coinDenom\": \"TVDL\",\n \"coinMinimalDenom\": \"factory/bze1z3mkcr2jz424w6m49frgjmy9uhlrx69phqwg3l/vidulum\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"vidulum\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/factory/testbz1z3mkcr2jz424w6m49frgjmy9uhlrx69p4cvrgf/vidulum.png\"\n }\n ],\n \"feeCurrencies\": [{\n \"coinDenom\": \"TBZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"gasPriceStep\": {\n \"low\": 0.001,\n \"average\": 0.01,\n \"high\": 0.1\n },\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/chain.png\"\n }],\n \"features\": []\n};\n","import BigNumber from \"bignumber.js\";\nimport { LiquidityPoolSDKType } from \"@bze/bzejs/bze/tradebin/store\";\nimport { toBigNumber } from \"../utils/amount\";\nimport {SwapRouteResult} from \"../types/liquidity_pool\";\n\ninterface RouteCache {\n result: SwapRouteResult;\n timestamp: number;\n}\n\nclass AmmRouter {\n private static instance: AmmRouter;\n private routeCache = new Map<string, RouteCache>();\n private routeMap: Map<string, Map<string, LiquidityPoolSDKType>> = new Map();\n\n private constructor() {}\n\n static getInstance(): AmmRouter {\n if (!AmmRouter.instance) {\n AmmRouter.instance = new AmmRouter();\n }\n return AmmRouter.instance;\n }\n\n updatePools(pools: LiquidityPoolSDKType[]): void {\n this.routeMap = this.mapLiquidityPoolRoutes(pools);\n this.clearCache();\n }\n\n private mapLiquidityPoolRoutes(\n pools: LiquidityPoolSDKType[]\n ): Map<string, Map<string, LiquidityPoolSDKType>> {\n const routeMap = new Map<string, Map<string, LiquidityPoolSDKType>>();\n\n for (const pool of pools) {\n if (!routeMap.has(pool.base)) {\n routeMap.set(pool.base, new Map());\n }\n routeMap.get(pool.base)!.set(pool.quote, pool);\n\n if (!routeMap.has(pool.quote)) {\n routeMap.set(pool.quote, new Map());\n }\n routeMap.get(pool.quote)!.set(pool.base, pool);\n }\n\n return routeMap;\n }\n\n findOptimalRoute(\n fromDenom: string,\n toDenom: string,\n amountIn: BigNumber,\n maxHops: number,\n useCache: boolean = true\n ): SwapRouteResult | null {\n const cacheKey = this.getCacheKey(fromDenom, toDenom, maxHops);\n\n if (useCache) {\n const cached = this.routeCache.get(cacheKey);\n if (cached) {\n return {\n ...cached.result,\n ...this.calculateRouteOutput(cached.result.pools, cached.result.path, amountIn)\n };\n }\n }\n\n const result = this.findOptimalSwapRoute(fromDenom, toDenom, amountIn, maxHops);\n\n if (result) {\n this.routeCache.set(cacheKey, {\n result,\n timestamp: Date.now()\n });\n }\n\n return result;\n }\n\n calculateRouteOutput(\n pools: LiquidityPoolSDKType[],\n path: string[],\n amountIn: BigNumber\n ): Omit<SwapRouteResult, 'route' | 'path' | 'pools'> {\n let currentAmount = amountIn;\n const fees: BigNumber[] = [];\n\n for (let i = 0; i < pools.length; i++) {\n const pool = pools[i];\n const currentDenom = path[i];\n const isBaseToQuote = pool.base === currentDenom;\n\n const { amountOut, fee } = this.calculateSwapOutput(pool, currentAmount, isBaseToQuote);\n fees.push(fee);\n currentAmount = amountOut;\n }\n\n const expectedOutput = currentAmount;\n\n const theoretical = this.calculateTheoreticalOutputs(pools, path, amountIn);\n\n const totalFees = theoretical.withoutFees.minus(theoretical.withFees);\n const priceImpact = theoretical.withFees.isZero()\n ? toBigNumber(0)\n : theoretical.withFees.minus(expectedOutput).dividedBy(theoretical.withFees).multipliedBy(100);\n\n return {\n expectedOutput,\n priceImpact,\n totalFees,\n feesPerHop: fees\n };\n }\n\n clearCache(filter?: (key: string, cache: RouteCache) => boolean): void {\n if (!filter) {\n this.routeCache.clear();\n return;\n }\n\n for (const [key, cache] of this.routeCache.entries()) {\n if (filter(key, cache)) {\n this.routeCache.delete(key);\n }\n }\n }\n\n getCacheStats() {\n return {\n size: this.routeCache.size,\n keys: Array.from(this.routeCache.keys())\n };\n }\n\n private calculateTheoreticalOutputs(\n pools: LiquidityPoolSDKType[],\n path: string[],\n amountIn: BigNumber\n ): { withoutFees: BigNumber; withFees: BigNumber } {\n let theoreticalOutputNoFees = amountIn;\n let theoreticalOutputWithFees = amountIn;\n\n for (let i = 0; i < pools.length; i++) {\n const pool = pools[i];\n const currentDenom = path[i];\n const isBaseToQuote = pool.base === currentDenom;\n\n const reserveIn = toBigNumber(isBaseToQuote ? pool.reserve_base : pool.reserve_quote);\n const reserveOut = toBigNumber(isBaseToQuote ? pool.reserve_quote : pool.reserve_base);\n const midPrice = reserveOut.dividedBy(reserveIn);\n\n theoreticalOutputNoFees = theoreticalOutputNoFees.multipliedBy(midPrice);\n\n const fee = toBigNumber(pool.fee);\n theoreticalOutputWithFees = theoreticalOutputWithFees\n .multipliedBy(toBigNumber(1).minus(fee))\n .multipliedBy(midPrice);\n }\n\n return {\n withoutFees: theoreticalOutputNoFees,\n withFees: theoreticalOutputWithFees\n };\n }\n\n private calculateSwapOutput(\n pool: LiquidityPoolSDKType,\n amountIn: BigNumber,\n isBaseToQuote: boolean\n ): { amountOut: BigNumber; fee: BigNumber } {\n const fee = toBigNumber(pool.fee);\n const reserveIn = toBigNumber(isBaseToQuote ? pool.reserve_base : pool.reserve_quote);\n const reserveOut = toBigNumber(isBaseToQuote ? pool.reserve_quote : pool.reserve_base);\n\n const feeAmount = amountIn.multipliedBy(fee);\n const amountInAfterFee = amountIn.minus(feeAmount);\n\n const amountOut = amountInAfterFee\n .multipliedBy(reserveOut)\n .dividedBy(reserveIn.plus(amountInAfterFee));\n\n return { amountOut, fee: feeAmount };\n }\n\n private findOptimalSwapRoute(\n fromDenom: string,\n toDenom: string,\n amountIn: BigNumber,\n maxHops: number\n ): SwapRouteResult | null {\n if (fromDenom === toDenom) {\n return null;\n }\n\n interface RouteNode {\n denom: string;\n amount: BigNumber;\n path: string[];\n poolIds: string[];\n pools: LiquidityPoolSDKType[];\n fees: BigNumber[];\n hops: number;\n }\n\n const queue: RouteNode[] = [{\n denom: fromDenom,\n amount: amountIn,\n path: [fromDenom],\n poolIds: [],\n pools: [],\n fees: [],\n hops: 0\n }];\n\n const bestAmounts = new Map<string, BigNumber>();\n bestAmounts.set(fromDenom, amountIn);\n\n let bestRoute: RouteNode | null = null;\n\n while (queue.length > 0) {\n queue.sort((a, b) => b.amount.comparedTo(a.amount) ?? 0);\n const current = queue.shift()!;\n\n if (current.denom === toDenom) {\n if (!bestRoute || current.amount.isGreaterThan(bestRoute.amount)) {\n bestRoute = current;\n }\n continue;\n }\n\n if (current.hops >= maxHops) {\n continue;\n }\n\n const neighbors = this.routeMap.get(current.denom);\n if (!neighbors) continue;\n\n for (const [nextDenom, pool] of neighbors.entries()) {\n if (current.path.includes(nextDenom)) {\n continue;\n }\n\n const isBaseToQuote = pool.base === current.denom;\n\n const { amountOut, fee } = this.calculateSwapOutput(pool, current.amount, isBaseToQuote);\n\n if (amountOut.lte(0)) {\n continue;\n }\n\n const previousBest = bestAmounts.get(nextDenom);\n if (previousBest && amountOut.lte(previousBest)) {\n continue;\n }\n\n bestAmounts.set(nextDenom, amountOut);\n\n queue.push({\n denom: nextDenom,\n amount: amountOut,\n path: [...current.path, nextDenom],\n poolIds: [...current.poolIds, pool.id],\n pools: [...current.pools, pool],\n fees: [...current.fees, fee],\n hops: current.hops + 1\n });\n }\n }\n\n if (!bestRoute) {\n return null;\n }\n\n const theoretical = this.calculateTheoreticalOutputs(bestRoute.pools, bestRoute.path, amountIn);\n\n const totalFees = theoretical.withoutFees.minus(theoretical.withFees);\n const priceImpact = theoretical.withFees.isZero()\n ? toBigNumber(0)\n : theoretical.withFees.minus(bestRoute.amount).dividedBy(theoretical.withFees).multipliedBy(100);\n\n return {\n route: bestRoute.poolIds,\n path: bestRoute.path,\n pools: bestRoute.pools,\n expectedOutput: bestRoute.amount,\n priceImpact,\n totalFees,\n feesPerHop: bestRoute.fees\n };\n }\n\n private getCacheKey(fromDenom: string, toDenom: string, maxHops: number): string {\n return `${fromDenom}_${toDenom}_${maxHops}`;\n }\n}\n\nexport const ammRouter = AmmRouter.getInstance();\n","import {EventCallback, InternalEvent} from \"../types/events\";\nimport {getMarketEventKey} from \"../utils/events\";\n\nclass BlockchainEventManager {\n private static instance: BlockchainEventManager;\n private listeners = new Map<string, Set<EventCallback>>();\n\n private constructor() {}\n\n static getInstance(): BlockchainEventManager {\n if (!BlockchainEventManager.instance) {\n BlockchainEventManager.instance = new BlockchainEventManager();\n }\n return BlockchainEventManager.instance;\n }\n\n subscribe(eventType: string, callback: EventCallback) {\n if (!this.listeners.has(eventType)) {\n this.listeners.set(eventType, new Set());\n }\n\n this.listeners.get(eventType)!.add(callback);\n\n return () => {\n const handlers = this.listeners.get(eventType);\n if (handlers) {\n handlers.delete(callback);\n if (handlers.size === 0) {\n this.listeners.delete(eventType);\n }\n }\n };\n }\n\n emit(eventType: string, event?: InternalEvent) {\n const generalListeners = this.listeners.get(eventType);\n if (generalListeners) {\n generalListeners.forEach(callback => callback(event));\n }\n\n if (!event) {\n return;\n }\n\n if (event.marketId) {\n const marketListeners = this.listeners.get(getMarketEventKey(eventType, event.marketId));\n if (marketListeners) {\n marketListeners.forEach(callback => callback(event));\n }\n }\n }\n}\n\nexport const blockchainEventManager = BlockchainEventManager.getInstance();\n","import {getPageRequestWithLimit, getRestClient} from \"./client\";\nimport {QueryDenomsMetadataRequest, QueryTotalSupplyRequest} from \"@bze/bzejs/cosmos/bank/v1beta1/query\";\n\nconst {fromPartial: TotalSupplyRequest} = QueryTotalSupplyRequest;\nconst {fromPartial: MetadataRequest} = QueryDenomsMetadataRequest;\n\nconst DEFAULT_LIMIT = 200;\n\nexport const getAllSupply = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.bank.v1beta1.totalSupply(TotalSupplyRequest(\n {pagination: getPageRequestWithLimit(DEFAULT_LIMIT)})\n );\n\n return resp.supply;\n } catch (error) {\n console.error('failed to get supply: ', error);\n }\n\n return undefined\n}\n\nexport const getAllSupplyMetadata = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.bank.v1beta1.denomsMetadata(MetadataRequest({\n pagination: getPageRequestWithLimit(DEFAULT_LIMIT)\n }))\n\n return resp.metadatas;\n } catch (error) {\n console.error('failed to get supply metadata: ', error);\n }\n\n return undefined\n}\n","import {getAllSupply, getAllSupplyMetadata} from \"../query/supply\";\nimport {MetadataSDKType} from \"@bze/bzejs/cosmos/bank/v1beta1/bank\";\nimport {Asset, ChainAssets, IBCData, IbcTransitionMock, LP_ASSETS_DECIMALS} from \"../types/asset\";\nimport {getDenomType, isFactoryDenom, isIbcDenom, isLpDenom, isNativeDenom, truncateDenom} from \"../utils/denom\";\nimport {BZE_CIRCLE_LOGO, TOKEN_LOGO_PLACEHOLDER} from \"../constants/placeholders\";\nimport {EXCLUDED_ASSETS, STABLE_COINS, VERIFIED_ASSETS} from \"../constants/assets\";\nimport {\n getAssetLists, getChainByChainId,\n getChainName,\n getChains,\n getIBCAssetList\n} from \"../constants/chain\";\nimport {getExponentByDenomFromAsset} from \"@chain-registry/utils\";\nimport {counterpartyChainForChannel, getHashIBCTrace} from \"../query/ibc\";\nimport {Asset as ChainRegistryAsset} from \"@chain-registry/types\";\nimport {denomOnFirstHopChainFromTrace} from \"../utils/ibc\";\n\nconst ORIGIN_CHAIN_PLACEHOLDER = \"Unknown chain\"\n\nconst getAssetLogo = (asset: ChainRegistryAsset): string => {\n return asset.logoURIs?.svg ?? asset.logoURIs?.png ?? asset.images?.[0]?.svg ?? asset.images?.[0]?.png ?? TOKEN_LOGO_PLACEHOLDER\n}\n\nexport const getChainAssets = async (): Promise<ChainAssets> => {\n const [metadata, supply] = await Promise.all([getAllMetadataMap(), getAllSupply()])\n const result = {\n assets: new Map<string, Asset>(),\n ibcData: new Map<string, IBCData>()\n }\n\n if (!metadata || !supply) {\n return result;\n }\n\n const filtered = supply.filter(asset => !EXCLUDED_ASSETS[asset.denom])\n const lpAssets = []\n for (const asset of filtered) {\n const baseAsset = createAsset(asset.denom, BigInt(asset.amount));\n if (isLpDenom(asset.denom)) {\n lpAssets.push(baseAsset)\n continue\n }\n let finalAsset = await populateAssetFromChainRegistry(baseAsset);\n\n if (!finalAsset) {\n const metadataEntry = metadata[asset.denom]\n finalAsset = populateAssetFromBlockchainMetadata(baseAsset, metadataEntry)\n }\n\n result.assets.set(finalAsset.denom, finalAsset)\n if (isIbcDenom(finalAsset.denom) && finalAsset.IBCData && finalAsset.IBCData.chain.channelId !== '') {\n result.ibcData.set(finalAsset.IBCData.chain.channelId, finalAsset.IBCData)\n }\n }\n\n for (const lpAsset of lpAssets) {\n const split = lpAsset.denom.split('_')\n if (split.length !== 3) {\n continue;\n }\n\n const baseAsset = result.assets.get(split[1])\n const quoteAsset = result.assets.get(split[2])\n if (!baseAsset || !quoteAsset) {\n result.assets.set(lpAsset.denom, lpAsset)\n continue;\n }\n\n lpAsset.name = `${baseAsset.ticker}/${quoteAsset.ticker} LP Shares`\n lpAsset.ticker = `${baseAsset.ticker}/${quoteAsset.ticker} LP`\n lpAsset.verified = true\n lpAsset.decimals = LP_ASSETS_DECIMALS\n\n result.assets.set(lpAsset.denom, lpAsset)\n }\n\n return result\n}\n\nconst populateIBCAsset = async (asset: Asset): Promise<Asset | undefined> => {\n const ibcList = getIBCAssetList()\n const ibcData = ibcList.find((item) => item.base === asset.denom)\n\n if (ibcData && ibcData.traces && ibcData.traces.length > 0) {\n const firstTrace = ibcData.traces.find((t) => t.type === \"ibc\") as unknown as IbcTransitionMock\n if (firstTrace) {\n const ibcAssetChain = getChains().find((c) => c.chainName === firstTrace.counterparty.chain_name)\n if (ibcAssetChain) {\n asset.name = ibcData.name\n asset.ticker = ibcData.symbol.toUpperCase()\n asset.decimals = getExponentByDenomFromAsset(ibcData, ibcData.display) ?? 0\n asset.logo = getAssetLogo(ibcData as unknown as ChainRegistryAsset)\n asset.verified = true\n asset.IBCData = {\n chain: {\n channelId: firstTrace.chain.channel_id\n },\n counterparty: {\n chainName: firstTrace.counterparty.chain_name,\n channelId: firstTrace.counterparty.channel_id,\n baseDenom: firstTrace.counterparty.base_denom,\n chainPrettyName: ibcAssetChain.prettyName ?? ibcAssetChain.chainName,\n }\n }\n\n return asset;\n }\n }\n }\n\n const ibcTrace = await getHashIBCTrace(asset.denom.replace('ibc/', ''))\n if (!ibcTrace) {\n return;\n }\n\n const splitPath = ibcTrace.path.split('/')\n if (splitPath.length < 2) {\n return\n }\n\n asset.IBCData = {\n chain: {\n channelId: splitPath[1]\n },\n counterparty: {\n chainName: \"\",\n channelId: \"\",\n baseDenom: \"\",\n chainPrettyName: ORIGIN_CHAIN_PLACEHOLDER,\n }\n }\n\n const denomOnCounterparty = await denomOnFirstHopChainFromTrace(ibcTrace)\n if (denomOnCounterparty) {\n asset.IBCData.counterparty.baseDenom = denomOnCounterparty\n }\n\n const counterPartyChain = await counterpartyChainForChannel(splitPath[1], splitPath[0])\n if (counterPartyChain) {\n asset.IBCData.counterparty.channelId = counterPartyChain.channelId\n const fullChain = getChainByChainId(counterPartyChain.chainId)\n if (fullChain) {\n asset.IBCData.counterparty.chainName = fullChain.chainName\n asset.IBCData.counterparty.chainPrettyName = fullChain.prettyName ?? fullChain.chainName\n }\n }\n\n const registryAssetChain = getAssetLists().find((item) => {\n const a = item.assets.find((i) => i.base === ibcTrace.base_denom)\n return !!a;\n })\n\n if (registryAssetChain) {\n const registryAsset = registryAssetChain.assets.find((i) => i.base === ibcTrace.base_denom) as ChainRegistryAsset\n asset.name = registryAsset.name\n asset.ticker = registryAsset.symbol.toUpperCase()\n asset.decimals = getExponentByDenomFromAsset(registryAsset, registryAsset.display) ?? 0\n asset.logo = getAssetLogo(registryAsset)\n asset.verified = true\n\n return asset;\n }\n\n const localAsset = await populateAssetFromBZEChainRegistryAssetList(asset)\n if (localAsset) {\n localAsset.verified = true\n return localAsset\n }\n\n if (!ibcTrace.base_denom.includes('/')) {\n let counterPartyDenom = ibcTrace.base_denom\n if (counterPartyDenom.length > 10) {\n counterPartyDenom = truncateDenom(counterPartyDenom)\n }\n asset.name = counterPartyDenom\n }\n\n asset.verified = false\n asset.decimals = 0\n\n return asset;\n}\n\nconst populateAssetFromChainRegistry = async (asset: Asset): Promise<Asset | undefined> => {\n if (isIbcDenom(asset.denom)) {\n return populateIBCAsset(asset)\n }\n\n if (isNativeDenom(asset.denom) || isFactoryDenom(asset.denom)) {\n return populateAssetFromBZEChainRegistryAssetList(asset)\n }\n\n return undefined\n}\n\nconst populateAssetFromBZEChainRegistryAssetList = async (asset: Asset): Promise<Asset | undefined> => {\n const data = getAssetLists().find((item) => item.chainName.toLowerCase() === getChainName().toLowerCase())\n if (!data) {\n return undefined;\n }\n\n const assetData = data.assets.find(item => item.base === asset.denom)\n if (!assetData) {\n return undefined;\n }\n\n asset.decimals = getExponentByDenomFromAsset(assetData, assetData.display) ?? 0\n asset.name = assetData.name\n asset.ticker = assetData.display.toUpperCase()\n asset.logo = isNativeDenom(asset.denom) ? BZE_CIRCLE_LOGO : getAssetLogo(assetData as unknown as ChainRegistryAsset)\n\n return asset\n}\n\nconst populateAssetFromBlockchainMetadata = (asset: Asset, meta: MetadataSDKType|undefined): Asset => {\n if (!meta || meta.base !== asset.denom) {\n return asset;\n }\n\n if (meta.name.length > 0) {\n asset.name = meta.name\n }\n if (meta.symbol.length > 0) {\n asset.ticker = meta.symbol.toUpperCase()\n }\n\n if (meta.denom_units.length === 0) {\n return asset;\n }\n\n meta.denom_units.map(unit => {\n if (unit.denom === meta.display) {\n asset.decimals = unit.exponent\n asset.ticker = unit.denom.toUpperCase()\n }\n })\n\n return asset;\n}\n\nconst createAsset = (denom: string, supply: bigint): Asset => {\n return {\n denom: denom,\n type: getDenomType(denom),\n name: truncateDenom(denom),\n ticker: truncateDenom(denom),\n decimals: 0,\n logo: TOKEN_LOGO_PLACEHOLDER,\n stable: STABLE_COINS[denom] ?? false,\n verified: VERIFIED_ASSETS[denom] ?? false,\n supply: supply,\n }\n}\n\nconst getAllMetadataMap = async () => {\n const allMetadata = await getAllSupplyMetadata()\n if (!allMetadata) {\n return {};\n }\n\n return allMetadata.reduce<Record<string, MetadataSDKType>>((acc, asset: MetadataSDKType) => {\n acc[asset.base] = asset;\n return acc;\n }, {});\n}\n","import {getSettings} from \"../storage/settings\";\nimport {CounterpartyChainForChannel, DenomTrace} from \"../types/ibc\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\n\nconst TRACES_CACHE_KEY = \"ibc:traces\";\nconst TRACES_CACHE_TTL = 5 * 60;\nconst HASH_TRACE_CACHE_TTL = 0;\nconst IBC_COUNTERPARTY_CACHE_TTL = 0;\nconst DEFAULT_LIMIT = 1000;\n\nconst getDenomTracesUrl = (limit: number): string => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/apps/transfer/v1/denom_traces?pagination.limit=${limit}`;\n}\n\nconst getHashDenomTracesUrl = (hash: string): string => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/apps/transfer/v1/denom_traces/${hash}`;\n}\n\nexport const getIBCTraces = async (): Promise<DenomTrace[]> => {\n const cached = getFromLocalStorage(TRACES_CACHE_KEY);\n if (cached) {\n return JSON.parse(cached);\n }\n\n try {\n const resp = await fetch(getDenomTracesUrl(DEFAULT_LIMIT));\n if (resp.status !== 200) {\n console.error(\"failed to fetch denom traces. status: \", resp.status);\n return [];\n }\n\n const responseJson = await resp.json();\n if (!responseJson.denom_traces) {\n return [];\n }\n\n setInLocalStorage(TRACES_CACHE_KEY, JSON.stringify(responseJson.denom_traces), TRACES_CACHE_TTL);\n\n return responseJson.denom_traces;\n } catch (e) {\n console.error(\"[IBC] failed to fetch denom traces\", e);\n return [];\n }\n}\n\nconst createHashTraceCacheKey = (hash: string): string => {\n return `${TRACES_CACHE_KEY}:${hash}`\n}\n\nexport const getHashIBCTrace = async (hash: string): Promise<DenomTrace|undefined> => {\n const cacheKey = createHashTraceCacheKey(hash);\n const cached = getFromLocalStorage(cacheKey);\n if (cached) {\n return JSON.parse(cached);\n }\n\n try {\n const resp = await fetch(getHashDenomTracesUrl(hash));\n if (resp.status !== 200) {\n console.error(\"failed to fetch hash denom trace. status: \", resp.status);\n return;\n }\n\n const responseJson = await resp.json();\n if (!responseJson.denom_trace) {\n return;\n }\n\n setInLocalStorage(cacheKey, JSON.stringify(responseJson.denom_trace), HASH_TRACE_CACHE_TTL);\n\n return responseJson.denom_trace;\n } catch (e) {\n console.error(\"[IBC] failed to fetch denom traces\", e);\n }\n\n return;\n}\n\nconst getChannelIdUrl = (channelId: string, portId: string) => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/core/channel/v1/channels/${channelId}/ports/${portId}`;\n}\n\nconst getConnectionIdUrl = (connectionId: string) => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/core/connection/v1/connections/${connectionId}`;\n}\n\nconst getClientStateUrl = (clientId: string) => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/core/client/v1/client_states/${clientId}`;\n}\n\nconst getIbcCounterpartyChainIdCacheKey = (channelId: string, portId: string) => {\n return `ibc:counterparty:${channelId}:${portId}`;\n}\n\nexport const counterpartyChainForChannel = async (channelId: string, portId: string = \"transfer\"): Promise<CounterpartyChainForChannel | undefined> => {\n const cacheKey = getIbcCounterpartyChainIdCacheKey(channelId, portId);\n const cached = getFromLocalStorage(cacheKey);\n if (cached) {\n return JSON.parse(cached) as CounterpartyChainForChannel;\n }\n\n const result: CounterpartyChainForChannel = {\n chainId: \"\",\n channelId: \"\",\n }\n\n try {\n const chRes = await fetch(getChannelIdUrl(channelId, portId));\n if (!chRes.ok) {\n console.error(`[counterpartyChainForChannel] channel fetch failed: ${chRes.status} ${chRes.statusText}`);\n return undefined;\n }\n\n const chJson = await chRes.json();\n const connectionId: string | undefined = chJson?.channel?.connection_hops?.[0];\n result.channelId = chJson?.channel?.counterparty?.channel_id;\n if (!connectionId || !result.channelId) {\n console.error(`[counterpartyChainForChannel] no connection_hops for ${channelId}/${portId}`);\n return undefined;\n }\n\n const connRes = await fetch(getConnectionIdUrl(connectionId));\n if (!connRes.ok) {\n console.error(`[counterpartyChainForChannel] connection fetch failed: ${connRes.status} ${connRes.statusText}`);\n return undefined;\n }\n const connJson = await connRes.json();\n const clientId: string | undefined = connJson?.connection?.client_id;\n if (!clientId) {\n console.error(`[counterpartyChainForChannel] no client_id on ${connectionId}`);\n return undefined;\n }\n\n const csRes = await fetch(getClientStateUrl(clientId));\n if (!csRes.ok) {\n console.error(`[counterpartyChainForChannel] client_state fetch failed: ${csRes.status} ${csRes.statusText}`);\n return undefined;\n }\n const csJson = await csRes.json();\n const clientState = csJson?.client_state?.value ?? csJson?.client_state;\n const chainId: string | undefined = clientState?.chain_id ?? clientState?.chainId;\n\n if (!chainId) {\n console.error(`[counterpartyChainForChannel] chain_id missing in client_state for ${clientId}`);\n return undefined;\n }\n\n result.chainId = chainId;\n\n setInLocalStorage(cacheKey, JSON.stringify(result), IBC_COUNTERPARTY_CACHE_TTL);\n\n return result;\n } catch (err) {\n console.error(\"[counterpartyChainForChannel] unexpected error:\", err);\n return undefined;\n }\n}\n","import {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {MAINNET_CHAIN_INFO_FALLBACK, TESTNET_CHAIN_INFO_FALLBACK} from \"../constants/keplr\";\n\nasync function getKeplrMainnetChainInfo() {\n const localKey = 'ci:keplr:mainnet';\n const cachedData = getFromLocalStorage(localKey);\n if (cachedData) {\n return JSON.parse(cachedData);\n }\n\n const url = 'https://raw.githubusercontent.com/faneaatiku/keplr-chain-registry/main/cosmos/beezee.json';\n try {\n const response = await fetch(url);\n if (!response.ok) {\n console.error(`HTTP error when fetching mainnet keplr data. status: ${response.status}`);\n return MAINNET_CHAIN_INFO_FALLBACK;\n }\n\n const json = await response.json();\n setInLocalStorage(localKey, JSON.stringify(json), 60 * 60 * 24);\n return json;\n } catch (error) {\n console.error(`Error fetching mainnet keplr data from ${url}:`, error);\n return MAINNET_CHAIN_INFO_FALLBACK;\n }\n}\n\nasync function getKeplrTestnetChainInfo() {\n const localKey = 'ci:keplr:testnet';\n const cachedData = getFromLocalStorage(localKey);\n if (cachedData) {\n return JSON.parse(cachedData);\n }\n\n const url = 'https://raw.githubusercontent.com/faneaatiku/keplr-chain-registry/refs/heads/patch-2/cosmos/bzetestnet.json';\n try {\n const response = await fetch(url);\n if (!response.ok) {\n console.error(`HTTP error when fetching testnet keplr data. status: ${response.status}`);\n return TESTNET_CHAIN_INFO_FALLBACK;\n }\n\n const json = await response.json();\n setInLocalStorage(localKey, JSON.stringify(json), 60 * 60 * 24);\n return json;\n } catch (error) {\n console.error(`Error fetching testnet keplr data from ${url}:`, error);\n return TESTNET_CHAIN_INFO_FALLBACK;\n }\n}\n\nasync function getKeplrChainInfo(chainId: string) {\n if (chainId !== 'beezee') {\n return getKeplrTestnetChainInfo();\n }\n\n return getKeplrMainnetChainInfo();\n}\n\nexport async function keplrSuggestChain(chainId: string) {\n return await window.keplr?.experimentalSuggestChain(await getKeplrChainInfo(chainId))\n}\n","import {GetBlockByHeightResponseSDKType} from \"@bze/bzejs/cosmos/base/tendermint/v1beta1/query\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {getRestClient} from \"./client\";\nimport BigNumber from \"bignumber.js\";\nimport {BlockResults} from \"../types/block\";\nimport {getSettings} from \"../storage/settings\";\n\ntype FailoverBlockTimes = {\n [key: string]: string;\n};\n\nconst FAILOVER_BLOCKTIMES: FailoverBlockTimes = {\n \"9334084\": \"2023-12-07T14:30:55.034845214Z\",\n \"4423602\": \"2023-01-18T07:51:31.391193017Z\",\n \"4827583\": \"2023-02-14T03:34:27.791387761Z\",\n \"5149043\": \"2023-03-07T11:41:10.455072975Z\",\n \"10855457\": \"2024-03-17T19:41:34.031980836Z\",\n};\n\nconst BLOCK_KEY = 'tendermint:block:';\n\nexport async function getBlockDetailsByHeight(height: BigNumber): Promise<GetBlockByHeightResponseSDKType> {\n try {\n const cacheKey = `${BLOCK_KEY}${height}`;\n const localData = getFromLocalStorage(cacheKey);\n if (null !== localData) {\n const parsed = JSON.parse(localData);\n if (parsed) {\n return parsed;\n }\n }\n\n const client = await getRestClient();\n const response = await client.cosmos.base.tendermint.v1beta1.getBlockByHeight({height: BigInt(height.toFixed(0))});\n\n setInLocalStorage(cacheKey, JSON.stringify(response), 0);\n\n return response;\n } catch (e) {\n console.error(e);\n return {};\n }\n}\n\nexport async function getBlockTimeByHeight(height: BigNumber): Promise<Date | undefined> {\n const details = await getBlockDetailsByHeight(height);\n if (details.block_id === undefined) {\n if (height.toFixed(0) in FAILOVER_BLOCKTIMES) {\n return new Date(FAILOVER_BLOCKTIMES[height.toFixed(0)]);\n }\n }\n\n return details.block?.header?.time\n}\n\nexport async function getBlockResults(height: number): Promise<BlockResults | undefined> {\n const settings = getSettings();\n const rpcUrl = settings.endpoints.rpcEndpoint.replace(\"wss\", \"https\");\n const url = `${rpcUrl}/block_results?height=${height}`;\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n console.log('not ok response from RPC: ', response);\n return undefined\n }\n\n return await response.json();\n } catch (error) {\n console.error(\"Failed to fetch block results:\", error);\n throw error;\n }\n}\n","import {RaffleSDKType, RaffleWinnerSDKType} from \"@bze/bzejs/bze/burner/raffle\";\nimport {getRestClient} from \"./client\";\nimport {getBlockResults} from \"./block\";\nimport {mapEventAttributes} from \"../utils/events\";\n\nexport async function getRaffles(): Promise<RaffleSDKType[]> {\n try {\n const client = await getRestClient();\n const response = await client.bze.burner.raffles();\n\n return response.list;\n } catch (e) {\n console.error(e);\n\n return [];\n }\n}\n\nexport async function getRaffleWinners(denom: string): Promise<RaffleWinnerSDKType[]> {\n try {\n const client = await getRestClient();\n const response = await client.bze.burner.raffleWinners({denom: denom});\n return response.list;\n } catch (e) {\n console.error(e);\n\n return [];\n }\n}\n\ninterface RaffleResult {\n hasWon: boolean;\n amount: string;\n denom: string;\n address: string;\n}\n\nexport async function checkAddressWonRaffle(address: string, denom: string, height: number): Promise<RaffleResult|undefined> {\n const response = {\n hasWon: false,\n amount: \"0\",\n denom: denom,\n address: address,\n };\n if (address == \"\" || height <= 0) {\n return undefined;\n }\n\n const blockResults = await getBlockResults(height);\n if (!blockResults) {\n return undefined;\n }\n\n if (!blockResults.result?.finalize_block_events) {\n return undefined;\n }\n\n if (blockResults.result.finalize_block_events.length === 0) {\n return undefined;\n }\n\n const raffleEvents = blockResults.result.finalize_block_events.filter(ev => ev.type.includes('Raffle'));\n if (!raffleEvents || raffleEvents.length === 0) {\n return undefined;\n }\n\n for (let i = 0; i < raffleEvents.length; i++) {\n const ev = raffleEvents[i];\n const converted = mapEventAttributes(ev.attributes)\n if ('participant' in converted && ev.type.includes('RaffleLostEvent') && converted['participant'] === address) {\n return response;\n }\n\n if ('winner' in converted && ev.type.includes('RaffleWinnerEvent') && converted['winner'] === address && converted['denom'] === denom) {\n response.hasWon = true;\n response.amount = converted['amount'];\n return response;\n }\n }\n\n return response;\n}\n","import {getRestClient} from \"./client\";\n\nexport async function getFactoryDenomAdminAddress(denom: string): Promise<string> {\n try {\n const client = await getRestClient();\n const res = await client.bze.tokenfactory.denomAuthority({denom: denom});\n\n return res.denomAuthority?.admin ?? ''\n } catch (e) {\n console.error(e);\n\n return '';\n }\n}\n","import {getPageRequestWithLimit, getRestClient} from \"./client\";\nimport {QueryAllLiquidityPoolsRequest, QueryLiquidityPoolRequest} from \"@bze/bzejs/bze/tradebin/query\";\n\nconst {fromPartial: AllLpsRequest} = QueryAllLiquidityPoolsRequest;\nconst {fromPartial: LpRequest} = QueryLiquidityPoolRequest;\n\nconst DEFAULT_LIMIT = 1000;\n\nexport const getLiquidityPools = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.bze.tradebin.allLiquidityPools(AllLpsRequest(\n {pagination: getPageRequestWithLimit(DEFAULT_LIMIT)})\n );\n\n return resp.list;\n } catch (error) {\n console.error('failed to get markets: ', error);\n }\n\n return []\n}\n\nexport const getLiquidityPool = async (poolId: string) => {\n try {\n const client = await getRestClient();\n const resp = await client.bze.tradebin.liquidityPool(LpRequest({\n poolId: poolId,\n }));\n\n return resp.pool;\n } catch (error) {\n console.error('failed to get markets: ', error);\n }\n\n return undefined\n}\n","import {getPageRequestWithLimit, getRestClient} from \"./client\";\nimport {\n QueryAllMarketsRequest,\n QueryMarketAggregatedOrdersRequest,\n QueryMarketAggregatedOrdersResponseSDKType,\n QueryMarketHistoryRequest,\n QueryMarketHistoryResponseSDKType,\n QueryMarketOrderRequest,\n QueryMarketOrderResponseSDKType,\n QueryUserMarketOrdersRequest,\n QueryUserMarketOrdersResponseSDKType,\n} from \"@bze/bzejs/bze/tradebin/query\";\nimport {ORDER_TYPE_BUY, ORDER_TYPE_SELL} from \"../types/market\";\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\nimport {OrderSDKType} from \"@bze/bzejs/bze/tradebin/store\";\n\nconst {fromPartial: AllMarketsRequest} = QueryAllMarketsRequest;\nconst {fromPartial: QueryMarketAggregatedOrdersRequestFromPartyal} = QueryMarketAggregatedOrdersRequest;\nconst {fromPartial: QueryMarketHistoryRequestFromPartial} = QueryMarketHistoryRequest;\nconst {fromPartial: QueryUserMarketOrdersRequestFromPartial} = QueryUserMarketOrdersRequest;\nconst {fromPartial: QueryMarketOrderRequestFromPartial} = QueryMarketOrderRequest;\n\nconst DEFAULT_LIMIT = 1000;\n\nexport const getMarkets = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.bze.tradebin.allMarkets(AllMarketsRequest(\n {pagination: getPageRequestWithLimit(DEFAULT_LIMIT)})\n );\n\n return resp.market;\n } catch (error) {\n console.error('failed to get markets: ', error);\n }\n\n return []\n}\n\nexport async function getMarketBuyOrders(marketId: string): Promise<QueryMarketAggregatedOrdersResponseSDKType> {\n return getMarketOrders(marketId, ORDER_TYPE_BUY);\n}\n\nexport async function getMarketSellOrders(marketId: string): Promise<QueryMarketAggregatedOrdersResponseSDKType> {\n return getMarketOrders(marketId, ORDER_TYPE_SELL);\n}\n\nexport async function getMarketOrders(marketId: string, orderType: string): Promise<QueryMarketAggregatedOrdersResponseSDKType> {\n try {\n const reversed = orderType === ORDER_TYPE_BUY;\n const client = await getRestClient();\n return client.bze.tradebin.marketAggregatedOrders(QueryMarketAggregatedOrdersRequestFromPartyal({\n market: marketId,\n orderType: orderType,\n pagination: PageRequest.fromPartial({limit: BigInt(15), reverse: reversed})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getMarketHistory(marketId: string): Promise<QueryMarketHistoryResponseSDKType> {\n try {\n const client = await getRestClient();\n return client.bze.tradebin.marketHistory(QueryMarketHistoryRequestFromPartial({\n market: marketId,\n pagination: PageRequest.fromPartial({limit: BigInt(50), reverse: true})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getAddressMarketOrders(marketId: string, address: string): Promise<QueryUserMarketOrdersResponseSDKType> {\n try {\n const client = await getRestClient();\n return client.bze.tradebin.userMarketOrders(QueryUserMarketOrdersRequestFromPartial({\n market: marketId,\n address: address,\n pagination: PageRequest.fromPartial({limit: BigInt(100), reverse: true})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getAddressFullMarketOrders(marketId: string, address: string): Promise<OrderSDKType[]> {\n const addressOrders = await getAddressMarketOrders(marketId, address);\n if (addressOrders.list.length === 0) {\n return [];\n }\n\n const promises = [];\n for (const reference of addressOrders.list) {\n promises.push(getMarketOrder(reference.market_id, reference.order_type, reference.id))\n }\n\n const orders = await Promise.all(promises);\n\n return orders.filter((item) => item !== undefined).map(resp => resp.order) as OrderSDKType[];\n}\n\nexport async function getMarketOrder(marketId: string, orderType: string, orderId: string): Promise<QueryMarketOrderResponseSDKType|undefined> {\n try {\n const client = await getRestClient();\n return client.bze.tradebin.marketOrder(QueryMarketOrderRequestFromPartial({\n market: marketId,\n orderType: orderType,\n orderId: orderId\n }));\n } catch (e) {\n console.error(e);\n return undefined;\n }\n}\n","import {getAggregatorHost} from \"../constants/endpoints\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {PriceApiResponse} from \"../types/price\";\n\nconst PRICE_PATH = '/api/prices';\n\nconst usdPriceDenom = \"usd\";\nconst usdPriceCacheKey = \"price:usd\";\nconst priceCacheTtl = 5 * 60;\n\nconst getPriceUrl = (): string => {\n return `${getAggregatorHost()}${PRICE_PATH}`;\n}\n\nconst getAssetPriceCacheKey = (asset: string): string => {\n return `${usdPriceCacheKey}:${asset.toLowerCase()};`\n}\n\nconst fetchAssetUsdPrice = async (asset: string): Promise<PriceApiResponse | undefined> => {\n const cacheKey = getAssetPriceCacheKey(asset);\n const cached = getFromLocalStorage(cacheKey);\n if (cached) {\n return JSON.parse(cached);\n }\n\n try {\n const resp = await fetch(getPriceUrl());\n if (resp.status !== 200) {\n return undefined\n }\n\n const decodedResp = await resp.json();\n const result = decodedResp.find((item: PriceApiResponse) => item.denom.toLowerCase() === asset.toLowerCase() && item.price_denom.toLowerCase() === usdPriceDenom);\n\n setInLocalStorage(cacheKey, JSON.stringify(result), priceCacheTtl);\n\n return result;\n } catch (e) {\n console.log(\"error on getAssetUsdPrice: \", e);\n return undefined;\n }\n}\n\nexport const getBZEUSDPrice = async (): Promise<number> => {\n const usdPrice = await fetchAssetUsdPrice(\"bzedge\");\n if (!usdPrice) {\n return 0;\n }\n\n return usdPrice.price;\n}\n","import {\n QueryAllPendingUnlockParticipantsResponseSDKType,\n QueryAllStakingRewardsResponseSDKType, QueryStakingRewardParticipantResponseSDKType,\n} from \"@bze/bzejs/bze/rewards/query\";\nimport {bze} from '@bze/bzejs';\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\nimport {getRestClient} from \"./client\";\nimport {\n PendingUnlockParticipantSDKType,\n StakingRewardParticipantSDKType,\n} from \"@bze/bzejs/bze/rewards/store\";\nimport {AddressRewardsStaking, ExtendedPendingUnlockParticipantSDKType} from \"../types/staking\";\nimport BigNumber from \"bignumber.js\";\n\nconst {fromPartial: QueryAllStakingRewardRequestFromPartial} = bze.rewards.QueryAllStakingRewardsRequest;\nconst {fromPartial: QueryGetStakingRewardParticipantRequestFromPartial} = bze.rewards.QueryStakingRewardParticipantRequest;\nconst {fromPartial: QueryAllPendingUnlockParticipantRequestFromPartial} = bze.rewards.QueryAllPendingUnlockParticipantsRequest;\n\nexport async function getStakingRewards(reverse: boolean = true): Promise<QueryAllStakingRewardsResponseSDKType> {\n try {\n const client = await getRestClient();\n return await client.bze.rewards.allStakingRewards(QueryAllStakingRewardRequestFromPartial({\n pagination: PageRequest.fromPartial({\n reverse: reverse,\n limit: BigInt(1000)\n })\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getAddressPendingUnlock(address: string): Promise<PendingUnlockParticipantSDKType[]> {\n const all = await getPendingUnlockParticipants();\n if (!all || all.list.length === 0) {\n return [];\n }\n\n return all.list.filter((item) => item.address === address);\n}\n\nexport async function getPendingUnlockParticipants(): Promise<QueryAllPendingUnlockParticipantsResponseSDKType> {\n try {\n const client = await getRestClient();\n return client.bze.rewards.allPendingUnlockParticipants(QueryAllPendingUnlockParticipantRequestFromPartial({\n pagination: PageRequest.fromPartial({limit: BigInt(1000)})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getStakingRewardParticipantByAddress(address: string): Promise<QueryStakingRewardParticipantResponseSDKType> {\n try {\n const client = await getRestClient();\n return client.bze.rewards.stakingRewardParticipant(QueryGetStakingRewardParticipantRequestFromPartial({\n address: address,\n pagination: PageRequest.fromPartial({limit: BigInt(500)})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getAddressStakingRewards(address: string): Promise<AddressRewardsStaking> {\n const result = {\n address: address,\n active: new Map<string, StakingRewardParticipantSDKType>(),\n unlocking: new Map<string, ExtendedPendingUnlockParticipantSDKType[]>(),\n }\n\n if (address === \"\") {\n return result\n }\n\n try {\n const [participantRewards, pending] = await Promise.all([getStakingRewardParticipantByAddress(address), getAddressPendingUnlock(address)]);\n [result.active, result.unlocking] = await Promise.all([mapParticipantRewards(participantRewards.list), mapPendingUnlock(pending)])\n\n return result;\n } catch (e) {\n console.error(e);\n return result;\n }\n}\n\nasync function mapParticipantRewards(participantRewards: StakingRewardParticipantSDKType[]): Promise<Map<string, StakingRewardParticipantSDKType>> {\n const result = new Map<string, StakingRewardParticipantSDKType>();\n for (let i = 0; i < participantRewards.length; i++) {\n result.set(participantRewards[i].reward_id, participantRewards[i]);\n }\n return result;\n}\n\nasync function mapPendingUnlock(pending: PendingUnlockParticipantSDKType[]): Promise<Map<string, ExtendedPendingUnlockParticipantSDKType[]>> {\n const result = new Map<string, ExtendedPendingUnlockParticipantSDKType[]>\n for (let i = 0; i < pending.length; i++) {\n const splitIndex = pending[i].index.split('/');\n if (splitIndex.length !== 3) {\n console.error(\"invalid pending unlock index\", pending[i].index);\n continue;\n }\n\n const item = {\n ...pending[i],\n rewardId: splitIndex[1],\n unlockEpoch: new BigNumber(splitIndex[0]),\n }\n\n const allItems = result.get(item.rewardId) ?? [];\n allItems.push(item);\n result.set(item.rewardId, allItems);\n }\n return result;\n}\n","import {getRestClient} from \"./client\";\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\nimport BigNumber from \"bignumber.js\";\nimport {Balance} from \"../types/balance\";\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\nimport {BondStatus, UnbondingDelegationSDKType, ValidatorSDKType} from \"@bze/bzejs/cosmos/staking/v1beta1/staking\";\nimport {NativeUnbondingSummary, UserNativeStakingRewards} from \"../types/staking\";\nimport {DelegationResponseSDKType} from \"@bze/bzejs/cosmos/staking/v1beta1/staking\";\n\nexport const getAddressDelegations = async (address: string) => {\n try {\n const client = await getRestClient();\n const response = await client.cosmos.staking.v1beta1.delegatorDelegations({\n delegatorAddr: address,\n pagination: PageRequest.fromPartial({\n limit: BigInt(1000)\n })});\n\n return response.delegation_responses;\n } catch (e) {\n console.error(\"failed to get address delegations\",e);\n return [];\n }\n}\n\nexport const getAddressNativeDelegatedBalance = async (address: string): Promise<Balance> => {\n const delegations = await getAddressDelegations(address);\n const total = delegations.reduce((acc, delegation) => {\n if (!delegation.balance) return acc;\n if (delegation.balance.denom !== getChainNativeAssetDenom()) return acc;\n return acc.plus(delegation.balance.amount);\n }, new BigNumber(0));\n\n return {\n denom: getChainNativeAssetDenom(),\n amount: total\n }\n}\n\nexport const getAddressUnbondingDelegations = async (address: string): Promise<UnbondingDelegationSDKType[]> => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.delegatorUnbondingDelegations({\n delegatorAddr: address,\n pagination: PageRequest.fromPartial({\n limit: BigInt(1000)\n })\n });\n\n return resp.unbonding_responses;\n } catch (e) {\n console.error(\"failed to get address delegations\",e);\n return [];\n }\n}\n\nexport const getAddressUnbondingDelegationsSummary = async (address: string): Promise<NativeUnbondingSummary> => {\n const unbondingDelegations = await getAddressUnbondingDelegations(address);\n let totalAmount = new BigNumber(0);\n let firstUnlockDate: Date|undefined = undefined;\n let firstUnlock: Balance|undefined = undefined;\n unbondingDelegations.map(delegation => {\n delegation.entries.forEach(entry => {\n totalAmount = totalAmount.plus(entry.balance);\n const entryDate = new Date(entry.completion_time);\n if (!firstUnlockDate || entryDate < firstUnlockDate) {\n firstUnlockDate = entryDate;\n firstUnlock = {\n amount: new BigNumber(entry.balance),\n denom: getChainNativeAssetDenom()\n }\n }\n })\n })\n\n return {\n total: {\n amount: totalAmount,\n denom: getChainNativeAssetDenom()\n },\n firstUnlock: {\n amount: firstUnlock,\n unlockTime: firstUnlockDate\n }\n }\n}\n\nexport const getAddressRewards = async (address: string) => {\n try {\n const client = await getRestClient();\n return await client.cosmos.distribution.v1beta1.delegationTotalRewards({delegatorAddress: address})\n } catch (e) {\n console.error(\"failed to get address rewards\", e);\n return {\n rewards: [],\n total: []\n }\n }\n}\n\nexport const getAddressNativeTotalRewards = async (address: string): Promise<UserNativeStakingRewards> => {\n const rewards = await getAddressRewards(address);\n const total = rewards.total.find(r => r.denom === getChainNativeAssetDenom());\n if (!total) {\n return {\n total: {\n denom: getChainNativeAssetDenom(),\n amount: new BigNumber(0)\n },\n validators: []\n }\n }\n\n const validators: string[] = [];\n rewards.rewards.map((r) => {\n const rewards = new BigNumber(r.reward.find(r => r.denom === getChainNativeAssetDenom())?.amount ?? \"0\").integerValue()\n if (!rewards.gt(0)) {\n return\n }\n validators.push(r.validator_address);\n });\n\n return {\n total: {\n denom: getChainNativeAssetDenom(),\n amount: new BigNumber(total.amount).integerValue(),\n },\n validators: validators,\n }\n}\n\nexport const getAnnualProvisions = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.mint.v1beta1.annualProvisions()\n return new BigNumber(resp.annual_provisions as unknown as string).integerValue()\n } catch (e) {\n console.error(\"failed to get annual provisions\", e);\n return new BigNumber(0);\n }\n}\n\nexport const getDistributionParams = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.distribution.v1beta1.params()\n return resp.params;\n } catch (e) {\n console.error(\"failed to get distribution params\", e);\n return {\n community_tax: \"0.05\",\n base_proposer_reward: \"0.1\",\n bonus_proposer_reward: \"0.2\",\n withdraw_addr_enabled: true,\n }\n }\n}\n\nexport const getStakingParams = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.params()\n return resp.params;\n } catch (e) {\n console.error(\"failed to get distribution params\", e);\n return {\n unbonding_time: \"1814400s\",\n max_validators: 100,\n max_entries: 7,\n historical_entries: 0,\n bond_denom: \"ubze\",\n }\n }\n}\n\nexport const getStakingPool = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.pool()\n return resp.pool\n } catch (e) {\n console.error(\"failed to get staking pool\", e);\n return {\n not_bonded_tokens: \"0\",\n bonded_tokens: \"0\",\n }\n }\n}\n\nexport const getValidators = async (status: BondStatus = BondStatus.BOND_STATUS_BONDED): Promise<ValidatorSDKType[]> => {\n try {\n const client = await getRestClient();\n const statusStr = status === BondStatus.BOND_STATUS_BONDED ? \"BOND_STATUS_BONDED\" :\n status === BondStatus.BOND_STATUS_UNBONDING ? \"BOND_STATUS_UNBONDING\" :\n status === BondStatus.BOND_STATUS_UNBONDED ? \"BOND_STATUS_UNBONDED\" : \"\";\n const resp = await client.cosmos.staking.v1beta1.validators({\n status: statusStr,\n pagination: PageRequest.fromPartial({\n limit: BigInt(500)\n })\n });\n return resp.validators;\n } catch (e) {\n console.error(\"failed to get validators\", e);\n return [];\n }\n}\n\nexport const getDelegatorValidators = async (address: string): Promise<ValidatorSDKType[]> => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.delegatorValidators({\n delegatorAddr: address,\n pagination: PageRequest.fromPartial({\n limit: BigInt(500)\n })\n });\n return resp.validators;\n } catch (e) {\n console.error(\"failed to get delegator validators\", e);\n return [];\n }\n}\n\nexport const getDelegatorDelegations = async (address: string): Promise<DelegationResponseSDKType[]> => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.delegatorDelegations({\n delegatorAddr: address,\n pagination: PageRequest.fromPartial({\n limit: BigInt(1000)\n })\n });\n return resp.delegation_responses;\n } catch (e) {\n console.error(\"failed to get delegator delegations\", e);\n return [];\n }\n}\n\nexport const getValidatorDelegatorRewards = async (address: string, validatorAddress: string) => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.distribution.v1beta1.delegationRewards({\n delegatorAddress: address,\n validatorAddress: validatorAddress,\n });\n return resp.rewards;\n } catch (e) {\n console.error(\"failed to get validator delegator rewards\", e);\n return [];\n }\n}\n","import {MarketData} from \"../types/market\";\nimport {getAggregatorHost} from \"../constants/endpoints\";\nimport {HistoryOrder, SwapHistory} from \"../types/aggregator\";\nimport {TradeViewChart} from \"../types/charts\";\n\nconst getAllTickersUrl = (): string => {\n return `${getAggregatorHost()}/api/dex/tickers`;\n}\n\nconst getHistoryUrl = (): string => {\n return `${getAggregatorHost()}/api/dex/history`;\n}\n\nexport async function getAllTickers(): Promise<MarketData[]> {\n try {\n const resp = await fetch(getAllTickersUrl());\n if (resp.status !== 200) {\n console.error(\"failed to fetch tickers. status: \", resp.status);\n return [];\n }\n\n return await resp.json();\n } catch (e) {\n console.error(\"[AGG] failed to fetch tickers\", e);\n return [];\n }\n}\n\nexport async function getMarketOrdersHistory(marketId: string, limit: number = 1): Promise<HistoryOrder[]> {\n try {\n const url = `${getHistoryUrl()}?market_id=${marketId}&limit=${limit}`;\n const resp = await fetch(url);\n if (resp.status !== 200) {\n return [];\n }\n\n return await resp.json();\n } catch (e) {\n console.error(\"[AGG] failed to fetch market orders\", e);\n return [];\n }\n}\n\nexport async function getAddressHistory(address: string, market: string): Promise<HistoryOrder[]> {\n try {\n const url = `${getHistoryUrl()}?address=${address}&market_id=${market}&limit=100`;\n const resp = await fetch(url);\n if (resp.status !== 200) {\n return [];\n }\n\n return await resp.json();\n } catch (e) {\n console.error(\"failed to fetch address orders\", e);\n return [];\n }\n}\n\nexport async function getTradingViewIntervals(market: string, minutes: number, limit: number): Promise<TradeViewChart[]> {\n try {\n const url = `${getAggregatorHost()}/api/dex/intervals?market_id=${market}&minutes=${minutes}&limit=${limit}&format=tv`;\n const resp = await fetch(url);\n if (resp.status !== 200) {\n return [];\n }\n\n const jsonResponse = await resp.json();\n if (!jsonResponse) {\n return [];\n }\n\n return jsonResponse;\n } catch (e) {\n console.error(\"failed to fetch trading view intervals\", e);\n return [];\n }\n}\n\nexport async function getAddressSwapHistory(address: string): Promise<SwapHistory[]> {\n try {\n const url = `${getAggregatorHost()}/api/dex/swaps?address=${address}`;\n const resp = await fetch(url);\n if (resp.status !== 200) {\n console.error(\"failed to fetch swap history. status: \", resp.status);\n return [];\n }\n\n return await resp.json();\n } catch (e) {\n console.error(\"[AGG] failed to fetch swap history\", e);\n return [];\n }\n}\n","'use client';\n\nimport {createContext} from 'react';\nimport {Asset} from '../types/asset';\nimport {Market, MarketData} from '../types/market';\nimport {Balance} from '../types/balance';\nimport {LiquidityPoolSDKType} from '@bze/bzejs/bze/tradebin/store';\nimport {LiquidityPoolData} from '../types/liquidity_pool';\nimport {EpochInfoSDKType} from '@bze/bzejs/bze/epochs/epoch';\nimport {ConnectionType} from '../types/settings';\nimport {IBCData} from '../types/asset';\nimport BigNumber from 'bignumber.js';\n\nexport interface AssetsContextType {\n assetsMap: Map<string, Asset>;\n updateAssets: () => Promise<Map<string, Asset>>;\n\n marketsMap: Map<string, Market>;\n updateMarkets: () => void;\n\n marketsDataMap: Map<string, MarketData>;\n updateMarketsData: () => Promise<Map<string, MarketData>>;\n\n poolsMap: Map<string, LiquidityPoolSDKType>;\n poolsDataMap: Map<string, LiquidityPoolData>;\n updateLiquidityPools: () => Promise<void>;\n\n balancesMap: Map<string, Balance>;\n updateBalances: () => void;\n\n usdPricesMap: Map<string, BigNumber>;\n\n isLoading: boolean;\n isLoadingPrices: boolean;\n\n ibcChains: IBCData[];\n\n epochs: Map<string, EpochInfoSDKType>;\n updateEpochs: () => void;\n\n connectionType: ConnectionType;\n updateConnectionType: (conn: ConnectionType) => void;\n}\n\nexport const AssetsContext = createContext<AssetsContextType | undefined>(undefined);\n","'use client';\n\nimport {useCallback, useContext, useMemo} from 'react';\nimport {AssetsContext, AssetsContextType} from '../contexts/assets_context';\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\nimport {Asset} from \"../types/asset\";\nimport {isLpDenom, truncateDenom} from \"../utils/denom\";\n\nexport function useAssetsContext(): AssetsContextType {\n const context = useContext(AssetsContext);\n if (context === undefined) {\n throw new Error('useAssets must be used within an AssetsProvider');\n }\n return context;\n}\n\nexport function useAssets() {\n const { assetsMap, isLoading } = useAssetsContext();\n\n const nativeAsset = useMemo(() =>\n assetsMap.get(getChainNativeAssetDenom()) as Asset,\n [assetsMap]\n );\n\n const assets = useMemo(() =>\n Array.from(assetsMap.values()),\n [assetsMap]\n );\n\n const isVerifiedAsset = useCallback((denom: string) => {\n const asset = assetsMap.get(denom)\n if (!asset) {\n return false\n }\n\n return asset.verified\n }, [assetsMap])\n\n const denomTicker = useCallback((denom: string) => {\n const asset = assetsMap.get(denom)\n if (!asset) {\n return truncateDenom(denom)\n }\n\n return asset.ticker\n }, [assetsMap])\n\n const denomDecimals = useCallback((denom: string) => {\n const asset = assetsMap.get(denom)\n if (!asset) {\n return 0\n }\n\n return asset.decimals\n }, [assetsMap])\n\n const getAsset = useCallback((denom: string) => {\n return assetsMap.get(denom)\n }, [assetsMap])\n\n const assetsLpExcluded = useMemo(() => {\n return assets?.filter(item => !isLpDenom(item.denom))\n }, [assets])\n\n return {\n assets,\n isLoading,\n nativeAsset,\n isVerifiedAsset,\n denomTicker,\n denomDecimals,\n getAsset,\n assetsLpExcluded,\n };\n}\n\nexport function useAsset(denom: string) {\n const { assetsMap, isLoading } = useAssetsContext();\n\n const asset = useMemo(() =>\n assetsMap.get(denom),\n [assetsMap, denom]\n );\n\n return {\n asset,\n isLoading,\n };\n}\n\nexport function useAssetsManager() {\n const { updateAssets, isLoading } = useAssetsContext();\n return {\n updateAssets,\n isLoading\n };\n}\n\nexport function useIBCChains() {\n const {ibcChains, isLoading} = useAssetsContext()\n\n return {\n ibcChains,\n isLoading\n }\n}\n","import {useAssetsContext} from \"./useAssets\";\n\nexport function useConnectionType() {\n const {connectionType, updateConnectionType} = useAssetsContext()\n\n return {\n connectionType,\n updateConnectionType,\n }\n}\n","import {useCallback, useEffect, useRef, useState} from \"react\";\nimport {useChain} from \"@interchain-kit/react\";\nimport {getChainName} from \"../constants/chain\";\nimport {registerBzeEncoders} from \"../utils/signing_client_setup\";\n\ninterface UseSigningClientProps {\n chainName?: string;\n}\n\nexport const useSigningClient = ({chainName}: UseSigningClientProps): {\n signingClientError: unknown;\n signingClient: unknown;\n isSigningClientReady: boolean;\n} => {\n const {getSigningClient, signingClientError, wallet, chain} = useChain(chainName ?? getChainName());\n const [signingClient, setSigningClient] = useState<Awaited<ReturnType<typeof getSigningClient>>|null>(null);\n const [isSigningClientReady, setIsSigningClientReady] = useState(false);\n const hasInitialized = useRef(false);\n\n const createSigningClient = useCallback(async () => {\n return getSigningClient();\n }, [getSigningClient]);\n\n useEffect(() => {\n if (!wallet || !chain || hasInitialized.current) {\n return\n }\n\n const load = async () => {\n const client = await createSigningClient();\n if (client) {\n registerBzeEncoders(client);\n setSigningClient(client);\n setIsSigningClientReady(true);\n hasInitialized.current = true;\n }\n }\n\n load();\n }, [wallet, chain, createSigningClient]);\n\n return {\n signingClientError,\n signingClient,\n isSigningClientReady,\n }\n};\n","/**\n * Registers all BZE ecosystem message encoders and amino converters on a signing client.\n *\n * This is required because interchain-kit creates signing clients without any message\n * encoders pre-registered. Without this, signAndBroadcast and fee simulation will fail\n * with \"No encoder/converter found for type\" errors.\n *\n * Covers all modules used across dex.getbze.com, burner.getbze.com, app.getbze.com,\n * and stake.getbze.com. Add new message types here when new modules are introduced.\n */\n\n// BZE modules\nimport {\n MsgCreateMarket, MsgCreateOrder, MsgCancelOrder, MsgFillOrders,\n MsgCreateLiquidityPool, MsgAddLiquidity, MsgRemoveLiquidity, MsgMultiSwap,\n} from \"@bze/bzejs/bze/tradebin/tx\";\nimport {\n MsgCreateStakingReward, MsgUpdateStakingReward, MsgJoinStaking, MsgExitStaking,\n MsgClaimStakingRewards, MsgCreateTradingReward, MsgActivateTradingReward,\n} from \"@bze/bzejs/bze/rewards/tx\";\nimport {MsgFundBurner, MsgStartRaffle, MsgJoinRaffle} from \"@bze/bzejs/bze/burner/tx\";\nimport {MsgCreateDenom, MsgMint, MsgBurn, MsgChangeAdmin, MsgSetDenomMetadata} from \"@bze/bzejs/bze/tokenfactory/tx\";\nimport {MsgAddArticle, MsgPayPublisherRespect, MsgAcceptDomain, MsgSavePublisher} from \"@bze/bzejs/bze/cointrunk/tx\";\n\n// Cosmos modules\nimport {MsgSend, MsgMultiSend} from \"@bze/bzejs/cosmos/bank/v1beta1/tx\";\nimport {\n MsgDelegate, MsgUndelegate, MsgBeginRedelegate, MsgCancelUnbondingDelegation,\n} from \"@bze/bzejs/cosmos/staking/v1beta1/tx\";\nimport {\n MsgSetWithdrawAddress, MsgWithdrawDelegatorReward, MsgWithdrawValidatorCommission,\n MsgFundCommunityPool,\n} from \"@bze/bzejs/cosmos/distribution/v1beta1/tx\";\nimport {\n MsgSubmitProposal, MsgVote, MsgVoteWeighted, MsgDeposit, MsgCancelProposal,\n} from \"@bze/bzejs/cosmos/gov/v1/tx\";\nimport {MsgGrant, MsgExec, MsgRevoke} from \"@bze/bzejs/cosmos/authz/v1beta1/tx\";\nimport {MsgGrantAllowance, MsgRevokeAllowance} from \"@bze/bzejs/cosmos/feegrant/v1beta1/tx\";\n\n// IBC\nimport {MsgTransfer} from \"@bze/bzejs/ibc/applications/transfer/v1/tx\";\n\ntype MsgCodec = {\n typeUrl: string;\n aminoType?: string;\n fromPartial: (object: any) => any;\n encode: (message: any, writer?: any) => any;\n fromAmino?: (object: any) => any;\n toAmino?: (message: any) => any;\n};\n\nconst toEncoder = (g: MsgCodec) => ({\n typeUrl: g.typeUrl,\n fromPartial: g.fromPartial,\n encode: (data: any) => {\n const encoded = g.encode(g.fromPartial(data));\n return encoded.finish ? encoded.finish() : encoded;\n },\n});\n\nconst toConverter = (g: MsgCodec) => ({\n typeUrl: g.typeUrl,\n aminoType: g.aminoType,\n fromAmino: g.fromAmino,\n toAmino: g.toAmino,\n});\n\nconst ALL_MSG_TYPES: MsgCodec[] = [\n // BZE tradebin\n MsgCreateMarket, MsgCreateOrder, MsgCancelOrder, MsgFillOrders,\n MsgCreateLiquidityPool, MsgAddLiquidity, MsgRemoveLiquidity, MsgMultiSwap,\n // BZE rewards\n MsgCreateStakingReward, MsgUpdateStakingReward, MsgJoinStaking, MsgExitStaking,\n MsgClaimStakingRewards, MsgCreateTradingReward, MsgActivateTradingReward,\n // BZE burner\n MsgFundBurner, MsgStartRaffle, MsgJoinRaffle,\n // BZE tokenfactory\n MsgCreateDenom, MsgMint, MsgBurn, MsgChangeAdmin, MsgSetDenomMetadata,\n // BZE cointrunk\n MsgAddArticle, MsgPayPublisherRespect, MsgAcceptDomain, MsgSavePublisher,\n // Cosmos bank\n MsgSend, MsgMultiSend,\n // Cosmos staking\n MsgDelegate, MsgUndelegate, MsgBeginRedelegate, MsgCancelUnbondingDelegation,\n // Cosmos distribution\n MsgSetWithdrawAddress, MsgWithdrawDelegatorReward, MsgWithdrawValidatorCommission,\n MsgFundCommunityPool,\n // Cosmos gov\n MsgSubmitProposal, MsgVote, MsgVoteWeighted, MsgDeposit, MsgCancelProposal,\n // Cosmos authz\n MsgGrant, MsgExec, MsgRevoke,\n // Cosmos feegrant\n MsgGrantAllowance, MsgRevokeAllowance,\n // IBC transfer\n MsgTransfer,\n];\n\nexport const registerBzeEncoders = (client: any): void => {\n if (!client) return;\n client.addEncoders?.(ALL_MSG_TYPES.map(toEncoder));\n client.addConverters?.(ALL_MSG_TYPES.map(toConverter));\n};\n","import {getChainNativeAssetDenom, getUSDCDenom} from \"../constants/assets\";\nimport {createMarketId} from \"../utils/market\";\nimport BigNumber from \"bignumber.js\";\nimport {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {toBigNumber, uAmountToBigNumberAmount} from \"../utils/amount\";\n\nexport function useAssetPrice(denom: string) {\n const {usdPricesMap, marketsDataMap, isLoadingPrices} = useAssetsContext()\n\n const usdDenom = useMemo(() => getUSDCDenom(), []);\n const bzeDenom = useMemo(() => getChainNativeAssetDenom(), [])\n\n const change = useMemo(() => {\n const marketData = marketsDataMap.get(createMarketId(denom, usdDenom))\n if (marketData) {\n return marketData.change\n }\n\n const marketData2 = marketsDataMap.get(createMarketId(denom, bzeDenom))\n if (marketData2) {\n return marketData2.change\n }\n\n return 0\n }, [marketsDataMap, denom, usdDenom, bzeDenom]);\n\n const price = useMemo(() => {\n const zeroBN = toBigNumber(0)\n if (denom === '') return zeroBN;\n\n if (denom === usdDenom) return toBigNumber(1)\n\n return usdPricesMap.get(denom) || zeroBN\n }, [usdPricesMap, denom, usdDenom]);\n\n const totalUsdValue = useCallback((amount: BigNumber): BigNumber => {\n return price.multipliedBy(amount)\n }, [price]);\n\n const uAmountUsdValue = useCallback((amount: BigNumber, decimals: number): BigNumber => {\n return totalUsdValue(uAmountToBigNumberAmount(amount, decimals))\n }, [totalUsdValue]);\n\n const isUSDC = useMemo(() => denom === usdDenom, [denom, usdDenom]);\n const hasPrice = useMemo(() => price.gt(0), [price]);\n\n return {\n price,\n change,\n totalUsdValue,\n uAmountUsdValue,\n isLoading: isLoadingPrices,\n hasPrice,\n isUSDC,\n }\n}\n","'use client';\n\nimport { useState, useEffect, useCallback, useMemo } from 'react'\nimport { AppSettings, BeeZeeEndpoints } from '../types/settings'\nimport { DEFAULT_SETTINGS } from '../constants/settings'\nimport {getSettings, setSettings} from \"../storage/settings\";\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\n\n// Custom hook for managing application settings\nexport function useSettings() {\n const [settings, setSettingsState] = useState<AppSettings>(DEFAULT_SETTINGS)\n const [isLoaded, setIsLoaded] = useState(false)\n\n // Load settings from localStorage on mount\n useEffect(() => {\n setSettingsState(getSettings())\n setIsLoaded(true)\n }, [])\n\n // Save settings to localStorage\n const saveSettings = useCallback((newSettings: AppSettings): boolean => {\n setSettings(newSettings)\n setSettingsState(newSettings)\n return true\n }, [])\n\n // Update endpoint configuration\n const updateEndpoints = useCallback((endpoints: BeeZeeEndpoints): boolean => {\n const newSettings = { ...settings, endpoints }\n return saveSettings(newSettings)\n }, [settings, saveSettings])\n\n // Update preferred fee denom\n const updatePreferredFeeDenom = useCallback((preferredFeeDenom?: string): boolean => {\n const newSettings = { ...settings, preferredFeeDenom }\n return saveSettings(newSettings)\n }, [settings, saveSettings])\n\n // Reset all settings to default values\n const resetToDefaults = useCallback((): boolean => {\n saveSettings(DEFAULT_SETTINGS)\n return true\n }, [saveSettings])\n\n // Get current endpoint configuration\n const getEndpoints = useCallback((): BeeZeeEndpoints => {\n return settings.endpoints\n }, [settings.endpoints])\n\n const defaultSettings = useMemo(() => DEFAULT_SETTINGS, [])\n\n const feeDenom = useMemo(() => settings.preferredFeeDenom || getChainNativeAssetDenom(), [settings.preferredFeeDenom])\n\n return {\n settings,\n isLoaded,\n saveSettings,\n updateEndpoints,\n updatePreferredFeeDenom,\n resetToDefaults,\n getEndpoints,\n defaultSettings,\n feeDenom,\n }\n}\n","import BigNumber from \"bignumber.js\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {Asset} from \"../types/asset\";\nimport {uAmountToBigNumberAmount} from \"../utils/amount\";\nimport {getUSDCDenom} from \"../constants/assets\";\nimport {useMemo, useCallback} from \"react\";\n\nexport interface AssetBalance extends Asset {\n amount: BigNumber;\n USDValue: BigNumber;\n}\n\nexport function useBalances() {\n const { balancesMap, isLoading, assetsMap, usdPricesMap } = useAssetsContext()\n\n const balances = useMemo(() => Array.from(balancesMap.values()), [balancesMap])\n\n const getBalanceByDenom = useCallback((denom: string) => {\n return balancesMap.get(denom) || { denom, amount: BigNumber(0) }\n }, [balancesMap])\n\n const assetsBalances = useMemo(() => {\n const result: AssetBalance[] = []\n balances.map(bal => {\n const asset = assetsMap.get(bal.denom)\n if (!asset) {\n return\n }\n\n let usdPrice = usdPricesMap.get(bal.denom)\n if (!usdPrice) {\n usdPrice = BigNumber(0)\n }\n\n if (asset.denom === getUSDCDenom()) {\n usdPrice = BigNumber(1)\n }\n\n result.push({\n ...asset,\n amount: bal.amount,\n USDValue: uAmountToBigNumberAmount(bal.amount, asset.decimals).multipliedBy(usdPrice)\n })\n })\n\n return result\n }, [balances, assetsMap, usdPricesMap])\n\n return {\n isLoading,\n balances,\n assetsBalances,\n getBalanceByDenom\n }\n}\n\nexport function useBalance(denom: string) {\n const { balancesMap, isLoading } = useAssetsContext()\n\n const balance = useMemo(() =>\n balancesMap.get(denom) || {\n denom,\n amount: BigNumber(0)\n },\n [balancesMap, denom]\n )\n\n const hasAmount = useCallback((amount: BigNumber|string): boolean => {\n return balance.amount.gte(amount)\n }, [balance])\n\n return {\n balance,\n isLoading,\n hasAmount,\n }\n}\n","import {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {EpochInfoSDKType} from \"@bze/bzejs/bze/epochs/epoch\";\nimport BigNumber from \"bignumber.js\";\n\nconst EPOCH_HOUR = \"hour\";\nconst EPOCH_DAY = \"day\";\nconst EPOCH_WEEK = \"week\";\n\nfunction getEpochDurationByIdentifier(identifier: string): number {\n const hourMs = 60 * 60 * 1000;\n switch (identifier) {\n case EPOCH_HOUR:\n return hourMs;\n case EPOCH_DAY:\n return hourMs * 24;\n case EPOCH_WEEK:\n return hourMs * 24 * 7;\n default:\n return hourMs;\n }\n}\n\nexport function useEpochs() {\n const {epochs, isLoading, updateEpochs} = useAssetsContext()\n\n const getCurrentEpoch = useCallback((identifier: string): EpochInfoSDKType | undefined => {\n return epochs.get(identifier);\n }, [epochs]);\n\n const hourEpochInfo = useMemo((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_HOUR);\n }, [epochs])\n\n const dayEpochInfo = useMemo((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_DAY);\n }, [epochs])\n\n const weekEpochInfo = useMemo((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_WEEK);\n }, [epochs])\n\n const getHourEpochInfo = useCallback((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_HOUR);\n }, [epochs]);\n\n const getDayEpochInfo = useCallback((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_DAY);\n }, [epochs]);\n\n const getWeekEpochInfo = useCallback((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_WEEK);\n }, [epochs]);\n\n const getPeriodicEpochEndTime = useCallback((identifier: string, modWeek: number = 1): Date | undefined => {\n const epoch = epochs.get(identifier);\n if (!epoch || !epoch.current_epoch_start_time) {\n return undefined;\n }\n const current = new BigNumber(epoch.current_epoch);\n let remainingEpochs = modWeek - (current.toNumber() % modWeek);\n if (remainingEpochs === modWeek) {\n remainingEpochs = 0;\n }\n\n const startAt = new Date(epoch.current_epoch_start_time);\n const duration = getEpochDurationByIdentifier(identifier);\n startAt.setTime(startAt.getTime() + duration + (duration * remainingEpochs));\n\n return startAt;\n }, [epochs]);\n\n const getCurrentWeekEpochEndTime = useCallback((): Date | undefined => {\n return getPeriodicEpochEndTime(EPOCH_WEEK);\n }, [getPeriodicEpochEndTime]);\n\n const getPeriodicWeekEpochEndTime = useCallback((modWeek: number = 1): Date | undefined => {\n return getPeriodicEpochEndTime(EPOCH_WEEK, modWeek);\n }, [getPeriodicEpochEndTime]);\n\n const epochsList = useMemo(() => Array.from(epochs.values()), [epochs]);\n\n return {\n epochs: epochsList,\n epochsMap: epochs,\n hourEpochInfo,\n dayEpochInfo,\n weekEpochInfo,\n isLoading,\n updateEpochs,\n getCurrentEpoch,\n getHourEpochInfo,\n getDayEpochInfo,\n getWeekEpochInfo,\n getCurrentWeekEpochEndTime,\n getPeriodicWeekEpochEndTime,\n getPeriodicEpochEndTime,\n }\n}\n\nexport function useEpochsManager() {\n const { updateEpochs, isLoading } = useAssetsContext();\n return {\n updateEpochs,\n isLoading,\n };\n}\n","import {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {LiquidityPoolSDKType} from \"@bze/bzejs/bze/tradebin/store\";\nimport {createPoolId, poolIdFromPoolDenom, calculatePoolOppositeAmount} from \"../utils/liquidity_pool\";\nimport {toBigNumber} from \"../utils/amount\";\nimport {Asset} from \"../types/asset\";\nimport {LiquidityPoolData} from \"../types/liquidity_pool\";\nimport BigNumber from \"bignumber.js\";\n\nexport function useLiquidityPools() {\n const {poolsMap, poolsDataMap, updateLiquidityPools, isLoading, assetsMap} = useAssetsContext()\n\n const pools = useMemo((): LiquidityPoolSDKType[] => {\n return Array.from(poolsMap.values())\n }, [poolsMap])\n\n const getPoolByLpDenom = (lpDenom: string) => {\n const poolId = poolIdFromPoolDenom(lpDenom);\n return poolsMap.get(poolId);\n }\n\n const getDenomsPool = useCallback((denomA: string, denomB: string) => {\n const poolId = createPoolId(denomA, denomB)\n return poolsMap.get(poolId)\n }, [poolsMap])\n\n const liquidAssets = useMemo(() => {\n if (!assetsMap || assetsMap.size === 0) return [];\n\n const result = new Map<string, Asset|undefined>();\n pools.forEach(pool => {\n result.set(pool.base, assetsMap.get(pool.base))\n result.set(pool.quote, assetsMap.get(pool.quote))\n })\n\n return Array.from(result.values()).filter(asset => asset !== undefined)\n }, [assetsMap, pools])\n\n return {\n pools,\n poolsMap,\n poolsData: poolsDataMap,\n poolsDataMap,\n isLoading,\n updateLiquidityPools,\n getPoolByLpDenom,\n getDenomsPool,\n liquidAssets,\n }\n}\n\nexport function useAssetLiquidityPools(denom: string) {\n const {poolsMap, poolsDataMap, isLoading} = useAssetsContext()\n\n const assetPools = useMemo(() => {\n return Array.from(poolsMap.values()).filter(pool =>\n pool.base === denom || pool.quote === denom\n )\n }, [poolsMap, denom])\n\n const assetPoolsData = useMemo(() => {\n const newMap = new Map<string, LiquidityPoolData>()\n if (isLoading || denom === '') return newMap\n\n assetPools.forEach(pool => {\n const poolData = poolsDataMap.get(pool.id)\n if (poolData) {\n newMap.set(pool.id, poolData)\n }\n })\n\n return newMap\n }, [assetPools, poolsDataMap, isLoading, denom])\n\n const asset24HoursVolume = useMemo(() => {\n let volume = BigNumber(0)\n if (isLoading || denom === '') return volume\n\n assetPoolsData.forEach((poolData) => {\n if (poolData.base === denom) {\n volume = volume.plus(poolData.baseVolume)\n } else if (poolData.quote === denom) {\n volume = volume.plus(poolData.quoteVolume)\n }\n })\n\n return volume\n }, [isLoading, assetPoolsData, denom])\n\n return {\n assetPools,\n poolsDataMap,\n isLoading,\n asset24HoursVolume,\n assetPoolsData,\n }\n}\n\nexport function useLiquidityPool(poolId: string) {\n const {balancesMap, assetsMap, poolsMap, poolsDataMap, isLoading} = useAssetsContext()\n\n const pool = useMemo(() => poolsMap.get(poolId), [poolsMap, poolId])\n const poolData = useMemo(() => poolsDataMap.get(poolId), [poolsDataMap, poolId])\n\n const userShares = useMemo(() => {\n if (!pool) return toBigNumber(0)\n const balance = balancesMap.get(pool.lp_denom)\n if (!balance) return toBigNumber(0)\n return toBigNumber(balance.amount)\n }, [balancesMap, pool])\n\n const totalShares = useMemo(() => {\n if (!assetsMap || !pool) return toBigNumber(0)\n const sharesAsset = assetsMap.get(pool.lp_denom)\n if (!sharesAsset) return toBigNumber(0)\n return toBigNumber(sharesAsset?.supply || 0)\n }, [assetsMap, pool])\n\n const userSharesPercentage = useMemo(() => {\n if (!userShares || !totalShares || totalShares.isZero()) {\n return toBigNumber(0);\n }\n return userShares.dividedBy(totalShares).multipliedBy(100).toFixed(2);\n }, [userShares, totalShares])\n\n const userReserveBase = useMemo(() => {\n if (!pool || !userShares || !totalShares || totalShares.isZero()) {\n return toBigNumber(0);\n }\n const reserveBase = toBigNumber(pool.reserve_base);\n return userShares.dividedBy(totalShares).multipliedBy(reserveBase);\n }, [pool, userShares, totalShares])\n\n const userReserveQuote = useMemo(() => {\n if (!pool || !userShares || !totalShares || totalShares.isZero()) {\n return toBigNumber(0);\n }\n const reserveQuote = toBigNumber(pool.reserve_quote);\n return userShares.dividedBy(totalShares).multipliedBy(reserveQuote);\n }, [pool, userShares, totalShares])\n\n const calculateOppositeAmount = useCallback((amount: string | BigNumber, isBase: boolean): BigNumber => {\n if (!pool) {\n return toBigNumber(0);\n }\n return calculatePoolOppositeAmount(pool, amount, isBase);\n }, [pool])\n\n const calculateSharesFromAmounts = useCallback((baseAmount: string | BigNumber, quoteAmount: string | BigNumber): BigNumber => {\n if (!pool || !totalShares) {\n return toBigNumber(0);\n }\n\n const baseAmountBN = toBigNumber(baseAmount);\n const quoteAmountBN = toBigNumber(quoteAmount);\n\n if (baseAmountBN.isZero() || baseAmountBN.isNaN() || quoteAmountBN.isZero() || quoteAmountBN.isNaN()) {\n return toBigNumber(0);\n }\n\n const reserveBase = toBigNumber(pool.reserve_base);\n const reserveQuote = toBigNumber(pool.reserve_quote);\n\n if (reserveBase.isZero() || reserveQuote.isZero() || totalShares.isZero()) {\n return toBigNumber(0);\n }\n\n const baseRatio = baseAmountBN.dividedBy(reserveBase);\n const quoteRatio = quoteAmountBN.dividedBy(reserveQuote);\n const mintRatio = BigNumber.minimum(baseRatio, quoteRatio);\n const tokensToMint = mintRatio.multipliedBy(totalShares);\n\n return tokensToMint.integerValue(BigNumber.ROUND_DOWN);\n }, [pool, totalShares])\n\n return {\n isLoading,\n pool,\n poolData,\n userShares,\n totalShares,\n userSharesPercentage,\n userReserveBase,\n userReserveQuote,\n calculateOppositeAmount,\n calculateSharesFromAmounts,\n }\n}\n","import {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {toBigNumber, uAmountToBigNumberAmount} from \"../utils/amount\";\nimport BigNumber from \"bignumber.js\";\nimport {PrettyBalance} from \"../types/balance\";\n\nexport function useAssetsValue() {\n const {assetsMap, usdPricesMap, balancesMap, isLoading: isLoadingPrices} = useAssetsContext()\n\n /**\n * Calculate total USD value of an array of PrettyBalance items.\n */\n const totalUsdValue = useCallback((prettyBalances: PrettyBalance[]) => {\n let usdValue = BigNumber(0)\n prettyBalances.map((denomBalance: PrettyBalance) => {\n const assetPrice = usdPricesMap.get(denomBalance.denom)\n if (assetPrice && assetPrice.gt(0)) {\n usdValue = usdValue.plus(assetPrice.multipliedBy(denomBalance.amount))\n }\n })\n\n return usdValue\n }, [usdPricesMap])\n\n /**\n * Calculate total USD value of all wallet balances.\n */\n const walletTotalUsdValue = useMemo(() => {\n let total = toBigNumber(0)\n balancesMap.forEach((balance, denom) => {\n const price = usdPricesMap.get(denom)\n if (!price || !price.gt(0)) return\n\n const asset = assetsMap.get(denom)\n if (!asset) return\n\n total = total.plus(price.multipliedBy(uAmountToBigNumberAmount(balance.amount, asset.decimals)))\n })\n return total\n }, [balancesMap, usdPricesMap, assetsMap])\n\n const denomUsdValue = useCallback((denom: string, uAmount: BigNumber): BigNumber => {\n const price = usdPricesMap.get(denom)\n if (!price || !price.gt(0)) return toBigNumber(0)\n\n const asset = assetsMap.get(denom)\n if (!asset) return toBigNumber(0)\n\n return price.multipliedBy(uAmountToBigNumberAmount(uAmount, asset.decimals))\n }, [usdPricesMap, assetsMap])\n\n const compareValues = useCallback((a: PrettyBalance, b: PrettyBalance) => {\n let aValue = BigNumber(0)\n const aPrice = usdPricesMap.get(a.denom)\n if (aPrice) {\n aValue = aPrice.multipliedBy(a.amount)\n }\n let bValue = BigNumber(0)\n const bPrice = usdPricesMap.get(b.denom)\n if (bPrice) {\n bValue = bPrice.multipliedBy(b.amount)\n }\n\n return aValue.comparedTo(bValue) ?? 0\n }, [usdPricesMap])\n\n return {\n totalUsdValue,\n walletTotalUsdValue,\n denomUsdValue,\n compareValues,\n isLoading: isLoadingPrices,\n }\n}\n","import { useMemo } from \"react\";\nimport { useLiquidityPools } from \"./useLiquidityPools\";\nimport { getChainNativeAssetDenom } from \"../constants/assets\";\nimport { useAssetsContext } from \"./useAssets\";\nimport {toBigNumber} from \"../utils/amount\";\n\nconst MIN_LIQUIDITY_FOR_FEE_TOKEN = 50000000000;\n\nexport function useFeeTokens() {\n const { pools, isLoading: poolsLoading } = useLiquidityPools();\n const { assetsMap, isLoading: assetsLoading } = useAssetsContext();\n const nativeDenom = getChainNativeAssetDenom();\n\n const feeTokens = useMemo(() => {\n if (poolsLoading || assetsLoading) {\n return [];\n }\n\n const feeTokenDenoms = new Set<string>();\n\n pools.forEach(pool => {\n if (pool.base === nativeDenom && toBigNumber(pool.reserve_base).gt(MIN_LIQUIDITY_FOR_FEE_TOKEN)) {\n feeTokenDenoms.add(pool.quote);\n } else if (pool.quote === nativeDenom && toBigNumber(pool.reserve_quote).gt(MIN_LIQUIDITY_FOR_FEE_TOKEN)) {\n feeTokenDenoms.add(pool.base);\n }\n });\n\n const tokens = Array.from(feeTokenDenoms)\n .map(denom => assetsMap.get(denom))\n .filter(asset => asset !== undefined)\n .sort((a, b) => {\n if (!a || !b) return 0;\n return a.denom.localeCompare(b.denom);\n })\n\n const bzeAsset = assetsMap.get(nativeDenom);\n if (!bzeAsset) {\n return tokens;\n }\n\n return [bzeAsset, ...tokens];\n }, [pools, poolsLoading, assetsLoading, nativeDenom, assetsMap]);\n\n return {\n feeTokens,\n isLoading: poolsLoading || assetsLoading,\n nativeDenom\n };\n}\n","import {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {Market, MarketData} from \"../types/market\";\nimport {toBigNumber, uAmountToBigNumberAmount} from \"../utils/amount\";\nimport {truncateDenom} from \"../utils/denom\";\nimport BigNumber from \"bignumber.js\";\n\nexport function useMarkets() {\n const {marketsMap, marketsDataMap, updateMarkets, isLoading} = useAssetsContext()\n\n const markets = useMemo((): Market[] => {\n return Array.from(marketsMap.values())\n }, [marketsMap])\n\n const marketsData = useMemo(() => Array.from(marketsDataMap.values()), [marketsDataMap])\n\n const marketExists = useCallback((marketId: string): boolean => marketsMap.has(marketId), [marketsMap])\n\n const getMarketData = useCallback((marketId: string): MarketData | undefined => marketsDataMap.get(marketId), [marketsDataMap])\n const getMarket = useCallback((marketId: string): Market | undefined => marketsMap.get(marketId), [marketsMap])\n\n return {\n markets,\n marketsData,\n marketsMap,\n marketsDataMap,\n isLoading,\n updateMarkets,\n marketExists,\n getMarketData,\n getMarket,\n }\n}\n\nexport function useAssetMarkets(denom: string) {\n const { isLoading, marketsMap, marketsDataMap } = useAssetsContext()\n\n const markets = useMemo(() => Array.from(marketsMap.values()), [marketsMap])\n const marketsData = useMemo(() => Array.from(marketsDataMap.values()), [marketsDataMap])\n\n const assetMarkets = useMemo((): Market[] => {\n const baseMatches = []\n const quoteMatches = []\n\n for (const market of markets) {\n if (market.base === denom) baseMatches.push(market)\n else if (market.quote === denom) quoteMatches.push(market)\n }\n\n return [...baseMatches, ...quoteMatches]\n }, [markets, denom])\n\n const assetMarketsData = useMemo((): MarketData[] => {\n const baseMatches = []\n const quoteMatches = []\n\n for (const market of marketsData) {\n if (market.base === denom) baseMatches.push(market)\n else if (market.quote === denom) quoteMatches.push(market)\n }\n\n return [...baseMatches, ...quoteMatches]\n }, [marketsData, denom])\n\n const asset24hTradedVolume = useMemo((): BigNumber => {\n return assetMarketsData.reduce((acc, market) => {\n if (denom === market.base) {\n return acc.plus(market.base_volume || 0)\n } else if (denom === market.quote) {\n return acc.plus(market.quote_volume || 0)\n }\n return acc\n }, new BigNumber(0))\n }, [assetMarketsData, denom])\n\n return {\n isLoading,\n assetMarkets,\n assetMarketsData,\n asset24hTradedVolume,\n }\n}\n\n/**\n * Hook to get a market by its ID string.\n */\nexport function useMarket(marketId: string) {\n const { marketsMap, marketsDataMap, isLoading, assetsMap } = useAssetsContext()\n\n const market = useMemo(() => marketsMap.get(marketId), [marketsMap, marketId])\n\n const marketSymbol = useMemo((): string => {\n if (isLoading) return \"\"\n if (!market) return \"\"\n\n let base = assetsMap.get(market.base)?.ticker\n if (!base) {\n base = truncateDenom(market.base)\n }\n\n let quote = assetsMap.get(market.quote)?.ticker\n if (!quote) {\n quote = truncateDenom(market.quote)\n }\n\n return `${base}/${quote}`\n }, [market, isLoading, assetsMap])\n\n const marketData = useMemo(() => marketsDataMap.get(marketId), [marketsDataMap, marketId])\n\n const marketExists = useMemo(() => !!market, [market])\n\n const volume24h = useMemo(() => {\n if (!marketData || !market) return toBigNumber(0);\n const quoteAsset = assetsMap.get(market.quote);\n if (!quoteAsset) return toBigNumber(0);\n return uAmountToBigNumberAmount(toBigNumber(marketData.quote_volume), quoteAsset.decimals);\n }, [marketData, assetsMap, market])\n\n return {\n isLoading,\n market,\n marketData,\n marketSymbol,\n marketId,\n marketExists,\n volume24h,\n }\n}\n\nexport function useMarketsManager() {\n const { updateMarkets, isLoading } = useAssetsContext();\n return {\n updateMarkets,\n isLoading\n };\n}\n","'use client';\n\nimport { useCallback, useMemo } from 'react';\nimport { toaster } from '../components/toaster';\n\nexport const useToast = () => {\n const clickableSuccess = useCallback((title: string, actionFn: () => void, actionLabel?: string, description?: string, duration = 5000) => {\n toaster.create({\n title,\n description,\n type: 'success',\n duration,\n closable: true,\n action: {\n label: actionLabel ?? '',\n onClick: actionFn,\n }\n });\n }, []);\n\n const success = useCallback((title: string, description?: string, duration = 5000) => {\n toaster.create({\n title,\n description,\n type: 'success',\n duration,\n closable: true,\n });\n }, []);\n\n const error = useCallback((title: string, description?: string, duration = 8000) => {\n toaster.create({\n title,\n description,\n type: 'error',\n duration,\n closable: true,\n });\n }, []);\n\n const warning = useCallback((title: string, description?: string, duration = 6000) => {\n toaster.create({\n title,\n description,\n type: 'warning',\n duration,\n closable: true,\n });\n }, []);\n\n const info = useCallback((title: string, description?: string, duration = 5000) => {\n toaster.create({\n title,\n description,\n type: 'info',\n duration,\n closable: true,\n });\n }, []);\n\n const loading = useCallback((title: string, description?: string) => {\n return toaster.create({\n title,\n description,\n type: 'loading',\n closable: false,\n });\n }, []);\n\n const dismiss = useCallback((id: string) => {\n toaster.dismiss(id);\n }, []);\n\n const toast = useMemo(() => ({\n clickableSuccess,\n success,\n error,\n warning,\n info,\n loading,\n dismiss,\n }), [clickableSuccess, success, error, warning, info, loading, dismiss]);\n\n return { toast };\n};\n","'use client'\n\nimport {\n Toaster as ChakraToaster,\n Portal,\n Spinner,\n Stack,\n Toast,\n createToaster,\n} from \"@chakra-ui/react\"\n\nexport const toaster = createToaster({\n placement: \"top-end\",\n pauseOnPageIdle: true,\n})\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }}>\n {toast.type === \"loading\" ? (\n <Spinner size=\"sm\" color=\"blue.solid\" />\n ) : (\n <Toast.Indicator />\n )}\n <Stack gap=\"1\" flex=\"1\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <Toast.Description>{toast.description}</Toast.Description>\n )}\n </Stack>\n {toast.action && (\n <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>\n )}\n {toast.closable && <Toast.CloseTrigger />}\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n )\n}\n","import {DeliverTxResponse, EncodeObject, StdFee} from \"@bze/bzejs/types\";\nimport {TxBody, SignerInfo} from \"@bze/bzejs/cosmos/tx/v1beta1/tx\";\nimport {useChain} from \"@interchain-kit/react\";\nimport {getChainExplorerURL, getChainName, getGasMultiplier} from \"../constants/chain\";\nimport {useToast} from \"./useToast\";\nimport {prettyError} from \"../utils/user_errors\";\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\nimport {useSigningClient} from \"./useSigningClient\";\nimport {openExternalLink, sleep} from \"../utils/functions\";\nimport BigNumber from \"bignumber.js\";\nimport {DEFAULT_TX_MEMO} from \"../constants/placeholders\";\nimport {useCallback, useMemo, useState} from \"react\";\nimport {useLiquidityPools} from \"./useLiquidityPools\";\nimport {useSettings} from \"./useSettings\";\nimport {calculatePoolOppositeAmount} from \"../utils/liquidity_pool\";\nimport {toBigNumber} from \"../utils/amount\";\nimport {coins} from \"../utils/coins\";\n\nexport interface TxOptions {\n fee?: StdFee | null;\n onSuccess?: (res: DeliverTxResponse) => void;\n onFailure?: (err: string) => void;\n memo?: string;\n progressTrackerTimeout?: number;\n}\n\nexport enum TxStatus {\n Failed = 'Transaction Failed',\n Successful = 'Transaction Successful',\n Broadcasting = 'Transaction Pending',\n}\n\nconst defaultFee = {\n amount: coins(20000, getChainNativeAssetDenom()),\n gas: \"500000\"\n}\n\nexport const useSDKTx = (chainName?: string) => {\n const {tx, progressTrack} = useTx(chainName ?? getChainName());\n\n return {\n tx,\n progressTrack\n }\n}\n\nexport const useBZETx = () => {\n const {tx, progressTrack} = useTx(getChainName());\n\n return {\n tx,\n progressTrack,\n }\n}\n\nexport const useIBCTx = (chainName?: string) => {\n const {tx, progressTrack} = useTx(chainName ?? getChainName());\n\n return {\n tx,\n progressTrack\n }\n}\n\nconst useTx = (chainName: string) => {\n const {address, disconnect} = useChain(chainName);\n const {toast} = useToast();\n const {signingClient, isSigningClientReady, signingClientError} = useSigningClient({chainName: chainName});\n const [progressTrack, setProgressTrack] = useState(\"\")\n const {getDenomsPool} = useLiquidityPools()\n const {feeDenom} = useSettings()\n\n const defaultChainName = useMemo(() => getChainName(), []);\n\n const canUseClient = useCallback(async () => {\n if (!isSigningClientReady) {\n //TODO: this is a hack to make sure the signing client is ready. Remove this when we have a better way to\n // do this\n console.error(\"waiting for signing client to be ready\", signingClientError)\n\n await sleep(1_000)\n }\n\n return isSigningClientReady\n }, [isSigningClientReady, signingClientError]);\n\n const simulateFee = useCallback(async (messages: EncodeObject[], memo: string | undefined): Promise<StdFee> => {\n const gasPrice = 0.02;\n const nativeDenom = getChainNativeAssetDenom();\n const signer = signingClient as any;\n\n // Encode messages into TxBody using the signer's own encoders\n const encodedMessages = messages.map(({typeUrl, value}) => {\n const encoder = signer.getEncoder(typeUrl);\n const encodedWriter = encoder.encode(value);\n const encodedValue = typeof encodedWriter?.finish === 'function' ? encodedWriter.finish() : encodedWriter;\n return {typeUrl, value: encodedValue};\n });\n const txBody = TxBody.fromPartial({messages: encodedMessages, memo: memo ?? ''});\n // BZE ante handler checks sequence even in simulation — use the real sequence\n const sequence = await signer.getSequence(address);\n const signerInfo = SignerInfo.fromPartial({modeInfo: {single: {mode: 1}}, sequence});\n const {gasInfo} = await signer.simulateByTxBody(txBody, [signerInfo]);\n const gasEstimated = Number(gasInfo?.gasUsed ?? BigInt(0));\n if (gasEstimated === 0) {\n throw new Error(\"Gas simulation returned 0\");\n }\n\n const gasAmount = BigNumber(gasEstimated).multipliedBy(getGasMultiplier());\n const gasPayment = gasAmount.multipliedBy(gasPrice);\n const nativeFee = {\n amount: coins(gasPayment.toFixed(0).toString(), nativeDenom),\n gas: gasAmount.toFixed(0)\n }\n\n //user wants to pay in the fee in native denomination\n if (feeDenom === nativeDenom) {\n return nativeFee;\n }\n\n //search for the pool for the fee denom and calculate the expected amount\n const pool = getDenomsPool(feeDenom, nativeDenom)\n if (!pool) {\n return nativeFee;\n }\n\n //calculate how much amount we need to pay for fee in the opposite denomination\n let expectedAmount = calculatePoolOppositeAmount(pool, gasPayment, pool.base === nativeDenom)\n if (!expectedAmount.isPositive()) {\n return nativeFee;\n }\n expectedAmount = expectedAmount.multipliedBy(1.5).integerValue(BigNumber.ROUND_FLOOR)\n //if the fee resulted from swapping the fee amount is lower than 1, it can't be paid.\n //we have to make sure the blockchain can capture the swap fee.\n if (expectedAmount.multipliedBy(pool.fee).lt(1)) {\n expectedAmount = toBigNumber(1).dividedBy(pool.fee).integerValue(BigNumber.ROUND_CEIL)\n }\n\n return {\n amount: coins(expectedAmount.toFixed(0).toString(), feeDenom),\n gas: gasAmount.multipliedBy(1.5).toFixed(0)\n };\n }, [signingClient, address, feeDenom, getDenomsPool]);\n\n const getFee = useCallback(async (messages: EncodeObject[], options?: TxOptions|undefined): Promise<StdFee> => {\n try {\n if (options?.fee) {\n return options.fee;\n } else {\n setProgressTrack(\"Simulating transaction\")\n return await simulateFee(messages, options?.memo);\n }\n } catch (e) {\n console.error(\"could not get fee, using default fee: \", e);\n return defaultFee;\n }\n }, [simulateFee]);\n\n const tx = useCallback(async (msgs: EncodeObject[], options?: TxOptions|undefined) => {\n if (!address) {\n toast.error(TxStatus.Failed, 'Please connect the wallet')\n return;\n }\n\n if (!(await canUseClient())) {\n toast.error(TxStatus.Failed, 'Can not find suitable signing client. Make sure your wallet is installed, connected and unlocked.')\n disconnect()\n return;\n }\n\n setProgressTrack(\"Getting fee\")\n const broadcastToastId = toast.loading(TxStatus.Broadcasting,'Waiting for transaction to be signed and included in block')\n if (signingClient) {\n try {\n const fee = await getFee(msgs, options);\n setProgressTrack(\"Signing transaction\")\n const broadcastResult = await (signingClient as any).signAndBroadcast(address, msgs, fee, options?.memo ?? DEFAULT_TX_MEMO)\n setProgressTrack(\"Waiting for confirmation\")\n const resp = await broadcastResult.wait();\n const txHash = resp?.txhash || broadcastResult.transactionHash;\n if (resp?.code === 0) {\n setProgressTrack(\"Transaction sent\")\n toast.clickableSuccess(TxStatus.Successful, () => {openExternalLink(`${getChainExplorerURL(chainName ?? defaultChainName)}/tx/${txHash}`)}, 'View in Explorer');\n\n if (options?.onSuccess) {\n options.onSuccess(resp)\n }\n } else {\n setProgressTrack(\"Transaction failed\")\n toast.error(TxStatus.Failed, prettyError(resp?.rawLog));\n if (options?.onFailure) {\n options.onFailure(prettyError(resp?.rawLog) || \"Unknown error\")\n }\n }\n } catch (e) {\n console.error(e);\n //@ts-expect-error - small chances for e to be undefined\n if (e.message.includes(\"Failed to retrieve account from signer\")) {\n disconnect()\n }\n // @ts-expect-error - small chances for e to be undefined\n toast.error(TxStatus.Failed, prettyError(e?.message));\n if (options?.onFailure) {\n // @ts-expect-error - small chances for e to be undefined\n options.onFailure(prettyError(e?.message) || \"Unknown error\")\n }\n }\n }\n toast.dismiss(broadcastToastId);\n setTimeout(() => {\n setProgressTrack(\"\")\n }, options?.progressTrackerTimeout || 5000)\n }, [address, canUseClient, toast, signingClient, disconnect, getFee, chainName, defaultChainName]);\n\n return {\n tx,\n progressTrack\n };\n};\n","import {useCallback, useEffect, useRef, useState} from 'react';\n\nconst KEYBASE_API_URL = 'https://keybase.io/_/api/1.0/user/lookup.json';\nconst LOGOS_STORAGE_KEY = 'validator_logos';\nconst LOGOS_TTL = 24 * 60 * 60 * 1000; // 24 hours\n\ninterface ValidatorIdentity {\n operatorAddress: string;\n identity: string;\n}\n\n/**\n * Fetches validator logo URLs from Keybase using their identity field.\n * Results are cached in localStorage for 24 hours.\n *\n * @param validators - array of objects with operator_address and description.identity\n * @returns Record mapping operator_address to image URL (or empty string if none)\n */\nexport const useValidatorLogos = (\n validators: Array<{ operator_address: string; description?: { identity?: string } | null }>\n): { logos: Record<string, string>; isLoading: boolean } => {\n const [logos, setLogos] = useState<Record<string, string>>({});\n const [isLoading, setIsLoading] = useState(false);\n const fetchedRef = useRef(false);\n const validatorCountRef = useRef(0);\n\n const fetchLogos = useCallback(async (identities: ValidatorIdentity[]) => {\n if (identities.length === 0) return {};\n\n // Check cache\n let cached: Record<string, string> | null = null;\n try {\n const raw = typeof window !== 'undefined' ? localStorage.getItem(LOGOS_STORAGE_KEY) : null;\n if (raw) {\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === 'object' && parsed.data && (!parsed.expiry || Date.now() < parsed.expiry)) {\n cached = parsed.data;\n }\n }\n } catch { /* ignore */ }\n\n if (cached) {\n const allCached = identities.every(\n (v) => v.operatorAddress in cached!\n );\n if (allCached) {\n return cached;\n }\n }\n\n const result: Record<string, string> = cached ?? {};\n\n // Only fetch identities not already cached\n const toFetch = identities.filter((v) => !(v.operatorAddress in result));\n if (toFetch.length === 0) return result;\n\n // Chunk requests to avoid overwhelming the Keybase API\n const chunkSize = 20;\n for (let i = 0; i < toFetch.length; i += chunkSize) {\n const chunk = toFetch.slice(i, i + chunkSize);\n\n const chunkResults = await Promise.all(\n chunk.map(async ({operatorAddress, identity}) => {\n if (!identity) {\n return {operatorAddress, url: ''};\n }\n try {\n const resp = await fetch(\n `${KEYBASE_API_URL}?key_suffix=${encodeURIComponent(identity)}&fields=pictures`\n );\n const data = await resp.json();\n const url = data?.them?.[0]?.pictures?.primary?.url ?? '';\n return {operatorAddress, url};\n } catch {\n return {operatorAddress, url: ''};\n }\n })\n );\n\n for (const {operatorAddress, url} of chunkResults) {\n result[operatorAddress] = url;\n }\n\n // Rate-limit between chunks\n if (i + chunkSize < toFetch.length) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n // Cache results\n try {\n if (typeof window !== 'undefined') {\n localStorage.setItem(LOGOS_STORAGE_KEY, JSON.stringify({\n data: result,\n expiry: Date.now() + LOGOS_TTL,\n }));\n }\n } catch { /* ignore */ }\n\n return result;\n }, []);\n\n useEffect(() => {\n if (!validators || validators.length === 0) return;\n // Only re-fetch if validators list changed size (avoids repeated fetches on re-renders)\n if (fetchedRef.current && validatorCountRef.current === validators.length) return;\n\n const identities: ValidatorIdentity[] = validators.map((v) => ({\n operatorAddress: v.operator_address,\n identity: v.description?.identity ?? '',\n }));\n\n setIsLoading(true);\n fetchedRef.current = true;\n validatorCountRef.current = validators.length;\n\n fetchLogos(identities)\n .then((result) => {\n setLogos(result);\n })\n .catch(console.error)\n .finally(() => {\n setIsLoading(false);\n });\n }, [validators, fetchLogos]);\n\n return {logos, isLoading};\n};\n","'use client'\n\nimport { Text, TextProps } from '@chakra-ui/react'\nimport { useEffect, useRef, useState } from 'react'\n\ninterface HighlightTextProps extends TextProps {\n /**\n * Duration of the highlight effect in milliseconds\n * @default 1000\n */\n duration?: number\n\n /**\n * Whether to highlight the text on initial mount\n * @default false\n */\n highlightOnMount?: boolean\n\n /**\n * Color to use for the highlight effect\n * @default 'blue.500'\n */\n highlightColor?: string\n\n /**\n * Intensity of the highlight effect\n * - 'subtle': Lower opacity highlight (15%)\n * - 'evident': Higher opacity highlight (30%)\n * @default 'subtle'\n */\n highlightIntensity?: 'subtle' | 'evident'\n\n /**\n * The text content to display and monitor for changes\n */\n children: React.ReactNode\n}\n\nexport const HighlightText = ({\n duration = 200,\n highlightOnMount = false,\n highlightColor = 'blue.500',\n highlightIntensity = 'subtle',\n children,\n ...textProps\n}: HighlightTextProps) => {\n const [isHighlighted, setIsHighlighted] = useState(false)\n const isMountedRef = useRef(false)\n const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined)\n\n // Convert children to a string for comparison\n const childrenString = String(children)\n const previousValueRef = useRef<string>(childrenString)\n\n // Get opacity and shadow based on intensity\n const highlightOpacity = highlightIntensity === 'subtle' ? '15' : '50'\n const boxShadowStrength = highlightIntensity === 'subtle' ? '10' : '25'\n\n useEffect(() => {\n // Check if this is the first mount\n if (!isMountedRef.current) {\n isMountedRef.current = true\n\n // Highlight on mount if requested\n if (highlightOnMount) {\n setIsHighlighted(true)\n timeoutRef.current = setTimeout(() => {\n setIsHighlighted(false)\n }, duration)\n }\n\n previousValueRef.current = childrenString\n return\n }\n\n // Check if the actual value changed (not just reference)\n if (previousValueRef.current !== childrenString) {\n // Clear any existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n\n // Trigger highlight\n setIsHighlighted(true)\n\n // Remove highlight after duration\n timeoutRef.current = setTimeout(() => {\n setIsHighlighted(false)\n }, duration)\n\n // Update previous value\n previousValueRef.current = childrenString\n }\n\n // Cleanup timeout on unmount\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n }\n }, [childrenString, duration, highlightOnMount])\n\n return (\n <Text\n {...textProps}\n transition={`all ${duration}ms ease-out`}\n bg={isHighlighted ? `${highlightColor}/${highlightOpacity}` : 'transparent'}\n boxShadow={isHighlighted ? `0 0 0 ${highlightIntensity === 'evident' ? '4px' : '3px'} ${highlightColor}/${boxShadowStrength}` : 'none'}\n borderRadius=\"md\"\n px={isHighlighted ? '2' : '0'}\n transform={isHighlighted && highlightIntensity === 'evident' ? 'scale(1.02)' : 'scale(1)'}\n fontWeight={isHighlighted && highlightIntensity === 'evident' ? 'semibold' : textProps.fontWeight}\n >\n {children}\n </Text>\n )\n}\n","'use client'\n\nimport { Icon, IconButton, Portal } from '@chakra-ui/react'\nimport type { PropsWithChildren } from 'react'\nimport { LuX } from 'react-icons/lu'\nimport { useState } from 'react'\n\ninterface SidebarProps extends PropsWithChildren {\n trigger: React.ReactNode\n ariaLabel: string\n}\n\nexport const Sidebar = ({ children, trigger, ariaLabel }: SidebarProps) => {\n const [isOpen, setIsOpen] = useState(false)\n\n const handleTriggerClick = () => {\n setIsOpen(true)\n }\n\n const handleClose = () => {\n setIsOpen(false)\n }\n\n return (\n <>\n {/* Trigger Button */}\n <div onClick={handleTriggerClick} style={{ cursor: 'pointer' }}>\n {trigger}\n </div>\n\n {/* Sidebar Overlay */}\n {isOpen && (\n <Portal>\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: '3',\n display: 'block',\n }}\n onClick={(e) => {\n // Only close if clicking the backdrop itself, not child elements\n if (e.target === e.currentTarget) {\n handleClose()\n }\n }}\n />\n\n {/* Sidebar Content */}\n <div\n id=\"sidebar-content\"\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n width: window.innerWidth < 768 ? '100vw' : '20vw',\n minWidth: window.innerWidth < 768 ? '100vw' : '300px',\n maxWidth: window.innerWidth < 768 ? '100vw' : '400px',\n backgroundColor: 'var(--chakra-colors-bg-panel)',\n borderLeft: '1px solid var(--chakra-colors-border-subtle)',\n boxShadow: window.innerWidth >= 768 ? '-4px 0 12px rgba(0, 0, 0, 0.15)' : 'none',\n zIndex: '99',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '1rem',\n borderBottom: '1px solid var(--chakra-colors-border-subtle)',\n backgroundColor: 'var(--chakra-colors-bg-panel)',\n flexShrink: 0,\n }}\n >\n <h3\n style={{\n fontSize: '1.125rem',\n fontWeight: '600',\n margin: 0,\n color: 'var(--chakra-colors-fg)',\n }}\n >\n {ariaLabel}\n </h3>\n <IconButton\n aria-label=\"Close sidebar\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClose}\n >\n <Icon size=\"md\">\n <LuX />\n </Icon>\n </IconButton>\n </div>\n\n {/* Content Area */}\n <div\n style={{\n padding: '1rem',\n flex: 1,\n overflowY: 'auto',\n backgroundColor: 'var(--chakra-colors-bg-panel)',\n position: 'relative',\n }}\n >\n {children}\n </div>\n </div>\n </Portal>\n )}\n </>\n )\n}\n","'use client'\n\nimport {\n VStack,\n HStack,\n Text,\n Switch,\n Button,\n Separator,\n Box,\n Input,\n Badge,\n createListCollection,\n} from '@chakra-ui/react'\nimport { Select, Portal } from '@chakra-ui/react'\nimport { useTheme } from \"next-themes\"\nimport {useState, useEffect, useMemo, useCallback} from 'react'\nimport { useSettings } from '../../hooks/useSettings'\nimport {convertToWebSocketUrl, validateEndpoints} from '../../utils/validation'\nimport {\n CONNECTION_TYPE_NONE,\n CONNECTION_TYPE_POLLING,\n CONNECTION_TYPE_WS,\n} from '../../types/settings'\nimport type { EndpointValidationResults } from '../../types/settings'\nimport {useToast} from \"../../hooks/useToast\"\nimport {useConnectionType} from \"../../hooks/useConnectionType\"\nimport {useFeeTokens} from \"../../hooks/useFeeTokens\"\nimport {getChainNativeAssetDenom} from \"../../constants/assets\"\n\ninterface SettingsSidebarContentProps {\n accentColor?: string\n}\n\nexport const SettingsSidebarContent = ({ accentColor = 'blue' }: SettingsSidebarContentProps) => {\n const { setTheme, resolvedTheme} = useTheme()\n const {toast} = useToast()\n const { settings, isLoaded, updateEndpoints, updatePreferredFeeDenom, defaultSettings } = useSettings()\n const {connectionType} = useConnectionType()\n const { feeTokens, isLoading: feeTokensLoading } = useFeeTokens()\n\n // Local form state\n const [restEndpoint, setRestEndpoint] = useState('')\n const [rpcEndpoint, setRpcEndpoint] = useState('')\n const [isValidating, setIsValidating] = useState(false)\n const [validationResults, setValidationResults] = useState<EndpointValidationResults>({})\n const [preferredFeeDenom, setPreferredFeeDenom] = useState<string | undefined>(undefined)\n\n // Initialize form with loaded settings\n useEffect(() => {\n if (isLoaded) {\n setRestEndpoint(settings.endpoints.restEndpoint)\n setRpcEndpoint(settings.endpoints.rpcEndpoint)\n setPreferredFeeDenom(settings.preferredFeeDenom || getChainNativeAssetDenom())\n }\n }, [isLoaded, settings])\n\n const handleValidateEndpoints = useCallback(async (rest: string, rpc: string) => {\n setIsValidating(true)\n setValidationResults({})\n\n try {\n const results = await validateEndpoints(rest, rpc)\n setValidationResults({\n rest: results.rest,\n rpc: results.rpc\n })\n } catch (error) {\n console.error(error)\n setValidationResults({\n rest: { isValid: false, error: 'Validation failed' },\n rpc: { isValid: false, error: 'Validation failed' }\n })\n } finally {\n setIsValidating(false)\n setTimeout(() => setValidationResults({}), 10_000)\n }\n }, [])\n\n const handleSaveSettings = useCallback(async (rest: string, rpc: string, feeDenom?: string) => {\n setValidationResults({})\n const results = await validateEndpoints(rest, rpc)\n if (!results.isValid) {\n setValidationResults({\n rest: results.rest,\n rpc: results.rpc\n })\n\n setTimeout(() => setValidationResults({}), 10_000)\n\n return\n }\n\n const endpointsSuccess = updateEndpoints({\n restEndpoint: rest.trim(),\n rpcEndpoint: convertToWebSocketUrl(rpc.trim())\n })\n\n const feeTokenSuccess = updatePreferredFeeDenom(feeDenom)\n\n if (endpointsSuccess && feeTokenSuccess) {\n toast.success('Success!', 'Settings have been saved.')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const handleResetToDefaults = useCallback(() => {\n setRestEndpoint(defaultSettings.endpoints.restEndpoint)\n setRpcEndpoint(defaultSettings.endpoints.rpcEndpoint)\n setPreferredFeeDenom(defaultSettings.preferredFeeDenom)\n setValidationResults({})\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const connectionStatusText = useMemo(() => {\n switch(connectionType) {\n case CONNECTION_TYPE_NONE:\n return 'Failed'\n case CONNECTION_TYPE_POLLING:\n return 'Polling'\n case CONNECTION_TYPE_WS:\n return 'Connected'\n }\n }, [connectionType])\n\n const connectionStatusBadgeColor = useMemo(() => {\n switch(connectionType) {\n case CONNECTION_TYPE_NONE:\n return 'red'\n case CONNECTION_TYPE_POLLING:\n return 'orange'\n case CONNECTION_TYPE_WS:\n return 'green'\n }\n }, [connectionType])\n\n // Create fee tokens collection for select\n const feeTokensCollection = useMemo(() => createListCollection({\n items: feeTokens.map(token => ({\n label: token.ticker || token.name,\n value: token.denom,\n name: token.ticker || token.name,\n }))\n }), [feeTokens])\n\n const handleFeeTokenChange = useCallback((denom: string) => {\n setPreferredFeeDenom(denom || undefined)\n }, [])\n\n const hasUnsavedChanges =\n restEndpoint !== settings.endpoints.restEndpoint ||\n rpcEndpoint !== settings.endpoints.rpcEndpoint ||\n preferredFeeDenom !== settings.preferredFeeDenom\n\n return (\n <VStack gap=\"6\" align=\"stretch\">\n {/* Appearance Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n Appearance\n </Text>\n <VStack gap=\"3\" align=\"stretch\">\n <HStack justify=\"space-between\">\n <Text fontSize=\"sm\">Dark Mode</Text>\n <Switch.Root\n checked={resolvedTheme === 'dark'}\n onCheckedChange={(details) => {\n const newTheme = details.checked ? 'dark' : 'light'\n setTheme(newTheme)\n }}\n >\n <Switch.HiddenInput />\n <Switch.Control>\n <Switch.Thumb />\n </Switch.Control>\n </Switch.Root>\n </HStack>\n </VStack>\n </Box>\n\n <Separator />\n\n {/* Fee Token Preference Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n Fee Token Preference\n </Text>\n <VStack gap=\"3\" align=\"stretch\">\n <Box>\n <Select.Root\n collection={feeTokensCollection}\n size=\"sm\"\n value={preferredFeeDenom ? [preferredFeeDenom] : ['']}\n onValueChange={(details) => handleFeeTokenChange(details.value[0] || '')}\n disabled={feeTokensLoading}\n >\n <Select.Label>Preferred Fee Token</Select.Label>\n <Select.HiddenSelect />\n <Select.Control>\n <Select.Trigger>\n <Select.ValueText placeholder=\"Native Token (default)\" />\n </Select.Trigger>\n <Select.IndicatorGroup>\n <Select.Indicator />\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <Select.Content>\n {feeTokensCollection.items.map((item) => (\n <Select.Item key={item.value} item={item}>\n <Text>{item.label}</Text>\n <Select.ItemIndicator />\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Positioner>\n </Portal>\n </Select.Root>\n <Text fontSize=\"xs\" color=\"fg.muted\" mt=\"2\">\n Select your preferred token for paying transaction fees. Only tokens with liquidity pools paired with the native token are available.\n </Text>\n </Box>\n </VStack>\n </Box>\n\n <Separator />\n\n {/* BeeZee Endpoints Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n BeeZee Endpoints\n </Text>\n\n <VStack gap=\"4\" align=\"stretch\">\n <Box>\n <HStack gap=\"2\" align=\"center\" justify=\"space-between\">\n <Text fontSize=\"sm\" mb=\"1\">Status: </Text>\n <Badge colorPalette={connectionStatusBadgeColor}>{connectionStatusText}</Badge>\n </HStack>\n </Box>\n {/* REST Endpoint */}\n <Box>\n <Text fontSize=\"sm\" mb=\"1\">REST Endpoint</Text>\n <Text fontSize=\"xs\" color=\"fg.muted\" mb=\"2\">\n Note: Endpoint must have CORS enabled to work in browser\n </Text>\n <Input\n size=\"sm\"\n placeholder=\"https://rest.getbze.com\"\n value={restEndpoint}\n onChange={(e) => setRestEndpoint(e.target.value)}\n />\n {validationResults.rest && (\n <Box\n mt=\"2\"\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={validationResults.rest.isValid ? \"green.500/15\" : \"red.500/15\"}\n gradientTo={validationResults.rest.isValid ? \"green.600/15\" : \"red.600/15\"}\n borderWidth=\"1px\"\n borderColor={validationResults.rest.isValid ? \"green.500/30\" : \"red.500/30\"}\n borderRadius=\"md\"\n >\n <Text fontSize=\"sm\" color={validationResults.rest.isValid ? \"green.700\" : \"red.700\"} _dark={{color: validationResults.rest.isValid ? \"green.300\" : \"red.300\"}}>\n {validationResults.rest.error || 'REST endpoint is valid'}\n </Text>\n </Box>\n )}\n </Box>\n\n {/* RPC Endpoint */}\n <Box>\n <Text fontSize=\"sm\" mb=\"1\">RPC Endpoint</Text>\n <Text fontSize=\"xs\" color=\"fg.muted\" mb=\"2\">\n Note: Must support WebSocket (WS/WSS) connections\n </Text>\n <Input\n size=\"sm\"\n placeholder=\"wss://rpc.getbze.com\"\n value={rpcEndpoint}\n onChange={(e) => setRpcEndpoint(e.target.value)}\n />\n {validationResults.rpc && (\n <Box\n mt=\"2\"\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={validationResults.rpc.isValid ? \"green.500/15\" : \"red.500/15\"}\n gradientTo={validationResults.rpc.isValid ? \"green.600/15\" : \"red.600/15\"}\n borderWidth=\"1px\"\n borderColor={validationResults.rpc.isValid ? \"green.500/30\" : \"red.500/30\"}\n borderRadius=\"md\"\n >\n <Text fontSize=\"sm\" color={validationResults.rpc.isValid ? \"green.700\" : \"red.700\"} _dark={{color: validationResults.rpc.isValid ? \"green.300\" : \"red.300\"}}>\n {validationResults.rpc.error || 'RPC endpoint is valid'}\n </Text>\n </Box>\n )}\n </Box>\n\n {/* Validation Button */}\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleValidateEndpoints(restEndpoint, rpcEndpoint)}\n loading={isValidating}\n disabled={!restEndpoint.trim() || !rpcEndpoint.trim()}\n >\n {isValidating ? 'Validating...' : 'Validate Endpoints'}\n </Button>\n </VStack>\n </Box>\n\n {/* Action Buttons */}\n <Box>\n <VStack gap=\"3\">\n <Button\n size=\"sm\"\n width=\"full\"\n onClick={() => handleSaveSettings(restEndpoint, rpcEndpoint, preferredFeeDenom)}\n colorPalette={accentColor}\n disabled={!hasUnsavedChanges}\n >\n Save Settings\n </Button>\n <Button\n size=\"sm\"\n width=\"full\"\n variant=\"outline\"\n onClick={handleResetToDefaults}\n >\n Reset to Defaults\n </Button>\n </VStack>\n </Box>\n </VStack>\n )\n}\n","'use client'\nimport \"@interchain-kit/react/styles.css\";\nimport {InterchainWalletModal, useChain} from \"@interchain-kit/react\";\nimport {\n Badge,\n Box,\n Button,\n createListCollection,\n Field,\n Group,\n HStack,\n Image,\n Input,\n Portal,\n Select,\n Separator,\n Text,\n Textarea,\n VStack,\n} from '@chakra-ui/react'\nimport {LuCopy, LuExternalLink, LuX} from 'react-icons/lu'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {getChainExplorerURL, getChainName} from \"../../constants/chain\";\nimport {WalletState} from \"@interchain-kit/core\";\nimport {stringTruncateFromCenter} from \"../../utils/strings\";\nimport {useBalances} from \"../../hooks/useBalances\";\nimport type {AssetBalance} from \"../../hooks/useBalances\";\nimport {isIbcDenom, isLpDenom} from \"../../utils/denom\";\n\nimport {amountToUAmount, prettyAmount, uAmountToAmount, uAmountToBigNumberAmount} from \"../../utils/amount\";\nimport {getChainNativeAssetDenom} from \"../../constants/assets\";\nimport {sanitizeNumberInput} from \"../../utils/number\";\nimport {validateBZEBech32Address} from \"../../utils/address\";\nimport BigNumber from \"bignumber.js\";\nimport {useToast} from \"../../hooks/useToast\";\nimport {useSDKTx} from \"../../hooks/useTx\";\nimport {cosmos} from \"@bze/bzejs\";\nimport {openExternalLink} from \"../../utils/functions\";\nimport {shortNumberFormat} from \"../../utils/formatter\";\nimport {HighlightText} from \"../highlight\";\n\ntype ViewState = 'balances' | 'send'\n\ninterface WalletSidebarContentProps {\n accentColor?: string\n}\n\ninterface BalanceItemProps {\n asset: AssetBalance;\n onClick: () => void;\n accentColor: string;\n}\n\nconst validateAmount = (amount: string, coin: AssetBalance|undefined, onError:(msg: string) => void) => {\n if (!coin) return\n if (amount === \"\") return\n\n const amountNumber = BigNumber(amount)\n if (amountNumber.isNaN()) {\n onError('Invalid amount')\n return\n }\n\n const coinBalance = uAmountToBigNumberAmount(coin.amount, coin.decimals)\n if (coinBalance.isLessThan(amount)) {\n onError('Insufficient balance')\n } else {\n onError('')\n }\n}\n\nconst BalanceItem = ({asset, onClick, accentColor}: BalanceItemProps) => {\n const [showSendButton, setShowSendButton] = useState(false)\n const formattedBalanceAmount = useMemo(() => {\n return prettyAmount(uAmountToBigNumberAmount(asset.amount, asset.decimals ?? 0))\n }, [asset.amount, asset.decimals])\n\n const formattedBalanceUSDValue = useMemo(() => {\n return shortNumberFormat(asset.USDValue)\n }, [asset.USDValue])\n\n return (\n <Box\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={`${accentColor}.500/5`}\n gradientTo={`${accentColor}.600/5`}\n borderRadius=\"md\"\n borderWidth=\"1px\"\n borderColor={`${accentColor}.500/15`}\n _hover={{\n gradientFrom: `${accentColor}.500/10`,\n gradientTo: `${accentColor}.600/10`,\n borderColor: `${accentColor}.500/25`\n }}\n transition=\"all 0.2s\"\n onMouseLeave={() => setShowSendButton(false)}\n onMouseEnter={() => setShowSendButton(true)}\n >\n <HStack justify=\"space-between\" mb=\"2\">\n <HStack>\n <Image\n src={asset.logo}\n alt={asset.ticker}\n width=\"20px\"\n height=\"20px\"\n borderRadius=\"full\"\n />\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n {asset.ticker}\n </Text>\n <Text fontSize=\"xs\" color=\"fg.muted\">\n {asset.name}\n </Text>\n {isIbcDenom(asset.denom) && (\n <Badge size=\"xs\" colorPalette={accentColor}>\n IBC\n </Badge>\n )}\n </HStack>\n {showSendButton && (\n <HStack justify=\"end\">\n <Button size='2xs' variant={'outline'} onClick={onClick}>Send</Button>\n </HStack>\n )}\n </HStack>\n <HStack justify=\"space-between\">\n <HighlightText fontSize=\"sm\" fontFamily=\"mono\">\n {formattedBalanceAmount}\n </HighlightText>\n <HighlightText fontSize=\"sm\" color=\"fg.muted\">\n ${formattedBalanceUSDValue}\n </HighlightText>\n </HStack>\n </Box>\n )\n}\n\nconst SendForm = ({balances, onClose, selectedTicker, accentColor}: {balances: AssetBalance[], onClose: () => void, selectedTicker: string, accentColor: string}) => {\n // Send form state\n const [isLoading, setIsLoading] = useState(false)\n const [selectedCoin, setSelectedCoin] = useState<AssetBalance|undefined>()\n\n const [sendAmount, setSendAmount] = useState('')\n const [sendAmountError, setSendAmountError] = useState('')\n\n const [recipient, setRecipient] = useState('')\n const [recipientError, setRecipientError] = useState('')\n\n const [memo, setMemo] = useState('')\n const [memoError, setMemoError] = useState('')\n\n //other hooks\n const { toast } = useToast()\n const { status, address } = useChain(getChainName());\n const {tx} = useSDKTx(getChainName());\n\n // Create collections for selects\n const coinsCollection = createListCollection({\n items: balances.map(item => ({\n label: `${item.ticker} - ${shortNumberFormat(uAmountToBigNumberAmount(item.amount, item?.decimals ?? 0))}`,\n value: item.ticker,\n logo: item.logo\n }))\n })\n\n const isValidForm = useMemo(() => {\n return selectedCoin &&\n memoError === \"\" &&\n recipientError === \"\" &&\n sendAmountError === \"\" &&\n sendAmount !== \"\" &&\n recipient !== \"\"\n }, [selectedCoin, memoError, recipientError, sendAmountError, sendAmount, recipient])\n\n const resetSendForm = useCallback(() => {\n setSelectedCoin(undefined)\n setSendAmount('')\n setRecipient('')\n setMemo('')\n }, [])\n\n const handleSend = useCallback(async () => {\n if (!isValidForm) {\n toast.error('Can not send coins!', 'Please check the input data.')\n return\n }\n\n if (status !== WalletState.Connected) {\n toast.error('Wallet not connected!','Please connect your wallet first.')\n return\n }\n\n const {send} = cosmos.bank.v1beta1.MessageComposer.withTypeUrl;\n\n const msg = send({\n fromAddress: address,\n toAddress: recipient,\n amount: [{\n denom: selectedCoin?.denom ?? '',\n amount: amountToUAmount(sendAmount, selectedCoin?.decimals ?? 0)\n }],\n })\n\n setIsLoading(true)\n await tx([msg], {memo: memo.length > 0 ? memo : undefined});\n\n // Reset form\n resetSendForm()\n setIsLoading(false)\n onClose()\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [address, memo, onClose, recipient, selectedCoin, sendAmount, status])\n\n const handleCancel = useCallback(() => {\n resetSendForm()\n onClose()\n }, [onClose, resetSendForm])\n\n const onRecipientChange = useCallback((recipient: string) => {\n setRecipient(recipient)\n if (recipient.length === 0) {\n setRecipientError('')\n return\n }\n\n const validate = validateBZEBech32Address(recipient)\n if (validate.isValid) {\n setRecipientError('')\n } else {\n setRecipientError(validate.message)\n }\n }, [])\n\n const onAmountChange = useCallback((amount: string) => {\n setSendAmount(sanitizeNumberInput(amount))\n setSendAmountError('')\n }, [])\n\n const onCoinSelectChange = useCallback((ticker: string) => {\n if (ticker === \"\") return\n\n const selectedCoin = balances.find(item => item.ticker === ticker)\n if (selectedCoin) {\n setSelectedCoin(selectedCoin)\n validateAmount(sendAmount, selectedCoin, setSendAmountError)\n }\n }, [sendAmount, balances])\n\n const setMaxAmount = useCallback(() => {\n if (!selectedCoin) return\n const maxAmount = uAmountToBigNumberAmount(selectedCoin.amount, selectedCoin.decimals)\n onAmountChange(maxAmount.toString())\n validateAmount(maxAmount.toString(), selectedCoin, setSendAmountError)\n }, [selectedCoin, onAmountChange])\n\n const onMemoChange = useCallback((memo: string) => {\n setMemo(memo)\n if (memo.length > 256) {\n setMemoError('Memo must be less than or equal to 256 characters')\n } else {\n setMemoError('')\n }\n }, [])\n\n useEffect(() => {\n if (selectedTicker !== '') {\n onCoinSelectChange(selectedTicker)\n }\n }, [onCoinSelectChange, selectedTicker])\n\n return (\n <VStack gap=\"4\" align=\"stretch\">\n <HStack justify=\"space-between\" align=\"center\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Send Coins\n </Text>\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={handleCancel}\n disabled={isLoading}\n >\n <LuX size=\"14\" />\n </Button>\n </HStack>\n\n <Box>\n <Select.Root\n collection={coinsCollection}\n size=\"sm\"\n value={selectedCoin?.ticker ? [selectedCoin.ticker] : []}\n onValueChange={(details) => onCoinSelectChange(details.value[0] || '')}\n >\n <Select.Label>Coin</Select.Label>\n <Select.HiddenSelect />\n <Select.Control>\n <Select.Trigger>\n <Select.ValueText placeholder=\"Select coin\" />\n </Select.Trigger>\n <Select.IndicatorGroup>\n <Select.Indicator />\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <Select.Content>\n {coinsCollection.items.map((item) => (\n <Select.Item key={item.value} item={item}>\n <HStack gap=\"2\">\n <Image\n src={item.logo}\n alt={item.value}\n width=\"16px\"\n height=\"16px\"\n borderRadius=\"full\"\n />\n <Text>{item.label}</Text>\n </HStack>\n <Select.ItemIndicator />\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Positioner>\n </Portal>\n </Select.Root>\n\n {selectedCoin && (\n <Box\n mt=\"2\"\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={`${accentColor}.500/10`}\n gradientTo={`${accentColor}.600/10`}\n borderRadius=\"md\"\n borderWidth=\"1px\"\n borderColor={`${accentColor}.500/30`}\n >\n <HStack justify=\"space-between\">\n <Text fontSize=\"xs\" color=\"fg.muted\">\n Available:\n </Text>\n <VStack gap=\"0\" align=\"end\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n {uAmountToAmount(selectedCoin.amount, selectedCoin.decimals)} {selectedCoin.ticker}\n </Text>\n {selectedCoin.USDValue.gt(0) && (\n <Text fontSize=\"xs\" color=\"fg.muted\">\n ≈ ${shortNumberFormat(selectedCoin.USDValue)}\n </Text>\n )}\n </VStack>\n </HStack>\n </Box>\n )}\n </Box>\n\n <Box>\n <Field.Root invalid={sendAmountError !== \"\"}>\n <Field.Label>Amount</Field.Label>\n <Group attached w=\"full\" maxW=\"sm\">\n <Input\n size=\"sm\"\n placeholder=\"Amount to send\"\n value={sendAmount}\n onChange={(e) => onAmountChange(e.target.value)}\n onBlur={() => validateAmount(sendAmount, selectedCoin, setSendAmountError)}\n />\n <Button variant=\"outline\" size=\"sm\" onClick={setMaxAmount} disabled={isLoading}>\n Max\n </Button>\n </Group>\n <Field.ErrorText>{sendAmountError}</Field.ErrorText>\n </Field.Root>\n </Box>\n <Box>\n <Field.Root invalid={recipientError !== \"\"}>\n <Field.Label>Recipient Address</Field.Label>\n <Input\n size=\"sm\"\n placeholder=\"bze...2a1b\"\n value={recipient}\n onChange={(e) => onRecipientChange(e.target.value)}\n />\n <Field.ErrorText>{recipientError}</Field.ErrorText>\n </Field.Root>\n </Box>\n\n <Box>\n <Field.Root invalid={memoError !== \"\"}>\n <Field.Label>Memo\n <Field.RequiredIndicator\n fallback={\n <Badge size=\"xs\" variant=\"surface\">\n Optional\n </Badge>\n }\n />\n </Field.Label>\n <Textarea\n size=\"sm\"\n placeholder=\"Transaction memo\"\n rows={3}\n value={memo}\n onChange={(e) => onMemoChange(e.target.value)}\n resize=\"none\"\n />\n <Field.ErrorText>{memoError}</Field.ErrorText>\n </Field.Root>\n </Box>\n\n <HStack gap=\"2\">\n <Button\n size=\"sm\"\n flex=\"1\"\n onClick={handleSend}\n colorPalette={accentColor}\n disabled={!isValidForm || isLoading}\n loading={isLoading}\n loadingText={\"Sending...\"}\n >\n Send\n </Button>\n <Button\n size=\"sm\"\n flex=\"1\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isLoading}\n >\n Cancel\n </Button>\n </HStack>\n </VStack>\n )\n}\n\nexport const WalletSidebarContent = ({ accentColor = 'blue' }: WalletSidebarContentProps) => {\n const [viewState, setViewState] = useState<ViewState>('balances')\n const [isDisconnecting, setIsDisconnecting] = useState(false)\n const [showCopiedTooltip, setShowCopiedTooltip] = useState(false)\n const [clickedBalance, setClickedBalance] = useState('')\n const copyButtonRef = useRef<HTMLButtonElement>(null)\n\n const {\n status,\n username,\n address,\n disconnect,\n connect,\n } = useChain(getChainName());\n const {assetsBalances, isLoading: assetsLoading} = useBalances();\n\n const balancesWithoutLps = useMemo(() => {\n if (assetsLoading) return [];\n\n return assetsBalances.filter(asset => !isLpDenom(asset.denom))\n }, [assetsLoading, assetsBalances])\n\n const nativeDenom = getChainNativeAssetDenom()\n const sortedBalances = useMemo(() => {\n return balancesWithoutLps.sort((a, b) => {\n // 1. Native denom always first\n if (a.denom === nativeDenom) return -1;\n if (b.denom === nativeDenom) return 1;\n\n // 2. Verified vs non-verified\n if (a.verified && !b.verified) return -1;\n if (!a.verified && b.verified) return 1;\n\n // 3. Positive balances vs zero balances\n const aHasBalance = a.amount.gt(0);\n const bHasBalance = b.amount.gt(0);\n\n if (aHasBalance && !bHasBalance) return -1;\n if (!aHasBalance && bHasBalance) return 1;\n\n // 4. If both have positive balances, sort by USD amount descending\n if (aHasBalance && bHasBalance) {\n return a.USDValue.gt(b.USDValue) ? -1 : 1;\n }\n\n // 5. For remaining items (both zero balance), maintain stable sort\n return 0;\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [balancesWithoutLps])\n\n const walletAddress = useMemo(() => stringTruncateFromCenter(address ?? \"\", 16), [address])\n\n const handleCopyAddress = () => {\n navigator.clipboard.writeText(address)\n setShowCopiedTooltip(true)\n setTimeout(() => setShowCopiedTooltip(false), 2000)\n }\n\n const handleCancel = useCallback(() => {\n setViewState('balances')\n setClickedBalance('')\n }, [])\n\n const onBalanceClick = useCallback((ticker: string) => {\n setClickedBalance(ticker)\n setViewState('send')\n }, [])\n\n const handleDisconnectAll = useCallback(async () => {\n setIsDisconnecting(true)\n try {\n console.log('Disconnected from all chains')\n } catch (error) {\n console.error('Error disconnecting:', error)\n } finally {\n disconnect()\n setIsDisconnecting(false)\n }\n }, [disconnect])\n\n const renderBalancesView = () => (\n <VStack gap=\"6\" align=\"stretch\">\n {/* Token Balances Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n Balances\n </Text>\n <VStack gap=\"2\" align=\"stretch\">\n {sortedBalances.map((bal) => (\n <BalanceItem key={bal.denom} asset={bal} onClick={() => onBalanceClick(bal.ticker)} accentColor={accentColor}/>\n ))}\n </VStack>\n </Box>\n\n {/* Quick Actions Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n Quick Actions\n </Text>\n <VStack gap=\"2\" align=\"stretch\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setViewState('send')}\n w=\"full\"\n disabled={assetsLoading}\n >\n Send\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n w=\"full\"\n onClick={() => openExternalLink('https://go.skip.build/?src_chain=1&src_asset=ethereum-native&dest_chain=beezee-1&dest_asset=ubze')}\n >\n <LuExternalLink />\n Cross-chain Deposit\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n w=\"full\"\n onClick={() => openExternalLink(`${getChainExplorerURL(getChainName())}/account/${address}`)}\n >\n <LuExternalLink />\n View on Explorer\n </Button>\n </VStack>\n </Box>\n\n {/* Disconnect Button */}\n <Box>\n <Button\n size=\"sm\"\n width=\"full\"\n variant=\"outline\"\n colorPalette=\"red\"\n onClick={handleDisconnectAll}\n loading={isDisconnecting}\n loadingText={\"Disconnecting...\"}\n >\n Disconnect Wallet\n </Button>\n </Box>\n </VStack>\n )\n\n const statusColor = useMemo(() => {\n switch (status) {\n case WalletState.Connected:\n return 'green'\n case WalletState.Connecting:\n return 'yellow'\n case WalletState.Disconnected:\n return 'red'\n default:\n return 'gray'\n }\n }, [status])\n\n return (\n <VStack gap=\"6\" align=\"stretch\">\n {/* Wallet Status - Always at top */}\n <Box>\n <InterchainWalletModal />\n <HStack justify=\"space-between\" mb=\"3\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Wallet Status\n </Text>\n <Badge colorPalette={statusColor} size=\"sm\">\n {status}\n </Badge>\n </HStack>\n {status === WalletState.Connected &&\n <Box\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={`${accentColor}.500/8`}\n gradientTo={`${accentColor}.600/8`}\n borderRadius=\"md\"\n borderWidth=\"1px\"\n borderColor={`${accentColor}.500/20`}\n >\n <Text fontSize=\"xs\" color=\"fg.muted\" mb=\"1\">\n {username ?? \"Address\"}\n </Text>\n <HStack justify=\"space-between\">\n <Text fontSize=\"sm\" fontFamily=\"mono\">\n {walletAddress}\n </Text>\n <Box position=\"relative\">\n <Button\n ref={copyButtonRef}\n size=\"xs\"\n variant=\"ghost\"\n onClick={handleCopyAddress}\n >\n <LuCopy />\n </Button>\n {showCopiedTooltip && (\n <Box\n position=\"absolute\"\n top=\"-35px\"\n right=\"0\"\n bgGradient=\"to-br\"\n gradientFrom={`${accentColor}.500`}\n gradientTo={`${accentColor}.600`}\n color=\"white\"\n px=\"3\"\n py=\"1.5\"\n borderRadius=\"md\"\n fontSize=\"xs\"\n fontWeight=\"semibold\"\n whiteSpace=\"nowrap\"\n zIndex=\"tooltip\"\n shadow=\"md\"\n >\n Copied!\n </Box>\n )}\n </Box>\n </HStack>\n </Box>\n }\n {status !== WalletState.Connected &&\n <Button\n size=\"sm\"\n variant=\"solid\"\n w=\"full\"\n onClick={connect}\n >\n Connect Wallet\n </Button>\n }\n </Box>\n\n <Separator />\n\n {/* Dynamic Content Based on View State */}\n {status === WalletState.Connected && viewState === 'balances' && renderBalancesView()}\n {status === WalletState.Connected && viewState === 'send' && <SendForm balances={sortedBalances} onClose={handleCancel} selectedTicker={clickedBalance} accentColor={accentColor}/>}\n </VStack>\n )\n}\n","'use client'\n\nimport { Button } from \"@chakra-ui/react\"\nimport { LuSettings } from \"react-icons/lu\"\nimport { Sidebar } from \"./sidebar/sidebar\"\nimport { SettingsSidebarContent } from \"./sidebar/settings-sidebar\"\n\ninterface SettingsToggleProps {\n accentColor?: string\n}\n\nexport function SettingsToggle({ accentColor }: SettingsToggleProps) {\n return (\n <Sidebar\n ariaLabel=\"Settings\"\n trigger={\n <Button variant=\"subtle\" size={{ base: 'sm', md: 'md' }}>\n <LuSettings />\n </Button>\n }\n >\n <SettingsSidebarContent accentColor={accentColor} />\n </Sidebar>\n )\n}\n","'use client'\n\nimport { Box, Text } from \"@chakra-ui/react\"\nimport { isTestnetChain } from \"../constants/chain\"\n\nexport const TestnetBanner = () => {\n if (!isTestnetChain()) {\n return null\n }\n\n return (\n <Box\n position=\"fixed\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n bg=\"red.600\"\n color=\"white\"\n textAlign=\"center\"\n py=\"1\"\n zIndex=\"banner\"\n fontSize=\"xs\"\n fontWeight=\"bold\"\n letterSpacing=\"wide\"\n >\n <Text>YOU ARE ON TESTNET</Text>\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["testnetChains","_a","chains","ibcAssetsList","BigNumber","import_bignumber","BigNumber","import_bignumber","ibcData","BigNumber","import_bignumber","BigNumber","import_bignumber","BigNumber","_a","import_bzejs","import_pagination","_a","module","_a","_a","_a","import_utils","DEFAULT_LIMIT","_a","_b","_a","_b","ibcData","_a","_a","_b","_a","_a","_b","import_query","DEFAULT_LIMIT","import_query","import_pagination","DEFAULT_LIMIT","import_bzejs","import_pagination","import_bignumber","_a","BigNumber","import_pagination","import_bignumber","BigNumber","_a","_b","rewards","r","import_react","import_react","import_tx","_a","_b","import_react","import_react","import_bignumber","import_react","BigNumber","import_react","import_bignumber","EPOCH_HOUR","EPOCH_DAY","EPOCH_WEEK","getEpochDurationByIdentifier","getCurrentEpoch","getHourEpochInfo","getWeekEpochInfo","getPeriodicEpochEndTime","BigNumber","getCurrentWeekEpochEndTime","getPeriodicWeekEpochEndTime","import_react","import_bignumber","BigNumber","import_react","import_bignumber","BigNumber","_a","import_react","import_react","import_bignumber","BigNumber","_a","_b","import_react","import_react","ChakraToaster","import_tx","import_react","import_bignumber","import_react","TxStatus","_a","BigNumber","import_react","_a","_b","import_react","import_jsx_runtime","_a","_b","import_react","import_lu","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lu","import_bignumber","import_bzejs","import_jsx_runtime","coin","BigNumber","_a","_b","recipient","selectedCoin","memo","import_react","import_lu","import_jsx_runtime","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/constants/chain.ts","../src/constants/assets.ts","../src/constants/testnet.ts","../src/storage/storage.ts","../src/constants/placeholders.ts","../src/types/asset.ts","../src/types/market.ts","../src/types/settings.ts","../src/types/events.ts","../src/utils/amount.ts","../src/utils/address.ts","../src/utils/strings.ts","../src/utils/charts.ts","../src/utils/debounce.ts","../src/utils/denom.ts","../src/utils/coins.ts","../src/utils/events.ts","../src/utils/formatter.ts","../src/utils/functions.ts","../src/utils/ibc.ts","../src/utils/liquidity_pool.ts","../src/utils/market.ts","../src/utils/number.ts","../src/utils/staking.ts","../src/utils/user_errors.ts","../src/constants/settings.ts","../src/storage/settings.ts","../src/query/client.ts","../src/query/burner.ts","../src/constants/endpoints.ts","../src/query/module.ts","../src/query/bank.ts","../src/query/epoch.ts","../src/utils/validation.ts","../src/utils/validator.ts","../src/utils/ws_rpc_client.ts","../src/constants/market.ts","../src/constants/ecosystem.ts","../src/constants/keplr.ts","../src/service/amm_router.ts","../src/service/blockchain_event_manager.ts","../src/query/supply.ts","../src/service/assets_factory.ts","../src/query/ibc.ts","../src/service/keplr.ts","../src/query/block.ts","../src/query/raffle.ts","../src/query/factory.ts","../src/query/liquidity_pools.ts","../src/query/markets.ts","../src/query/prices.ts","../src/query/rewards.ts","../src/query/staking.ts","../src/query/aggregator.ts","../src/contexts/assets_context.ts","../src/hooks/useAssets.ts","../src/hooks/useConnectionType.ts","../src/hooks/useSigningClient.ts","../src/utils/signing_client_setup.ts","../src/hooks/usePrices.ts","../src/hooks/useSettings.ts","../src/hooks/useBalances.ts","../src/hooks/useEpochs.ts","../src/hooks/useLiquidityPools.ts","../src/hooks/useAssetsValue.ts","../src/hooks/useFeeTokens.ts","../src/hooks/useMarkets.ts","../src/hooks/useToast.tsx","../src/components/toaster.tsx","../src/hooks/useTx.tsx","../src/hooks/useValidatorLogos.ts","../src/components/highlight.tsx","../src/components/sidebar/sidebar.tsx","../src/components/sidebar/settings-sidebar.tsx","../src/components/sidebar/wallet-sidebar.tsx","../src/components/settings-toggle.tsx","../src/components/testnet-banner.tsx"],"sourcesContent":["// === Configuration ===\n// Call these early in your app to configure the lib for your specific app\nexport { setStorageKeyVersion } from './storage/storage';\nexport { setDefaultTxMemo, getDefaultTxMemo } from './constants/placeholders';\n\n// === Types ===\nexport type { Asset, IBCData, IBCCounterparty, IbcTransitionMock, ChainAssets } from './types/asset';\nexport { LP_ASSETS_DECIMALS } from './types/asset';\nexport type { Balance, PrettyBalance } from './types/balance';\nexport type { TradeViewChart } from './types/charts';\nexport type { HistoryOrder, SwapHistory } from './types/aggregator';\nexport type { DenomTrace, CounterpartyChainForChannel } from './types/ibc';\nexport type { LiquidityPoolData, UserPoolData, SwapRouteResult } from './types/liquidity_pool';\nexport type { Market, MarketData, ActiveOrders } from './types/market';\nexport { ORDER_TYPE_BUY, ORDER_TYPE_SELL } from './types/market';\nexport type { PriceApiResponse } from './types/price';\nexport type { ValidationResult, BeeZeeEndpoints, AppSettings, EndpointValidationResults } from './types/settings';\nexport { CONNECTION_TYPE_WS, CONNECTION_TYPE_POLLING, CONNECTION_TYPE_NONE } from './types/settings';\nexport type { ConnectionType } from './types/settings';\nexport type {\n NativeStakingData, UserNativeStakingData, UserNativeStakingRewards,\n NativeUnbondingSummary, AddressRewardsStaking, ExtendedPendingUnlockParticipantSDKType\n} from './types/staking';\nexport type { AddressValidationResult } from './types/validation';\nexport type { BurnHistoryItem, NextBurn } from './types/burn';\nexport type { BlockResults } from './types/block';\nexport type {\n Attribute, TendermintEvent, InternalEvent, EventCallback\n} from './types/events';\nexport {\n CURRENT_WALLET_BALANCE_EVENT, ORDER_EXECUTED_EVENT, ORDER_BOOK_CHANGED_EVENT,\n SUPPLY_CHANGED_EVENT, SWAP_EXECUTED_EVENT, NEXT_BURN_CHANGED_EVENT,\n RAFFLE_CHANGED_EVENT, LOCK_CHANGED_EVENT, EPOCH_START_EVENT\n} from './types/events';\n\n// === Utils ===\nexport {\n toBigNumber, uAmountToAmount, uAmountToBigNumberAmount,\n amountToBigNumberUAmount, amountToUAmount, prettyAmount,\n priceToUPrice, priceToBigNumberUPrice, uPriceToPrice, uPriceToBigNumberPrice\n} from './utils/amount';\nexport { truncateAddress, validateBech32Address, validateBZEBech32Address } from './utils/address';\nexport {\n CHART_4H, CHART_1D, CHART_7D, CHART_30D, CHART_1Y,\n getNoOfIntervalsNeeded, getChartIntervalsLimit, getChartMinutes\n} from './utils/charts';\nexport { addDebounce, addMultipleDebounce, cancelDebounce } from './utils/debounce';\nexport {\n isFactoryDenom, isIbcDenom, isLpDenom, isNativeDenom,\n getDenomType, truncateDenom, isIbcAsset\n} from './utils/denom';\nexport {\n getMarketOrderBookChangedEvent, getMarketEventKey, mapEventAttributes,\n getEventKeyValue, getEventMarketId,\n isAddressTransfer, isOrderBookEvent, isOrderExecutedEvent, isSwapEvent,\n isCoinbaseEvent, isBurnEvent, isEpochStartEvent, getMintedAmount,\n} from './utils/events';\nexport {\n formatUsdAmount, shortNumberFormat, intlDateFormat,\n formatDate, formatTimeRemaining, formatTimeRemainingFromEpochs\n} from './utils/formatter';\nexport { sleep, openExternalLink } from './utils/functions';\nexport { coins, parseCoins } from './utils/coins';\nexport { canDepositFromIBC, canSendToIBC, denomOnFirstHopChainFromTrace, getIbcTransferTimeout } from './utils/ibc';\nexport {\n calculateUserPoolData, calculatePoolOppositeAmount, calculatePoolPrice,\n createPoolId, poolIdFromPoolDenom\n} from './utils/liquidity_pool';\nexport {\n createMarketId, calculateTotalAmount, calculatePricePerUnit,\n calculateAmountFromPrice, getMinAmount\n} from './utils/market';\nexport { sanitizeNumberInput, sanitizeIntegerInput, toPercentage } from './utils/number';\nexport {\n calcNativeStakingApr, parseUnbondingDays,\n calculateRewardsStakingApr, calculateRewardsStakingPendingRewards\n} from './utils/staking';\nexport { stringTruncateFromCenter, removeLeadingZeros } from './utils/strings';\nexport { prettyError } from './utils/user_errors';\nexport {\n validateRestEndpoint, validateRpcEndpoint, validateEndpoints, convertToWebSocketUrl\n} from './utils/validation';\nexport { getValidatorSupportedDenoms, getValidatorPageUrl, isPoolSupportedByValidator } from './utils/validator';\nexport { subscribeToBlockchainEvents } from './utils/ws_rpc_client';\n\n// === Constants ===\nexport {\n ASSET_TYPE_FACTORY, ASSET_TYPE_IBC, ASSET_TYPE_NATIVE, ASSET_TYPE_LP,\n VERIFIED_ASSETS, EXCLUDED_ASSETS, STABLE_COINS,\n getChainNativeAssetDenom, getUSDCDenom\n} from './constants/assets';\nexport {\n getChainId, getChainName, isTestnetChain, getChains, getChainByChainId,\n getChainByName, getWalletChainsNames, getAssetLists, getIBCAssetList,\n getChainAddressPrefix, getChainExplorerURL, getLockerAddress\n} from './constants/chain';\nexport {\n getRestURL, getRpcURL, getArchwayRpcURL, getOsmosisRpcUrl, getNobleRpcUrl,\n getJackalRpcUrl, getOmniFlixRpcUrl, getAtomOneRpcUrl, getArchwayRestURL,\n getOsmosisRestURL, getNobleRestURL, getJackalRestURL, getOmniFlixRestURL,\n getAtomOneRestURL, getAggregatorHost\n} from './constants/endpoints';\nexport { TOKEN_LOGO_PLACEHOLDER, BZE_CIRCLE_LOGO, DEFAULT_TX_MEMO } from './constants/placeholders';\nexport { SETTINGS_STORAGE_KEY, DEFAULT_SETTINGS, VALIDATION_ERRORS, getAppName } from './constants/settings';\nexport { EXCLUDED_MARKETS } from './constants/market';\nexport { ECOSYSTEM_MENU_LABEL, getEcosystemApps } from './constants/ecosystem';\nexport type { EcosystemApp } from './constants/ecosystem';\nexport { MAINNET_CHAIN_INFO_FALLBACK, TESTNET_CHAIN_INFO_FALLBACK } from './constants/keplr';\nexport { BZE_TESTNET_2_SUGGEST_CHAIN, BZE_TESTNET_NETWORK } from './constants/testnet';\n\n// === Storage ===\nexport {\n TTL_NO_EXPIRY, getFromLocalStorage, setInLocalStorage,\n removeFromLocalStorage, getKeyExpiry, setKeyExpiry\n} from './storage/storage';\nexport { getSettings, setSettings } from './storage/settings';\n\n// === Services ===\nexport { ammRouter } from './service/amm_router';\nexport { blockchainEventManager } from './service/blockchain_event_manager';\nexport { getChainAssets } from './service/assets_factory';\nexport { keplrSuggestChain } from './service/keplr';\n\n// === Query ===\nexport { getRestClient, createRestClient, getPageRequestWithLimit } from './query/client';\nexport { getAddressBalances, getLockedBalances } from './query/bank';\nexport { getBurnerParams, getBurnerParamsWithClient, getAllBurnedCoins, getNextBurning } from './query/burner';\nexport { getBlockDetailsByHeight, getBlockTimeByHeight, getBlockResults } from './query/block';\nexport { getHardcodedLockAddress, getBurnerModuleAddress, getRaffleModuleAddress, getModuleAddress } from './query/module';\nexport { getRaffles, getRaffleWinners, checkAddressWonRaffle } from './query/raffle';\nexport { getAllSupply, getAllSupplyMetadata } from './query/supply';\nexport {\n getEpochsInfo, getCurrentEpoch, getHourEpochInfo, getWeekEpochInfo,\n getCurrentWeekEpochEndTime, getPeriodicWeekEpochEndTime, getPeriodicEpochEndTime,\n getEpochDurationByIdentifier\n} from './query/epoch';\nexport { getFactoryDenomAdminAddress } from './query/factory';\nexport { getIBCTraces, getHashIBCTrace, counterpartyChainForChannel } from './query/ibc';\nexport { getLiquidityPools, getLiquidityPool } from './query/liquidity_pools';\nexport {\n getMarkets, getMarketBuyOrders, getMarketSellOrders, getMarketOrders,\n getMarketHistory, getAddressMarketOrders, getAddressFullMarketOrders, getMarketOrder\n} from './query/markets';\nexport { getBZEUSDPrice } from './query/prices';\nexport {\n getStakingRewards, getAddressPendingUnlock, getPendingUnlockParticipants,\n getStakingRewardParticipantByAddress, getAddressStakingRewards\n} from './query/rewards';\nexport {\n getAddressDelegations, getAddressNativeDelegatedBalance,\n getAddressUnbondingDelegations, getAddressUnbondingDelegationsSummary,\n getAddressRewards, getAddressNativeTotalRewards,\n getAnnualProvisions, getDistributionParams, getStakingParams, getStakingPool,\n getValidators, getDelegatorValidators, getDelegatorDelegations, getValidatorDelegatorRewards\n} from './query/staking';\nexport {\n getAllTickers, getMarketOrdersHistory, getAddressHistory,\n getTradingViewIntervals, getAddressSwapHistory\n} from './query/aggregator';\n\n// === Context ===\nexport { AssetsContext } from './contexts/assets_context';\nexport type { AssetsContextType } from './contexts/assets_context';\n\n// === Hooks ===\nexport { useAssetsContext, useAssets, useAsset, useAssetsManager, useIBCChains } from './hooks/useAssets';\nexport { useConnectionType } from './hooks/useConnectionType';\nexport { useSigningClient } from './hooks/useSigningClient';\nexport { useAssetPrice } from './hooks/usePrices';\nexport { useSettings } from './hooks/useSettings';\nexport { useBalances, useBalance } from './hooks/useBalances';\nexport type { AssetBalance } from './hooks/useBalances';\nexport { useEpochs, useEpochsManager } from './hooks/useEpochs';\nexport { useLiquidityPools, useAssetLiquidityPools, useLiquidityPool } from './hooks/useLiquidityPools';\nexport { useAssetsValue } from './hooks/useAssetsValue';\nexport { useFeeTokens } from './hooks/useFeeTokens';\nexport { useMarkets, useAssetMarkets, useMarket, useMarketsManager } from './hooks/useMarkets';\nexport { useToast } from './hooks/useToast';\nexport { useSDKTx, useBZETx, useIBCTx, TxStatus } from './hooks/useTx';\nexport type { TxOptions } from './hooks/useTx';\nexport { useValidatorLogos } from './hooks/useValidatorLogos';\n\n// === Components ===\nexport { Toaster } from './components/toaster';\nexport { HighlightText } from './components/highlight';\nexport { Sidebar } from './components/sidebar/sidebar';\nexport { SettingsSidebarContent } from './components/sidebar/settings-sidebar';\nexport { WalletSidebarContent } from './components/sidebar/wallet-sidebar';\nexport { SettingsToggle } from './components/settings-toggle';\nexport { TestnetBanner } from './components/testnet-banner';\n","\nimport { chains as testnetChains } from \"chain-registry/testnet\";\nimport {getAssetLists as ibcAssetsList} from \"@chain-registry/utils\";\nimport {BZE_TESTNET_2_SUGGEST_CHAIN, BZE_TESTNET_NETWORK} from \"./testnet\";\nimport {Chain} from \"@chain-registry/types\";\nimport {assetLists, chains, ibcData} from \"chain-registry\";\n\nexport const getChainId = (): string => {\n return process.env.NEXT_PUBLIC_CHAIN_ID || 'beezee-1'\n}\n\nexport const getChainName = (): string => {\n return process.env.NEXT_PUBLIC_CHAIN_NAME || 'beezee'\n}\n\nexport const isTestnetChain = (): boolean => {\n const isTestnet = process.env.NEXT_PUBLIC_CHAIN_IS_TESTNET\n return isTestnet === 'true' || isTestnet === '1'\n}\n\nexport const getChains = () => {\n let localChains = chains\n if (isTestnetChain()) {\n //@ts-expect-error - testnet chains are not in the chain-registry package\n localChains = [...testnetChains, BZE_TESTNET_2_SUGGEST_CHAIN]\n }\n\n return localChains\n}\n\nexport const getChainByChainId = (chainId: string) => {\n let localChains = chains\n if (isTestnetChain()) {\n //@ts-expect-error - testnet chains are not in the chain-registry package\n localChains = [...testnetChains, BZE_TESTNET_2_SUGGEST_CHAIN]\n }\n\n return localChains.find(c => c.chainId?.toLowerCase() === chainId.toLowerCase())\n}\n\nexport const getChainByName = (name: string) => {\n let localChains = chains\n if (isTestnetChain()) {\n //@ts-expect-error - testnet chains are not in the chain-registry package\n localChains = [...testnetChains, BZE_TESTNET_2_SUGGEST_CHAIN]\n }\n\n return localChains.find(c => c.chainName.toLowerCase() === name.toLowerCase())\n}\n\nexport const getWalletChainsNames = () => {\n const localChains = getChains()\n\n const envChainsNames = process.env.NEXT_PUBLIC_WALLET_CHAINS_NAMES\n if (!envChainsNames) {\n return localChains.filter(c => c.chainId === getChainId())\n }\n\n const split = envChainsNames.split(',')\n\n return appChainFirst(localChains.filter(c => split.includes(c.chainName)))\n}\n\nconst appChainFirst = (chains: Chain[]) => {\n return chains.sort((a, b) => a.chainId === getChainId() ? -1 : b.chainId === getChainId() ? 1 : 0)\n}\n\nexport const getAssetLists = () => {\n let localAssetLists = assetLists\n if (isTestnetChain()) {\n //@ts-expect-error - testnet asset lists are not in the chain-registry package\n localAssetLists = BZE_TESTNET_NETWORK.assets\n }\n\n return localAssetLists\n}\n\nexport const getIBCAssetList = () => {\n const all = ibcAssetsList(getChainName(), ibcData, getAssetLists())\n\n return all.length > 0 ? all[0].assets : []\n}\n\nexport const getChainAddressPrefix = () => {\n return process.env.NEXT_PUBLIC_CHAIN_ADDRESS_PREFIX || 'bze'\n}\n\nexport const getChainExplorerURL = (chainName: string): string => {\n if (process.env.NEXT_PUBLIC_EXPLORER_URL) {\n return `${process.env.NEXT_PUBLIC_EXPLORER_URL}/${chainName}`\n }\n\n return `https://explorer.chaintools.tech/${chainName}`\n}\n\nexport const getLockerAddress = (): string => {\n return process.env.NEXT_PUBLIC_LOCKER_ADDRESS || 'bze1pc5zjcvhx3e8l305zjl72grytfa30r5mdypmw4'\n}\n\nexport const getGasMultiplier = (): number => {\n const val = parseFloat(process.env.NEXT_PUBLIC_GAS_MULTIPLIER || '');\n return isNaN(val) || val <= 0 ? 1.5 : val;\n}\n","\nexport const ASSET_TYPE_FACTORY = \"Factory\"\nexport const ASSET_TYPE_IBC = \"IBC\"\nexport const ASSET_TYPE_NATIVE = \"Native\"\nexport const ASSET_TYPE_LP = \"LP\"\n\nexport const VERIFIED_ASSETS: { [key: string]: boolean } = {\n \"factory/testbz1w9vva0muctcrmd9xgret9x4wasw2rrflsdkwfs/faneatiku2\": true,\n \"factory/testbz1z3mkcr2jz424w6m49frgjmy9uhlrx69p4cvrgf/vidulum\": true,\n \"factory/testbz1z3mkcr2jz424w6m49frgjmy9uhlrx69p4cvrgf/bitcoinz\": true,\n \"ubze\": true,\n \"utbz\": true,\n \"factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl\": true,\n \"factory/bze15pqjgk4la0mfphwddce00d05n3th3u66n3ptcv/2MARS\": true,\n \"factory/bze12gyp30f29zg26nuqrwdhl26ej4q066pt572fhm/GGE\": true,\n}\n\nexport const EXCLUDED_ASSETS: { [key: string]: boolean } = {\n \"factory/testbz1w9vva0muctcrmd9xgret9x4wasw2rrflsdkwfs/faneatiku1\": false,\n \"factory/bze1972aqfzdg29ugjln74edx0xvcg4ehvysjptk77/1000000000\": true,\n \"ibc/689DD6F80E4DBCE14877462B182504037FAEAD0699D5804A7F5CB328D33ED24B\": true,\n \"factory/bze1f0qgels0eu96ev6a67znu70q7rquy9eragn8nw/ucorey\": true,\n}\n\nexport const STABLE_COINS: { [key: string]: boolean } = {\n \"factory/testbz1z3mkcr2jz424w6m49frgjmy9uhlrx69p4cvrgf/uusdt\": true,\n \"factory/bze1z3mkcr2jz424w6m49frgjmy9uhlrx69phqwg3l/testusd\": true,\n \"ibc/6490A7EAB61059BFC1CDDEB05917DD70BDF3A611654162A1A47DB930D40D8AF4\": true,\n}\n\nexport const getChainNativeAssetDenom = (): string => {\n return process.env.NEXT_PUBLIC_CHAIN_NATIVE_ASSET_DENOM || 'ubze'\n}\n\nexport const getUSDCDenom = (): string => {\n return process.env.NEXT_PUBLIC_USDC_IBC_DENOM || ''\n}\n","import {getChainNativeAssetDenom} from \"./assets\";\n\nexport const BZE_TESTNET_2_SUGGEST_CHAIN = {\n chainId: \"bzetestnet-3\",\n chainType: \"cosmos\",\n chainName: \"BeeZee Testnet 3\",\n prettyName: 'BeeZee Testnet 3',\n networkType: 'mainnet',\n bech32Prefix: \"bze\",\n status: \"live\",\n slip44: 118,\n logoURIs: {\n svg: 'https://raw.githubusercontent.com/cosmos/chain-registry/master/beezee/images/bze.svg',\n },\n fees: {\n feeTokens: [\n {\n denom: getChainNativeAssetDenom(),\n fixedMinGasPrice: 0.01,\n lowGasPrice: 0.01,\n averageGasPrice: 0.025,\n highGasPrice: 0.04\n }\n ]\n },\n keyAlgos: [\n \"secp256k1\"\n ],\n staking: {\n stakingTokens: [\n {\n denom: getChainNativeAssetDenom()\n }\n ]\n },\n explorers: [\n {\n \"kind\": \"ping.pub\",\n \"url\": \"https://testnet.explorer.thesilverfox.pro/beezee\",\n \"tx_page\": \"https://testnet.explorer.thesilverfox.pro/beezee/tx/${txHash}\"\n }\n ],\n codebase: {\n \"git_repo\": \"https://github.com/bze-alphateam/bze\",\n \"recommended_version\": \"v5.1.2\",\n \"compatible_versions\": [\n \"v5.1.2\"\n ],\n \"binaries\": {\n \"darwin/amd64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-darwin-amd64.tar.gz\",\n \"darwin/arm64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-darwin-arm64.tar.gz\",\n \"linux/amd64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-linux-amd64.tar.gz\",\n \"linux/arm64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-linux-arm64.tar.gz\",\n \"windows/amd64\": \"https://github.com/bze-alphateam/bze/releases/download/v5.1.2/bze-5.1.2-win64.zip\"\n },\n \"genesis\": {\n \"genesis_url\": \"https://raw.githubusercontent.com/bze-alphateam/bze/main/genesis.json\"\n }\n },\n apis: {\n \"rpc\": [\n {\n \"address\": \"https://testnet-rpc.getbze.com\",\n \"provider\": \"AlphaTeam\"\n }\n ],\n \"rest\": [\n {\n \"address\": \"https://testnet.getbze.com\",\n \"provider\": \"AlphaTeam\"\n },\n ],\n \"grpc\": [\n {\n \"address\": \"grpc.getbze.com:9999\",\n \"provider\": \"AlphaTeam\"\n }\n ]\n }\n};\n\nexport const BZE_TESTNET_NETWORK = {\n base: {\n explorerBaseUrl: 'https://explorer.getbze.com/bze%20testnet',\n rpcUrl: 'https://testnet-rpc.getbze.com',\n restUrl: 'https://testnet.getbze.com',\n chainName: BZE_TESTNET_2_SUGGEST_CHAIN.chainName,\n },\n chain: [BZE_TESTNET_2_SUGGEST_CHAIN],\n assets: [\n {\n chainName: BZE_TESTNET_2_SUGGEST_CHAIN.chainName,\n assets: [\n {\n \"description\": \"BeeZee native blockchain\",\n \"typeAsset\": \"sdk.coin\",\n \"denomUnits\": [\n {\n \"denom\": getChainNativeAssetDenom(),\n \"exponent\": 0\n },\n {\n \"denom\": \"TBZE\",\n \"exponent\": 6\n }\n ],\n \"base\": getChainNativeAssetDenom(),\n \"name\": \"BeeZee\",\n \"display\": \"TBZE\",\n \"symbol\": \"TBZE\",\n \"logoURIs\": {\n \"svg\": \"https://raw.githubusercontent.com/cosmos/chain-registry/master/beezee/images/bze.svg\",\n \"png\": \"https://raw.githubusercontent.com/cosmos/chain-registry/master/beezee/images/bze.png\"\n },\n \"coingeckoId\": \"bzedge\"\n },\n {\n \"description\": \"Lumen\",\n \"typeAsset\": \"sdk.coin\",\n \"denomUnits\": [\n {\n \"denom\": \"ibc/9DA252F9F9C86132CC282EA431DFB7DE7729501F6DC9A3E0F50EC8C6EE380CC7\",\n \"exponent\": 0,\n \"aliases\": []\n },\n {\n \"denom\": \"LMN\",\n \"exponent\": 6,\n \"aliases\": []\n },\n ],\n \"base\": \"ibc/9DA252F9F9C86132CC282EA431DFB7DE7729501F6DC9A3E0F50EC8C6EE380CC7\",\n \"display\": \"LMN\",\n \"name\": \"Lumen\",\n \"symbol\": \"LMN\",\n \"logoURIs\": {\n \"png\": \"https://raw.githubusercontent.com/cosmos/chain-registry/master/lumen/images/lmn.png\"\n }\n },\n {\n \"description\": \"Vidulum app token\",\n \"typeAsset\": \"sdk.coin\",\n \"denomUnits\": [\n {\n \"denom\": \"factory/bze1z3mkcr2jz424w6m49frgjmy9uhlrx69phqwg3l/vidulum\",\n \"exponent\": 0,\n \"aliases\": []\n },\n {\n \"denom\": \"VDL\",\n \"exponent\": 6,\n \"aliases\": []\n },\n ],\n \"base\": \"factory/bze1z3mkcr2jz424w6m49frgjmy9uhlrx69phqwg3l/vidulum\",\n \"display\": \"VDL\",\n \"name\": \"Vidulum\",\n \"symbol\": \"VDL\",\n \"logoURIs\": {\n \"png\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl.png\"\n }\n },\n ]\n }\n ]\n}\n","'use client';\n\nimport {getChainId} from \"../constants/chain\";\n\nexport const TTL_NO_EXPIRY = 0;\n\n// Configurable storage key prefix - apps set this via setStorageKeyVersion()\nlet _storageKeyVersion = '1';\n\nexport const setStorageKeyVersion = (version: string) => {\n _storageKeyVersion = version;\n}\n\nexport const getFromLocalStorage = (key: string): string | null => {\n if (typeof window === 'undefined') return null;\n\n try {\n const cachedItem = localStorage.getItem(prefixedKey(key));\n if (cachedItem) {\n const item = JSON.parse(cachedItem);\n const now = new Date().getTime();\n if (item.expiry === TTL_NO_EXPIRY || now < item.expiry) {\n return item.data;\n }\n\n localStorage.removeItem(prefixedKey(key));\n }\n } catch (error) {\n console.error('Failed to get data from localStorage:', error);\n }\n\n return null;\n}\n\nexport const setInLocalStorage = (key: string, data: string, ttl: number): boolean => {\n if (typeof window === 'undefined') return false;\n\n try {\n if (ttl < 0) ttl = 0\n\n const item = {\n data: data,\n expiry: TTL_NO_EXPIRY\n };\n\n if (ttl > 0) {\n const now = new Date().getTime();\n item.expiry = now + (ttl * 1000)\n }\n\n localStorage.setItem(prefixedKey(key), JSON.stringify(item));\n\n return true;\n } catch (error) {\n console.error('Failed to set data in localStorage:', error);\n }\n\n return false;\n}\n\nexport const removeFromLocalStorage = (key: string): void => {\n if (typeof window === 'undefined') return;\n try {\n localStorage.removeItem(prefixedKey(key));\n } catch (error) {\n console.error('Failed to remove data from localStorage:', error);\n }\n}\n\nexport const getKeyExpiry = (key: string): Date | null => {\n if (typeof window === 'undefined') return null;\n\n try {\n const cachedItem = localStorage.getItem(prefixedKey(key));\n if (cachedItem) {\n const item = JSON.parse(cachedItem);\n if (item.expiry > TTL_NO_EXPIRY) {\n return new Date(item.expiry);\n }\n }\n } catch (error) {\n console.error('Failed to get data from localStorage:', error);\n }\n\n return null;\n}\n\nexport const setKeyExpiry = (key: string, expiry: Date): boolean => {\n if (typeof window === 'undefined') return false;\n\n try {\n const cachedItem = localStorage.getItem(prefixedKey(key));\n if (cachedItem) {\n const item = JSON.parse(cachedItem);\n if (item) {\n item.expiry = expiry.getTime();\n localStorage.setItem(prefixedKey(key), JSON.stringify(item));\n\n return true;\n }\n }\n } catch (error) {\n console.error('Failed to set data in localStorage:', error);\n }\n\n return false;\n}\n\n\nconst prefixedKey = (key: string): string => {\n return `${_storageKeyVersion}-${getChainId()}:${key}`;\n}\n","\nexport const TOKEN_LOGO_PLACEHOLDER = '/images/token.svg';\nexport const BZE_CIRCLE_LOGO = '/images/bze_alternative_512x512.png';\n\n// Apps should override this with their own memo via setDefaultTxMemo()\nlet _defaultTxMemo = 'getbze.com';\n\nexport const DEFAULT_TX_MEMO = _defaultTxMemo;\n\nexport const setDefaultTxMemo = (memo: string) => {\n _defaultTxMemo = memo;\n}\n\nexport const getDefaultTxMemo = (): string => {\n return _defaultTxMemo;\n}\n","\nexport const LP_ASSETS_DECIMALS = 12\n\nexport interface Asset {\n type: string; //ibc, factory or native\n denom: string; //base denom (blockchain denom)\n decimals: number; //exponent\n name: string;\n ticker: string;\n logo: string; //logo or placeholder\n stable: boolean; //is stablecoin\n verified: boolean; //is verified\n supply: bigint; //total supply on BZE chain\n IBCData?: IBCData;\n}\n\nexport interface IBCData {\n chain: IBCChainData;\n counterparty: IBCCounterparty;\n}\n\nexport interface IBCCounterparty {\n chainName: string;\n chainPrettyName: string;\n channelId: string;\n baseDenom: string;\n}\n\ninterface IBCChainData {\n channelId: string;\n}\n\n// we created a custom interface that we can use to mock the traces of type IbcTransition\n// this is needed because the IbcTransition type from chain-registry/utils is not actually what we get from the chain-registry\n// the IbcTransition type has fields camelCase while the chain-registry returns fields with snake_case\nexport interface IbcTransitionMock {\n type: \"ibc\";\n counterparty: {\n chain_name: string;\n base_denom: string;\n channel_id: string;\n };\n chain: {\n channel_id: string;\n path?: string;\n };\n}\n\nexport interface ChainAssets {\n assets: Map<string, Asset>;\n ibcData: Map<string, IBCData>;\n}\n","import {AggregatedOrderSDKType, MarketSDKType} from \"@bze/bzejs/bze/tradebin/store\";\n\nexport const ORDER_TYPE_BUY = 'buy';\nexport const ORDER_TYPE_SELL = 'sell';\n\nexport type Market = MarketSDKType\n\nexport interface MarketData {\n base: string;\n quote: string;\n market_id: string;\n last_price: number;\n base_volume: number;\n quote_volume: number;\n bid: number;\n ask: number;\n high: number;\n low: number;\n open_price: number;\n change: number;\n}\n\nexport interface ActiveOrders {\n buyOrders: AggregatedOrderSDKType[];\n sellOrders: AggregatedOrderSDKType[];\n}\n","// Validation result type\nexport interface ValidationResult {\n isValid: boolean\n error?: string\n}\n\n// BeeZee endpoint configuration\nexport interface BeeZeeEndpoints {\n restEndpoint: string\n rpcEndpoint: string\n}\n\n// Main application settings\nexport interface AppSettings {\n endpoints: BeeZeeEndpoints\n preferredFeeDenom?: string // User's preferred token for paying fees\n}\n\n// Validation results for both endpoints\nexport interface EndpointValidationResults {\n rest?: ValidationResult\n rpc?: ValidationResult\n}\n\nexport const CONNECTION_TYPE_WS = 2;\nexport const CONNECTION_TYPE_POLLING = 1;\nexport const CONNECTION_TYPE_NONE = 0;\n\nexport type ConnectionType = 0 | 1 | 2;\n","export interface Attribute {\n key: string;\n value: string;\n index: boolean;\n}\n\nexport interface TendermintEvent {\n type: string;\n attributes: Attribute[];\n}\n\nexport interface InternalEvent {\n marketId?: string;\n blockHeight?: number;\n}\n\nexport type EventCallback = (event?: InternalEvent) => void;\n\nexport const CURRENT_WALLET_BALANCE_EVENT = \"current_wallet_balance\";\nexport const ORDER_EXECUTED_EVENT = \"order_executed\";\nexport const ORDER_BOOK_CHANGED_EVENT = \"order_book_changed\";\nexport const SUPPLY_CHANGED_EVENT = \"supply_changed\";\nexport const SWAP_EXECUTED_EVENT = \"swap_executed\";\nexport const NEXT_BURN_CHANGED_EVENT = \"next_burn_changed\";\nexport const RAFFLE_CHANGED_EVENT = \"raffle_changed\";\nexport const LOCK_CHANGED_EVENT = \"lock_changed\";\nexport const EPOCH_START_EVENT = \"epoch_start\";\n","\"use client\";\n\nimport BigNumber from 'bignumber.js';\n\nconst MAX_PRICE_DECIMALS = 14;\n\nexport function toBigNumber(amount: string | number | BigNumber | bigint): BigNumber {\n if (amount instanceof BigNumber) {\n return amount;\n }\n\n return new BigNumber(amount);\n}\n\nexport function uAmountToAmount(amount: string | number | BigNumber | bigint | undefined, noOfDecimals: number): string {\n return uAmountToBigNumberAmount(amount, noOfDecimals).toString();\n}\n\nexport function uAmountToBigNumberAmount(amount: string | number | BigNumber | bigint | undefined, noOfDecimals: number): BigNumber {\n return toBigNumber(amount || 0)\n .shiftedBy((-1) * noOfDecimals)\n .decimalPlaces(noOfDecimals || 6)\n}\n\nexport function amountToBigNumberUAmount(amount: string | number | BigNumber | bigint, noOfDecimals: number): BigNumber {\n return toBigNumber(amount)\n .shiftedBy(noOfDecimals)\n .decimalPlaces(noOfDecimals || 6);\n}\n\nexport function amountToUAmount(amount: string | number | BigNumber | bigint, noOfDecimals: number): string {\n return amountToBigNumberUAmount(amount, noOfDecimals).toString();\n}\n\nexport function prettyAmount(amount: number | string | BigNumber | bigint): string {\n const num = toBigNumber(amount)\n if (num.isNaN()) {\n return \"0\";\n }\n\n if (num.lt(1) && num.gt(0)) {\n return num.toFixed(6);\n }\n\n return Intl.NumberFormat('en', {notation: 'standard'}).format(num.toNumber());\n}\n\nexport const priceToUPrice = (price: BigNumber, quoteExponent: number, baseExponent: number): string => {\n return priceToBigNumberUPrice(price, quoteExponent, baseExponent).toFixed(MAX_PRICE_DECIMALS).toString();\n}\n\nexport const priceToBigNumberUPrice = (price: BigNumber | number | string, quoteExponent: number, baseExponent: number): BigNumber => {\n price = toBigNumber(price);\n\n return price.multipliedBy(Math.pow(10, (quoteExponent - baseExponent)));\n}\n\nexport const uPriceToPrice = (price: BigNumber | string, quoteExponent: number, baseExponent: number): string => {\n return uPriceToBigNumberPrice(toBigNumber(price), quoteExponent, baseExponent).toString()\n}\n\nexport const uPriceToBigNumberPrice = (price: BigNumber|number|bigint|string, quoteExponent: number, baseExponent: number): BigNumber => {\n const converted = toBigNumber(price);\n\n return converted.multipliedBy(Math.pow(10, (baseExponent - quoteExponent)));\n}\n","import {fromBech32} from \"@interchainjs/encoding\";\nimport {AddressValidationResult} from \"../types/validation\";\nimport {getChainAddressPrefix} from \"../constants/chain\";\nimport {stringTruncateFromCenter} from \"./strings\";\n\nexport const truncateAddress = (address: string): string => {\n return stringTruncateFromCenter(address, 12);\n}\n\nexport const validateBech32Address = (address: string, prefix: string): AddressValidationResult => {\n const result = {\n isValid: false,\n message: \"\"\n }\n\n try {\n const { prefix: addressPrefix } = fromBech32(address);\n if (addressPrefix === prefix) {\n result.isValid = true;\n return result;\n }\n\n result.message = `This address is from another network (${addressPrefix}). Please use an address from the destination network (${prefix}).`\n } catch (e) {\n console.error(\"invalid address \", e);\n result.message = \"Invalid address\"\n }\n\n return result;\n}\n\nexport const validateBZEBech32Address = (address: string) => validateBech32Address(address, getChainAddressPrefix());\n","\nexport function stringTruncateFromCenter(str: string, maxLength: number) {\n const midChar = '\\u2026'; // character to insert into the center of the result\n\n if (str.length <= maxLength) return str;\n\n // length of beginning part\n const left = Math.ceil(maxLength / 2);\n\n // start index of ending part\n const right = str.length - Math.floor(maxLength / 2) + 1;\n\n return str.substring(0, left) + midChar + str.substring(right);\n}\n\nexport function removeLeadingZeros(str: string): string {\n return str.replace(/^0+/, '') || '0';\n}\n","//chart periods\nexport const CHART_4H = '4H';\nexport const CHART_1D = '1D';\nexport const CHART_7D = '7D';\nexport const CHART_30D = '30D';\nexport const CHART_1Y = '1Y';\n\nexport function getNoOfIntervalsNeeded(chart: string) {\n switch (chart) {\n case CHART_4H:\n return 12 * 4;\n case CHART_1D:\n return 4 * 24;\n case CHART_7D:\n return 24 * 7;\n case CHART_30D:\n return 6 * 30;\n case CHART_1Y:\n return 365;\n default:\n return 0;\n }\n}\n\nexport function getChartIntervalsLimit(chart: string) {\n switch (chart) {\n case CHART_4H:\n return (12 * 24) * 7;\n case CHART_1D:\n return (4 * 24) * 30;\n case CHART_7D:\n return 24 * 90;\n case CHART_30D:\n return 6 * 365;\n case CHART_1Y:\n return 365 * 3;\n default:\n return 12;\n }\n}\n\nexport function getChartMinutes(chart: string) {\n switch (chart) {\n case CHART_4H:\n return 5;\n case CHART_1D:\n return 15;\n case CHART_7D:\n return 60;\n case CHART_30D:\n return 240;\n case CHART_1Y:\n return 1440;\n default:\n return 5;\n }\n}\n","const debounces: Map<string, NodeJS.Timeout> = new Map();\n\nexport async function addMultipleDebounce(name: string, delay: number, callback: () => void, times: number): Promise<void> {\n for (let index = 1; index <= times; index++) {\n addDebounce(`${name}-${index}`, delay * index, callback);\n }\n}\n\nexport async function addDebounce(name: string, delay: number, callback: () => void): Promise<void> {\n cancelDebounce(name);\n const newTimer = setTimeout(() => {\n callback();\n }, delay);\n\n debounces.set(name, newTimer);\n}\n\nexport async function cancelDebounce(name: string): Promise<void> {\n const timer = debounces.get(name);\n if (timer) {\n clearTimeout(timer);\n debounces.delete(name);\n }\n}\n","import {stringTruncateFromCenter} from \"./strings\";\nimport {\n ASSET_TYPE_FACTORY,\n ASSET_TYPE_IBC,\n ASSET_TYPE_LP,\n ASSET_TYPE_NATIVE,\n getChainNativeAssetDenom\n} from \"../constants/assets\";\nimport {Asset} from \"../types/asset\";\n\nconst MAX_DENOM_LEN = 8;\n\nexport const isFactoryDenom = (denom: string) => denom.startsWith(\"factory/\");\nexport const isIbcDenom = (denom: string) => denom.startsWith(\"ibc/\");\nexport const isLpDenom = (denom: string) => denom.startsWith(\"ulp_\");\nexport const isNativeDenom = (denom: string) => getChainNativeAssetDenom() === denom;\n\nexport const getDenomType = (denom: string) => isFactoryDenom(denom) ? ASSET_TYPE_FACTORY : isIbcDenom(denom) ? ASSET_TYPE_IBC: isLpDenom(denom) ? ASSET_TYPE_LP : ASSET_TYPE_NATIVE;\n\nexport function truncateDenom(denom: string) {\n return stringTruncateFromCenter(denom, MAX_DENOM_LEN);\n}\n\nexport const isIbcAsset = (asset: Asset): boolean => asset.type === ASSET_TYPE_IBC;\n","import {Coin} from \"@bze/bzejs/cosmos/base/v1beta1/coin\";\n\n/**\n * Creates a coin. Mirrors cosmjs `coin()` from @cosmjs/amino.\n */\nexport const coin = (amount: number | string, denom: string): Coin => {\n let outAmount: string;\n if (typeof amount === \"number\") {\n if (!Number.isInteger(amount) || amount < 0 || amount > Number.MAX_SAFE_INTEGER) {\n throw new Error(\"Given amount is not a safe integer. Consider using a string instead to overcome the limitations of JS numbers.\");\n }\n outAmount = String(amount);\n } else {\n if (!amount.match(/^[0-9]+$/)) {\n throw new Error(\"Invalid unsigned integer string format\");\n }\n outAmount = amount.replace(/^0*/, \"\") || \"0\";\n }\n return {amount: outAmount, denom};\n};\n\n/**\n * Creates a list of coins with one element. Mirrors cosmjs `coins()` from @cosmjs/amino.\n */\nexport const coins = (amount: number | string, denom: string): Coin[] => {\n return [coin(amount, denom)];\n};\n\n/**\n * Parses a coins string like \"819966000ucosm,700000000ustake\" into a Coin array.\n * Mirrors cosmjs `parseCoins()` from @cosmjs/amino.\n * Denom regex follows Cosmos SDK 0.53 (cosmos-sdk/types/coin.go).\n */\nexport const parseCoins = (input: string): Coin[] => {\n return input\n .replace(/\\s/g, \"\")\n .split(\",\")\n .filter(Boolean)\n .map((part) => {\n const match = part.match(/^([0-9]+)([a-zA-Z][a-zA-Z0-9/:._-]{2,127})$/);\n if (!match) throw new Error(\"Got an invalid coin string\");\n return {\n amount: match[1].replace(/^0+/, \"\") || \"0\",\n denom: match[2],\n };\n });\n};\n","import {Attribute, ORDER_BOOK_CHANGED_EVENT, TendermintEvent} from \"../types/events\";\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\nimport {coins, parseCoins} from \"./coins\";\n\nexport const getMarketOrderBookChangedEvent = (marketId: string) => getMarketEventKey(ORDER_BOOK_CHANGED_EVENT, marketId)\nexport const getMarketEventKey = (eventType: string, marketId: string) => `${eventType}:${marketId}`\n\nexport const mapEventAttributes = (attributes: Attribute[]): Record<string, string> => {\n return attributes.reduce((acc, attr) => ({ ...acc, [attr.key]: attr.value.replace('\\\"', '').replace('\\\"', '') }), {});\n}\n\nexport const getEventKeyValue = (event: TendermintEvent, key: string): string | undefined => {\n return event.attributes.find(attribute => attribute.key === key)?.value;\n}\n\nexport const getEventMarketId = (event: TendermintEvent): string | undefined => {\n return getEventKeyValue(event, 'market_id')?.replaceAll('\"', '');\n}\n\nexport const isAddressTransfer = (address: string, event: TendermintEvent): boolean => {\n if (address === '' || event.type !== 'transfer') return false;\n return event.attributes.find(attribute => attribute.value === address) !== undefined;\n}\n\nexport const isOrderBookEvent = (event: TendermintEvent): boolean => {\n return event.type.includes('bze.tradebin.Order');\n}\n\nexport const isOrderExecutedEvent = (event: TendermintEvent): boolean => {\n return event.type.includes('bze.tradebin.OrderExecutedEvent');\n}\n\nexport const isSwapEvent = (event: TendermintEvent): boolean => {\n return event.type.includes('bze.tradebin.SwapEvent');\n}\n\nexport const isCoinbaseEvent = (event: TendermintEvent): boolean => {\n return event.type.includes('coinbase');\n}\n\nexport const isBurnEvent = (event: TendermintEvent): boolean => {\n return event.type.includes('burn');\n}\n\nexport const isEpochStartEvent = (event: TendermintEvent): boolean => {\n return event.type.includes('bze.epochs.EpochStartEvent');\n}\n\nexport const getMintedAmount = (event: TendermintEvent) => {\n const defaultCoin = coins(0, getChainNativeAssetDenom());\n try {\n const amountAttribute = event.attributes.find(attribute => attribute.key === 'amount');\n return amountAttribute ? parseCoins(amountAttribute.value) : defaultCoin;\n } catch (e) {\n console.error('Failed to parse minted amount from coinbase event', e);\n return defaultCoin;\n }\n}\n","import BigNumber from 'bignumber.js';\nimport {toBigNumber} from './amount';\n\nexport const formatUsdAmount = (priceNum: BigNumber): string => {\n const price = priceNum.toString();\n const decimalIndex = price.indexOf('.');\n\n if (decimalIndex === -1) {\n return price;\n }\n\n const decimalPart = price.substring(decimalIndex + 1);\n let significantDigitCount = 0;\n let decimalsFound = 0;\n\n for (let i = 0; i < decimalPart.length; i++) {\n const digit = decimalPart[i];\n decimalsFound++;\n\n if (digit !== '0' || significantDigitCount > 0) {\n significantDigitCount++;\n }\n\n if (significantDigitCount >= 6) {\n break;\n }\n }\n\n return priceNum.toFixed(decimalsFound).toString();\n}\n\nexport function shortNumberFormat(amount: BigNumber): string {\n if (amount.isNaN() || amount.isZero()) {\n return '0';\n }\n\n if (amount.lt(0.001)) {\n return '0';\n }\n\n const units = [\n { value: new BigNumber('1e15'), suffix: 'Q' },\n { value: new BigNumber('1e12'), suffix: 'T' },\n { value: new BigNumber('1e9'), suffix: 'B' },\n { value: new BigNumber('1e6'), suffix: 'M' },\n { value: new BigNumber('1e3'), suffix: 'K' },\n ];\n\n for (const unit of units) {\n if (amount.gte(unit.value)) {\n const formatted = amount.div(unit.value);\n const result = formatted.toFixed(3).replace(/\\.?0+$/, '');\n return `${result}${unit.suffix}`;\n }\n }\n\n return amount.toFixed(3).replace(/\\.?0+$/, '');\n}\n\nexport const intlDateFormat = new Intl.DateTimeFormat(\"en-US\", {\n year: \"2-digit\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: false,\n});\n\nexport const formatDate = (date: Date): string => {\n return intlDateFormat.format(date);\n}\n\nexport const formatTimeRemaining = (targetDate: Date): string => {\n const now = new Date();\n const diff = targetDate.getTime() - now.getTime();\n\n if (diff <= 0) {\n return 'Now';\n }\n\n const days = Math.floor(diff / (1000 * 60 * 60 * 24));\n const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));\n\n const parts: string[] = [];\n if (days > 0) parts.push(`${days}d`);\n if (hours > 0) parts.push(`${hours}h`);\n if (minutes > 0) parts.push(`${minutes}m`);\n\n return parts.join(' ') || 'Now';\n}\n\nexport function formatTimeRemainingFromEpochs(endEpoch: bigint | number | BigNumber, currentEpoch?: bigint | number | BigNumber): string {\n let epochDiff: BigNumber;\n\n if (currentEpoch !== undefined) {\n // Two-arg form: (endEpoch, currentEpoch) — each epoch is 1 hour\n const endBN = toBigNumber(endEpoch);\n const currentBN = toBigNumber(currentEpoch);\n epochDiff = endBN.minus(currentBN);\n\n if (epochDiff.lte(0)) {\n return 'Ended';\n }\n\n const hoursRemaining = epochDiff.toNumber();\n const daysRemaining = Math.floor(hoursRemaining / 24);\n const hoursRemainder = hoursRemaining % 24;\n\n if (daysRemaining > 0) {\n return `${daysRemaining}d ${hoursRemainder}h`;\n }\n\n return `${hoursRemainder}h`;\n }\n\n // Single-arg form: epochs as minutes-based duration\n epochDiff = toBigNumber(endEpoch);\n if (epochDiff.lte(0)) {\n return 'Now';\n }\n\n const totalSeconds = epochDiff.multipliedBy(60).toNumber();\n const days = Math.floor(totalSeconds / (60 * 60 * 24));\n const hours = Math.floor((totalSeconds % (60 * 60 * 24)) / (60 * 60));\n const minutes = Math.floor((totalSeconds % (60 * 60)) / 60);\n\n const parts: string[] = [];\n if (days > 0) parts.push(`${days}d`);\n if (hours > 0) parts.push(`${hours}h`);\n if (minutes > 0) parts.push(`${minutes}m`);\n\n return parts.join(' ') || 'Now';\n}\n","\nexport async function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport const openExternalLink = (url: string) => {\n if (!window) return;\n window.open(url, '_blank', 'noopener,noreferrer')\n}\n","import {IBCData} from \"../types/asset\";\nimport {DenomTrace} from \"../types/ibc\";\nimport BigNumber from \"bignumber.js\";\n\nexport const canDepositFromIBC = (ibcData: IBCData): boolean => {\n return ibcData.counterparty.baseDenom !== \"\" && ibcData.counterparty.channelId !== \"\" && ibcData.counterparty.chainName != \"\"\n}\n\nexport const canSendToIBC = (ibcData: IBCData): boolean => {\n return ibcData.chain.channelId !== \"\" && ibcData.counterparty.chainName != \"\"\n}\n\n/** Compute the denom on the first-hop (counterparty) chain, using only this trace. */\nexport async function denomOnFirstHopChainFromTrace(trace: DenomTrace): Promise<string | undefined> {\n try {\n if (!trace?.base_denom) return undefined;\n\n const parts = trace.path.split(\"/\").filter(Boolean);\n if (parts.length < 2) {\n return trace.base_denom || undefined;\n }\n\n const remaining = parts.slice(2);\n if (remaining.length === 0) {\n return trace.base_denom;\n }\n\n const remainingPath = remaining.join(\"/\");\n const full = `${remainingPath}/${trace.base_denom}`;\n\n const enc = new TextEncoder();\n const buf = enc.encode(full);\n const digest = await crypto.subtle.digest(\"SHA-256\", buf);\n\n const hashBytes = new Uint8Array(digest);\n let hex = \"\";\n for (let i = 0; i < hashBytes.length; i++) {\n const b = hashBytes[i].toString(16).padStart(2, \"0\");\n hex += b;\n }\n return `ibc/${hex.toUpperCase()}`;\n } catch (e) {\n console.error(\"[denomOnFirstHopChainFromTrace] error:\", e);\n return undefined;\n }\n}\n\nexport const getIbcTransferTimeout = (): BigNumber => {\n return new BigNumber(Date.now() + 600_000).multipliedBy(1_000_000)\n}\n","import {Balance} from \"../types/balance\";\nimport {Asset} from \"../types/asset\";\nimport {LiquidityPoolData, UserPoolData} from \"../types/liquidity_pool\";\nimport {toBigNumber} from \"./amount\";\nimport {LiquidityPoolSDKType} from \"@bze/bzejs/bze/tradebin/store\";\nimport BigNumber from \"bignumber.js\";\n\nexport const calculateUserPoolData = (\n balance: Balance | undefined,\n lpAsset: Asset | undefined,\n poolData: LiquidityPoolData | undefined\n): UserPoolData => {\n const zeroBN = toBigNumber(0)\n if (!balance || balance.amount.isZero()) {\n return { userLiquidityUsd: zeroBN, userSharesPercentage: 0 }\n }\n\n if (!lpAsset) {\n return { userLiquidityUsd: zeroBN, userSharesPercentage: 0 }\n }\n\n const userShares = toBigNumber(balance.amount)\n const totalShares = toBigNumber(lpAsset.supply)\n\n if (totalShares.isZero()) {\n return { userLiquidityUsd: zeroBN, userSharesPercentage: 0 }\n }\n\n const userSharesPercentage = userShares.dividedBy(totalShares).multipliedBy(100).toNumber()\n\n let userLiquidityUsd = zeroBN\n if (poolData && poolData.usdValue) {\n userLiquidityUsd = userShares.dividedBy(totalShares).multipliedBy(poolData.usdValue)\n }\n\n return { userLiquidityUsd, userSharesPercentage }\n}\n\nexport const calculatePoolOppositeAmount = (pool: LiquidityPoolSDKType, amount: string | BigNumber, isBase: boolean): BigNumber => {\n const amountBN = toBigNumber(amount);\n if (amountBN.isZero() || amountBN.isNaN()) {\n return toBigNumber(0);\n }\n\n const reserveBase = toBigNumber(pool.reserve_base);\n const reserveQuote = toBigNumber(pool.reserve_quote);\n\n if (reserveBase.isZero() || reserveQuote.isZero()) {\n return toBigNumber(0);\n }\n\n if (isBase) {\n return amountBN.multipliedBy(reserveQuote).dividedBy(reserveBase);\n } else {\n return amountBN.multipliedBy(reserveBase).dividedBy(reserveQuote);\n }\n}\n\nexport const calculatePoolPrice = (\n denom: string,\n pool: LiquidityPoolSDKType\n): BigNumber | null => {\n if (!pool || !denom) return null;\n\n const reserveBase = toBigNumber(pool.reserve_base);\n const reserveQuote = toBigNumber(pool.reserve_quote);\n\n if (reserveBase.lte(0) || reserveQuote.lte(0)) {\n return null;\n }\n\n if (denom === pool.base) {\n return reserveQuote.dividedBy(reserveBase);\n }\n\n if (denom === pool.quote) {\n return reserveBase.dividedBy(reserveQuote);\n }\n\n return null;\n}\n\nexport const createPoolId = (base: string, quote: string) => {\n if (base > quote) return (\n `${quote}_${base}`\n )\n\n return `${base}_${quote}`\n};\n\nexport const poolIdFromPoolDenom = (poolDenom: string) => poolDenom.replace(\"ulp_\", '');\n","import BigNumber from \"bignumber.js\";\nimport {toBigNumber} from \"./amount\";\n\nexport const createMarketId = (base: string, quote: string) => `${base}/${quote}`;\n\nexport const calculateTotalAmount = (price: string|BigNumber, amount: string|BigNumber, decimals: number): string => {\n const priceNum = toBigNumber(price);\n const amountNum = toBigNumber(amount);\n if (priceNum.isNaN() || amountNum.isNaN() || priceNum.isZero() || amountNum.isZero()) return '';\n\n const total = priceNum.multipliedBy(amountNum);\n\n return total.decimalPlaces(decimals).toString();\n}\n\nexport const calculatePricePerUnit = (amount: string|BigNumber, totalPrice: string|BigNumber, decimals: number): string => {\n const amountNum = toBigNumber(amount);\n const total = toBigNumber(totalPrice);\n if (amountNum.isNaN() || total.isNaN() || amountNum.isZero() || total.isZero()) return '';\n\n return total.dividedBy(amountNum).decimalPlaces(decimals).toString();\n}\n\nexport const calculateAmountFromPrice = (price: string|BigNumber, totalPrice: string|BigNumber, decimals: number): string => {\n const total = toBigNumber(totalPrice);\n const priceNum = toBigNumber(price);\n if (total.isNaN() || priceNum.isNaN() || total.isZero() || priceNum.isZero()) return '';\n\n return total.div(priceNum).decimalPlaces(decimals).toString();\n}\n\nexport const getMinAmount = (uPrice: string|BigNumber, noOfDecimals: number): BigNumber => {\n const uPriceDec = toBigNumber(uPrice);\n if (uPriceDec.lte(0)) {\n return new BigNumber(0);\n }\n\n const oneDec = new BigNumber(1);\n const amtDec = oneDec.dividedBy(uPriceDec).decimalPlaces(0, BigNumber.ROUND_CEIL).multipliedBy(2);\n\n return amtDec.shiftedBy((-1) * noOfDecimals).decimalPlaces(noOfDecimals || 6).multipliedBy(2);\n}\n","import {toBigNumber} from \"./amount\";\nimport BigNumber from \"bignumber.js\";\n\nexport const sanitizeNumberInput = (input: string) => {\n let sanitized = input.replace(/[^0-9.,]/g, '');\n sanitized = sanitized.replace(\",\", \".\");\n\n const parts = sanitized.split('.');\n if (parts.length > 2) {\n sanitized = parts[0] + '.' + parts.slice(1).join('');\n }\n\n return sanitized;\n}\n\nexport const sanitizeIntegerInput = (input: string): string => {\n if (input.length === 0) {\n return \"\";\n }\n\n const sanitized = input.replace(/[^0-9]/g, '');\n\n const parsed = parseInt(sanitized, 10);\n if (!parsed) {\n return \"1\";\n }\n\n return `${parsed}`;\n}\n\nexport const toPercentage = (dec: number|bigint|BigNumber|string) => toBigNumber(dec).multipliedBy(100).decimalPlaces(2).toString();\n","import BigNumber from \"bignumber.js\";\nimport {PoolSDKType} from \"@bze/bzejs/cosmos/staking/v1beta1/staking\";\nimport {StakingRewardParticipantSDKType, StakingRewardSDKType} from \"@bze/bzejs/bze/rewards/store\";\n\nconst DAY_TO_SECONDS = 24 * 60 * 60;\n\nexport const calcNativeStakingApr = (pool: PoolSDKType, communityTax: string, annualProvisions: BigNumber) => {\n const totalSupply = new BigNumber(pool?.bonded_tokens || 0).plus(\n pool?.not_bonded_tokens || 0\n );\n\n if (totalSupply.isZero() || annualProvisions.isZero()) {\n return \"0.00\";\n }\n\n const bondedTokens = new BigNumber(pool?.bonded_tokens || 0);\n\n if (bondedTokens.isZero()) {\n return \"0.00\";\n }\n\n const bondedTokensRatio = bondedTokens.div(totalSupply);\n const inflation = annualProvisions.div(totalSupply);\n const communityTaxRate = new BigNumber(communityTax || 0);\n\n const apr = inflation\n .multipliedBy(new BigNumber(1).minus(communityTaxRate))\n .div(bondedTokensRatio)\n .multipliedBy(100)\n .decimalPlaces(2, BigNumber.ROUND_DOWN);\n\n return apr.toString();\n};\n\nexport const parseUnbondingDays = (unbondingTime: string) => {\n const split = unbondingTime.split(\"s\");\n\n return new BigNumber(split[0] || 0)\n .div(DAY_TO_SECONDS)\n .decimalPlaces(0)\n .toString();\n};\n\nexport const calculateRewardsStakingApr = (dailyAmount: string | number | BigNumber, staked: string | number | BigNumber): BigNumber => {\n const stakedNum = new BigNumber(staked);\n let computedApr = new BigNumber(dailyAmount).dividedBy(stakedNum).multipliedBy(365).multipliedBy(100);\n\n if (computedApr.lt(1)) {\n computedApr = computedApr.decimalPlaces(6);\n } else {\n computedApr = computedApr.decimalPlaces(2);\n }\n\n return computedApr;\n}\n\nexport const calculateRewardsStakingPendingRewards = (stakingReward?: StakingRewardSDKType, userStake?: StakingRewardParticipantSDKType): BigNumber => {\n const distr = new BigNumber(stakingReward?.distributed_stake || 0);\n const joinedAt = new BigNumber(userStake?.joined_at || 0);\n if (distr.isEqualTo(joinedAt)) {\n return new BigNumber(0);\n }\n\n const deposited = new BigNumber(userStake?.amount || 0);\n\n return deposited.multipliedBy(distr.minus(joinedAt)).decimalPlaces(0);\n}\n","const errorsMap: { [key: string]: string } = {\n \"failed to execute message; message index: 0: amount is smaller than staking reward min stake\": \"Amount is smaller than minimum required stake\",\n \"the resulted amount is too low\": \"Swap minimum amount could not be met. Increase the slippage and try again.\",\n \"amount is too low to be traded\": \"Amount is too low to be traded\",\n \"can not buy more than 50 tickets\": \"You can only contribute up to 50 times per transaction.\",\n};\n\nexport const prettyError = (err: string|undefined): string|undefined => {\n if (!err) return undefined;\n\n if (errorsMap[err]) {\n return errorsMap[err];\n }\n\n for (const [key, value] of Object.entries(errorsMap)) {\n if (err.includes(key)) {\n return value;\n }\n }\n\n return err;\n}\n","import { AppSettings } from '../types/settings'\nimport {getChainNativeAssetDenom} from \"./assets\";\n\nexport const SETTINGS_STORAGE_KEY = 'bze_app_settings'\n\nexport const DEFAULT_SETTINGS: AppSettings = {\n endpoints: {\n restEndpoint: process.env.NEXT_PUBLIC_REST_ENDPOINT ?? '',\n rpcEndpoint: process.env.NEXT_PUBLIC_RPC_ENDPOINT ?? ''\n },\n preferredFeeDenom: getChainNativeAssetDenom()\n}\n\nexport const VALIDATION_ERRORS = {\n EMPTY_ENDPOINT: 'Endpoint cannot be empty',\n INVALID_URL: 'Invalid URL format',\n INVALID_REST_PROTOCOL: 'REST endpoint must use HTTP or HTTPS protocol',\n INVALID_RPC_PROTOCOL: 'RPC endpoint must use WS or WSS protocol for WebSocket connection',\n CORS_ERROR: 'Endpoint validation failed - unable to connect or CORS not enabled',\n WEBSOCKET_ERROR: 'WebSocket connection failed - unable to connect to RPC endpoint',\n NETWORK_ERROR: 'Network error - unable to validate endpoint'\n} as const\n\nexport const getAppName = () => process.env.NEXT_PUBLIC_APP_NAME ?? 'BZE'\n","import {DEFAULT_SETTINGS, SETTINGS_STORAGE_KEY} from \"../constants/settings\";\nimport {AppSettings} from \"../types/settings\";\nimport {getFromLocalStorage, setInLocalStorage, TTL_NO_EXPIRY} from \"./storage\";\n\nexport const getSettings = (): AppSettings => {\n const saved = getFromLocalStorage(SETTINGS_STORAGE_KEY)\n if (saved) {\n const parsed = JSON.parse(saved)\n return { ...DEFAULT_SETTINGS, ...parsed }\n }\n\n return DEFAULT_SETTINGS;\n}\n\nexport const setSettings = (newSettings: AppSettings): boolean => {\n return setInLocalStorage(SETTINGS_STORAGE_KEY, JSON.stringify(newSettings), TTL_NO_EXPIRY)\n}\n","import {getSettings} from \"../storage/settings\";\nimport {bze} from '@bze/bzejs';\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\n\nexport const getRestClient = () => {\n const settings = getSettings()\n\n return createRestClient(settings.endpoints.restEndpoint)\n}\n\nexport const createRestClient = async (endpoint: string): Promise<ReturnType<typeof bze.ClientFactory.createLCDClient>> => {\n return bze.ClientFactory.createLCDClient({restEndpoint: endpoint})\n}\n\nexport const getPageRequestWithLimit = (limit: number)=> {\n return PageRequest.fromPartial({\n limit: BigInt(limit)\n })\n}\n","import {ParamsSDKType as BurnerParams} from \"@bze/bzejs/bze/burner/params\";\nimport {getRestClient} from \"./client\";\nimport {QueryAllBurnedCoinsResponseSDKType} from \"@bze/bzejs/bze/burner/query\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {bze} from '@bze/bzejs'\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\nimport {getBurnerModuleAddress} from \"./module\";\nimport {NextBurn} from \"../types/burn\";\nimport {getAddressBalances} from \"./bank\";\nimport {getPeriodicWeekEpochEndTime} from \"./epoch\";\nimport {toBigNumber} from \"../utils/amount\";\n\nconst BURNED_KEY = 'burner:all_burned_coins';\nconst LOCAL_CACHE_TTL = 60 * 60 * 4; //4 hours\n\nconst {fromPartial: QueryAllBurnedCoinsRequestFromPartial} = bze.burner.QueryAllBurnedCoinsRequest;\n\nexport const getBurnerParams = async (): Promise<BurnerParams|undefined> => {\n try {\n const client = await getRestClient();\n\n return getBurnerParamsWithClient(client)\n } catch (error) {\n console.error('failed to get burner params: ', error);\n }\n\n return undefined\n}\n\nexport const getBurnerParamsWithClient = async (client: Awaited<ReturnType<typeof getRestClient>>): Promise<BurnerParams|undefined>=> {\n try {\n const response = await client.bze.burner.params();\n\n return response.params;\n } catch (error) {\n console.error('failed to get burner params: ', error);\n }\n\n return undefined;\n}\n\nexport async function getAllBurnedCoins(): Promise<QueryAllBurnedCoinsResponseSDKType> {\n try {\n const localData = getFromLocalStorage(BURNED_KEY);\n if (null !== localData) {\n const parsed = JSON.parse(localData);\n if (parsed) {\n return parsed;\n }\n }\n\n const client = await getRestClient();\n const response = await client.bze.burner.allBurnedCoins(\n QueryAllBurnedCoinsRequestFromPartial({\n pagination: PageRequest.fromPartial({reverse: true})\n })\n );\n setInLocalStorage(BURNED_KEY, JSON.stringify(response), LOCAL_CACHE_TTL);\n\n return response;\n } catch (e) {\n console.error(e);\n return {\n burnedCoins: [],\n };\n }\n}\n\nconst BURN_EPOCH_COUNT = 4;\n\nexport async function getNextBurning(): Promise<NextBurn | undefined> {\n const address = getBurnerModuleAddress()\n if (address === '') {\n return undefined;\n }\n\n const balances = await getAddressBalances(address);\n if (balances.length === 0) {\n return undefined;\n }\n\n const timeFromEpoch = await getBurningTimeFromEpoch();\n\n if (!timeFromEpoch) {\n return undefined;\n }\n\n return {\n coins: balances,\n date: timeFromEpoch,\n }\n}\n\nasync function getBurningTimeFromEpoch(): Promise<Date|undefined> {\n const params = await getBurnerParams();\n let defaultBurningMod = BURN_EPOCH_COUNT;\n if (params) {\n defaultBurningMod = toBigNumber(params.periodic_burning_weeks).toNumber();\n }\n\n return await getPeriodicWeekEpochEndTime(defaultBurningMod);\n}\n","\nexport function getRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL || '';\n}\n\nexport function getRpcURL(): string {\n return process.env.NEXT_PUBLIC_RPC_URL || '';\n}\n\nexport function getArchwayRpcURL(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_ARCHWAY || '';\n}\n\nexport function getOsmosisRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_OSMOSIS || '';\n}\n\nexport function getNobleRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_NOBLE || '';\n}\n\nexport function getJackalRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_JACKAL || '';\n}\n\nexport function getOmniFlixRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_FLIX || '';\n}\n\nexport function getAtomOneRpcUrl(): string {\n return process.env.NEXT_PUBLIC_RPC_URL_ATOMONE || '';\n}\n\nexport function getArchwayRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_ARCHWAY || '';\n}\n\nexport function getOsmosisRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_OSMOSIS || '';\n}\n\nexport function getNobleRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_NOBLE || '';\n}\n\nexport function getJackalRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_JACKAL || '';\n}\n\nexport function getOmniFlixRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_FLIX || '';\n}\n\nexport function getAtomOneRestURL(): string {\n return process.env.NEXT_PUBLIC_REST_URL_ATOMONE || '';\n}\n\nexport const getAggregatorHost = (): string => {\n return process.env.NEXT_PUBLIC_AGG_API_HOST ?? \"https://getbze.com\";\n}\n","import {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {getRestURL} from \"../constants/endpoints\";\n\nconst MODULE_ADDRESS_KEY = 'auth:module:address:';\nconst MODULE_ADDRESS_CACHE_TTL = 60 * 60 * 48; //48 hours\n\nfunction getHardcodedBurnerAddress(): string {\n return 'bze1v7uw4xhrcv0vk7qp8jf9lu3hm5d8uu5yjp5qun';\n}\n\nfunction getHardcodedRaffleAddress(): string {\n return 'bze18hsqalgwlzqavrrkfnxmrjmygwyjy8senx5tgs';\n}\n\nexport function getHardcodedLockAddress(): string {\n return 'bze1pc5zjcvhx3e8l305zjl72grytfa30r5mdypmw4';\n}\n\nexport function getBurnerModuleAddress(): string {\n return getHardcodedBurnerAddress();\n}\n\nexport function getRaffleModuleAddress(): string {\n return getHardcodedRaffleAddress()\n}\n\nexport async function getModuleAddress(module: string): Promise<string> {\n try {\n const cacheKey = `${MODULE_ADDRESS_KEY}${module}`;\n const localData = getFromLocalStorage(cacheKey);\n if (null !== localData) {\n return localData;\n }\n\n const url = getRestURL();\n const response = await fetch(`${url}/cosmos/auth/v1beta1/module_accounts/${module}`)\n if (!response.ok) {\n return '';\n }\n\n const parsed = await response.json()\n const addy = parsed.account.base_account?.address;\n if (addy === undefined) {\n return \"\";\n }\n\n setInLocalStorage(cacheKey, addy, MODULE_ADDRESS_CACHE_TTL);\n\n return addy;\n } catch (e) {\n console.error(e);\n\n return '';\n }\n}\n","import {getRestClient} from \"./client\";\nimport {Coin} from \"@bze/bzejs/cosmos/base/v1beta1/coin\";\nimport {getLockerAddress} from \"../constants/chain\";\n\nexport async function getAddressBalances(address: string): Promise<Coin[]> {\n try {\n const client = await getRestClient();\n const response = await client.cosmos.bank.v1beta1.spendableBalances({address: address});\n\n return response.balances;\n } catch (e) {\n console.error(\"failed to get balances\",e);\n\n return [];\n }\n}\n\nexport async function getLockedBalances(): Promise<Coin[]> {\n try {\n const lockerAddress = getLockerAddress();\n if (!lockerAddress) {\n console.warn(\"Locker address not configured\");\n return [];\n }\n\n return await getAddressBalances(lockerAddress);\n } catch (e) {\n console.error(\"failed to get locked balances\", e);\n return [];\n }\n}\n","import {QueryEpochsInfoResponseSDKType} from \"@bze/bzejs/bze/epochs/query\";\nimport {getRestClient} from \"./client\";\nimport {EpochInfoSDKType} from \"@bze/bzejs/bze/epochs/epoch\";\nimport {toBigNumber} from \"../utils/amount\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\n\nconst EPOCH_HOUR = \"hour\";\nconst EPOCH_DAY = \"day\";\nconst EPOCH_WEEK = \"week\";\nconst EPOCHS_INFO_CACHE_KEY = \"epochs:info\";\nconst EPOCHS_INFO_CACHE_TTL = 60 * 60;\n\nexport async function getEpochsInfo(): Promise<QueryEpochsInfoResponseSDKType> {\n try {\n const cachedData = getFromLocalStorage(EPOCHS_INFO_CACHE_KEY);\n let shouldFetchFromEndpoint = false;\n\n if (cachedData !== null) {\n const cached: QueryEpochsInfoResponseSDKType = JSON.parse(cachedData);\n\n const now = new Date().getTime();\n for (const epoch of cached.epochs) {\n if (epoch.current_epoch_start_time) {\n const startTime = new Date(epoch.current_epoch_start_time).getTime();\n const duration = getEpochDurationByIdentifier(epoch.identifier);\n const epochEndTime = startTime + duration - (15 * 1000);\n\n if (now >= epochEndTime) {\n shouldFetchFromEndpoint = true;\n break;\n }\n }\n }\n\n if (!shouldFetchFromEndpoint) {\n return cached;\n }\n }\n\n const client = await getRestClient();\n const response = await client.bze.epochs.epochInfos();\n setInLocalStorage(EPOCHS_INFO_CACHE_KEY, JSON.stringify(response), EPOCHS_INFO_CACHE_TTL);\n\n return response;\n } catch (e) {\n console.error(e);\n\n return {epochs: []};\n }\n}\n\nexport async function getCurrentEpoch(identifier: string): Promise<EpochInfoSDKType|undefined> {\n const all = await getEpochsInfo();\n\n return all.epochs.find((item: EpochInfoSDKType) => item.identifier === identifier);\n}\n\nexport async function getHourEpochInfo() {\n return getCurrentEpoch(EPOCH_HOUR);\n}\n\nexport async function getWeekEpochInfo() {\n return getCurrentEpoch(EPOCH_WEEK);\n}\n\nexport async function getCurrentWeekEpochEndTime(): Promise<Date|undefined> {\n return getPeriodicEpochEndTime(EPOCH_WEEK);\n}\n\nexport async function getPeriodicWeekEpochEndTime(modWeek: number = 1): Promise<Date|undefined> {\n return getPeriodicEpochEndTime(EPOCH_WEEK, modWeek);\n}\n\nexport async function getPeriodicEpochEndTime(identifier: string, mod: number = 1): Promise<Date|undefined> {\n const epoch = await getCurrentEpoch(identifier);\n if (!epoch || !epoch.current_epoch_start_time) {\n return undefined;\n }\n const current = toBigNumber(epoch.current_epoch);\n let remainingEpochs = mod - (current.toNumber() % mod);\n if (remainingEpochs === mod) {\n remainingEpochs = 0;\n }\n\n const startAt = (new Date(epoch.current_epoch_start_time));\n const duration = getEpochDurationByIdentifier(identifier);\n startAt.setTime(startAt.getTime() + duration + (duration * remainingEpochs));\n\n return startAt;\n}\n\nexport function getEpochDurationByIdentifier(identifier: string): number {\n const hourMs = 60 * 60 * 1000;\n switch (identifier) {\n case EPOCH_HOUR:\n return hourMs;\n case EPOCH_DAY:\n return hourMs * 24;\n case EPOCH_WEEK:\n return hourMs * 24 * 7;\n default:\n return hourMs;\n }\n}\n","import { ValidationResult } from '../types/settings'\nimport { VALIDATION_ERRORS } from '../constants/settings'\nimport {getBurnerParamsWithClient} from \"../query/burner\";\nimport {createRestClient} from \"../query/client\";\n\nfunction isValidUrl(urlString: string): boolean {\n try {\n const url = new URL(urlString)\n return url.protocol === 'http:' || url.protocol === 'https:' || url.protocol === 'ws:' || url.protocol === 'wss:'\n } catch {\n return false\n }\n}\n\nexport async function validateRestEndpoint(endpoint: string): Promise<ValidationResult> {\n if (!endpoint.trim()) {\n return { isValid: false, error: VALIDATION_ERRORS.EMPTY_ENDPOINT }\n }\n\n if (!isValidUrl(endpoint)) {\n return { isValid: false, error: VALIDATION_ERRORS.INVALID_URL }\n }\n\n const url = new URL(endpoint)\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n return { isValid: false, error: VALIDATION_ERRORS.INVALID_REST_PROTOCOL }\n }\n\n try {\n const client = await createRestClient(endpoint)\n const params = await getBurnerParamsWithClient(client)\n if (params) {\n return { isValid: true }\n }\n\n return { isValid: false, error: VALIDATION_ERRORS.CORS_ERROR }\n } catch (error) {\n console.error(error)\n return { isValid: false, error: VALIDATION_ERRORS.NETWORK_ERROR }\n }\n}\n\nexport async function validateRpcEndpoint(endpoint: string): Promise<ValidationResult> {\n if (!endpoint.trim()) {\n return { isValid: false, error: VALIDATION_ERRORS.EMPTY_ENDPOINT }\n }\n\n if (!isValidUrl(endpoint)) {\n return { isValid: false, error: VALIDATION_ERRORS.INVALID_URL }\n }\n\n const wsEndpoint = convertToWebSocketUrl(endpoint);\n const url = new URL(wsEndpoint);\n\n if (url.protocol !== 'ws:' && url.protocol !== 'wss:') {\n return { isValid: false, error: VALIDATION_ERRORS.INVALID_RPC_PROTOCOL }\n }\n\n try {\n const isConnectable = await testWebSocketConnection(wsEndpoint);\n\n if (isConnectable) {\n return { isValid: true };\n } else {\n return { isValid: false, error: VALIDATION_ERRORS.WEBSOCKET_ERROR };\n }\n } catch (error) {\n console.error('WebSocket validation error:', error);\n return { isValid: false, error: VALIDATION_ERRORS.NETWORK_ERROR };\n }\n}\n\nfunction testWebSocketConnection(endpoint: string): Promise<boolean> {\n return new Promise((resolve) => {\n const ws = new WebSocket(`${endpoint}/websocket`);\n const timeout = setTimeout(() => {\n ws.close();\n resolve(false);\n }, 5000);\n\n ws.onopen = () => {\n clearTimeout(timeout);\n ws.close();\n resolve(true);\n };\n\n ws.onerror = () => {\n clearTimeout(timeout);\n resolve(false);\n };\n\n ws.onclose = (event) => {\n clearTimeout(timeout);\n if (event.wasClean) {\n resolve(true);\n }\n };\n });\n}\n\nexport async function validateEndpoints(restEndpoint: string, rpcEndpoint: string) {\n const [restResult, rpcResult] = await Promise.all([\n validateRestEndpoint(restEndpoint),\n validateRpcEndpoint(rpcEndpoint)\n ])\n\n return {\n rest: restResult,\n rpc: rpcResult,\n isValid: restResult.isValid && rpcResult.isValid\n }\n}\n\nexport function convertToWebSocketUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n\n if (parsedUrl.protocol === 'http:') {\n parsedUrl.protocol = 'ws:';\n } else if (parsedUrl.protocol === 'https:') {\n parsedUrl.protocol = 'wss:';\n }\n\n return parsedUrl.toString();\n } catch (error) {\n console.warn('Failed to parse URL for WebSocket conversion:', error);\n return url;\n }\n}\n","export const getValidatorSupportedDenoms = (): string[] => {\n const denoms = process.env.NEXT_PUBLIC_ATONE_VALIDATOR_SUPPORTED_DENOMS || '';\n return denoms.split(',').map(d => d.trim()).filter(d => d.length > 0);\n}\n\nexport const getValidatorPageUrl = (): string => {\n return process.env.NEXT_PUBLIC_ATONE_VALIDATOR_PAGE_URL || '';\n}\n\nexport const isPoolSupportedByValidator = (baseDenom: string, quoteDenom: string): boolean => {\n const supportedDenoms = getValidatorSupportedDenoms();\n return supportedDenoms.includes(baseDenom) || supportedDenoms.includes(quoteDenom);\n}\n","/**\n * Shared WebSocket singleton for CometBFT event subscriptions.\n *\n * One persistent connection is reused across all callers (useBlockchainListener,\n * etc.) so the app opens a single WebSocket to the RPC node instead of one\n * per hook instance.\n *\n * CometBFT sends subscription notifications by reusing the original request ID\n * (not the Ethereum-style params.subscription pattern), so we track active\n * subscriptions by their call ID and dispatch incoming messages accordingly.\n */\n\ntype EventSubscription = {\n query: string;\n handler: (result: unknown) => void;\n};\n\n// ── Singleton state ──────────────────────────────────────────────────────────\nlet socket: WebSocket | null = null;\nlet activeUrl: string = '';\nlet socketConnected = false;\nlet connectingPromise: Promise<void> | null = null;\nlet msgId = 0;\nlet reconnectAttempts = 0;\nlet reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n\nconst MAX_RECONNECT_ATTEMPTS = 10;\n\nconst activeSubscriptions = new Map<string, EventSubscription>();\n// ────────────────────────────────────────────────────────────────────────────\n\nconst handleMessage = (event: MessageEvent) => {\n try {\n const msg = JSON.parse(event.data as string);\n const id = String(msg?.id ?? '');\n\n // CometBFT subscription notification: same id as the subscribe call,\n // non-empty result object (the empty {} ack is ignored here).\n if (id && activeSubscriptions.has(id) && msg.result && Object.keys(msg.result).length > 0) {\n activeSubscriptions.get(id)!.handler(msg.result);\n }\n } catch {}\n};\n\nconst resubscribeAll = () => {\n for (const [id, sub] of activeSubscriptions) {\n socket!.send(JSON.stringify({\n jsonrpc: '2.0',\n method: 'subscribe',\n id,\n params: {query: sub.query},\n }));\n }\n};\n\nconst scheduleReconnect = () => {\n if (reconnectAttempts >= MAX_RECONNECT_ATTEMPTS) {\n console.error('[WS] Max reconnect attempts reached');\n return;\n }\n reconnectAttempts++;\n const delay = Math.min(1000 * Math.pow(2, reconnectAttempts - 1), 30_000);\n reconnectTimeout = setTimeout(async () => {\n try {\n await openSocket(activeUrl);\n resubscribeAll();\n reconnectAttempts = 0;\n } catch {\n scheduleReconnect();\n }\n }, delay);\n};\n\nconst openSocket = (url: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(url);\n\n ws.onopen = () => {\n socket = ws;\n socketConnected = true;\n resolve();\n };\n\n ws.onmessage = handleMessage;\n\n ws.onclose = () => {\n socketConnected = false;\n scheduleReconnect();\n };\n\n ws.onerror = (err) => {\n socketConnected = false;\n reject(err);\n };\n });\n};\n\nconst getOrCreateSocket = async (rpcEndpoint: string): Promise<void> => {\n const url = rpcEndpoint.replace(/\\/?$/, '') + '/websocket';\n if (socket && socketConnected && activeUrl === url) return;\n\n // If a connection attempt is already in flight for this URL, wait on it\n // instead of opening a second socket (concurrent callers race condition).\n if (connectingPromise && activeUrl === url) {\n return connectingPromise;\n }\n\n // Endpoint changed — tear down cleanly without triggering reconnect\n if (socket) {\n socket.onclose = null;\n socket.close(1000, 'Endpoint changed');\n socket = null;\n socketConnected = false;\n if (reconnectTimeout) {\n clearTimeout(reconnectTimeout);\n reconnectTimeout = null;\n }\n reconnectAttempts = 0;\n }\n\n activeUrl = url;\n connectingPromise = openSocket(url).finally(() => {\n connectingPromise = null;\n });\n return connectingPromise;\n};\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\n/**\n * Subscribes to CometBFT events using the shared WebSocket connection.\n * The handler receives `msg.result` for every notification:\n * result.data.value.result_finalize_block.events — NewBlock events\n * result.data.value.txs_results — block Tx results\n * result.data.value.TxResult.result.events — Tx subscription events\n *\n * Returns an unsubscribe function that cleans up the subscription.\n * Active subscriptions are automatically resubscribed after reconnection.\n */\nexport const subscribeToBlockchainEvents = async (\n rpcEndpoint: string,\n query: string,\n handler: (result: unknown) => void,\n): Promise<() => void> => {\n await getOrCreateSocket(rpcEndpoint);\n const id = String(++msgId);\n activeSubscriptions.set(id, {query, handler});\n socket!.send(JSON.stringify({jsonrpc: '2.0', method: 'subscribe', id, params: {query}}));\n\n return () => {\n activeSubscriptions.delete(id);\n if (socket?.readyState === WebSocket.OPEN) {\n socket.send(JSON.stringify({\n jsonrpc: '2.0',\n method: 'unsubscribe',\n id: String(++msgId),\n params: {query},\n }));\n }\n };\n};\n","export const EXCLUDED_MARKETS: { [key: string]: boolean } = {\n \"factory/bze1f0qgels0eu96ev6a67znu70q7rquy9eragn8nw/ucorey/factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl\": true,\n \"factory/bze1f0qgels0eu96ev6a67znu70q7rquy9eragn8nw/ucorey/ubze\": true,\n}\n","import type { IconType } from 'react-icons';\nimport { LuGlobe, LuCoins, LuChartColumn, LuFlame, LuFactory } from 'react-icons/lu';\n\nexport const ECOSYSTEM_MENU_LABEL = 'Other';\n\nexport interface EcosystemApp {\n name: string;\n href: string;\n disabled: boolean;\n icon: IconType;\n /** Unique key used for env var overrides and exclusions (e.g. 'website', 'staking', 'dex') */\n key: string;\n}\n\n/**\n * Default ecosystem apps. Each app has a unique `key` used for:\n * - Link overrides: NEXT_PUBLIC_ECOSYSTEM_LINK_{KEY} (e.g. NEXT_PUBLIC_ECOSYSTEM_LINK_WEBSITE=https://testnet.getbze.com)\n * - Label overrides: NEXT_PUBLIC_ECOSYSTEM_LABEL_{KEY} (e.g. NEXT_PUBLIC_ECOSYSTEM_LABEL_DEX=TestDEX)\n * - Exclusions: NEXT_PUBLIC_ECOSYSTEM_EXCLUDED=website,factory (comma-separated keys)\n */\nconst DEFAULT_APPS: Array<{ key: string; name: string; href: string; disabled: boolean; icon: IconType }> = [\n { key: 'website', name: 'Website', href: 'https://getbze.com', disabled: false, icon: LuGlobe },\n { key: 'staking', name: 'Staking', href: 'https://staking.getbze.com', disabled: false, icon: LuCoins },\n { key: 'dex', name: 'DEX', href: 'https://dex.getbze.com', disabled: false, icon: LuChartColumn },\n { key: 'burner', name: 'Burner', href: 'https://burner.getbze.com', disabled: false, icon: LuFlame },\n { key: 'factory', name: 'Factory', href: '#', disabled: true, icon: LuFactory },\n];\n\n/**\n * Reads the NEXT_PUBLIC_ECOSYSTEM_EXCLUDED env var and returns a Set of excluded keys.\n */\nconst getExcludedKeys = (): Set<string> => {\n const raw = process.env.NEXT_PUBLIC_ECOSYSTEM_EXCLUDED || '';\n if (!raw.trim()) {\n return new Set();\n }\n\n return new Set(raw.split(',').map(k => k.trim().toLowerCase()).filter(Boolean));\n};\n\n/**\n * Static env var lookups — Next.js only inlines process.env.NEXT_PUBLIC_*\n * when the full string is written statically. Dynamic access like\n * process.env[`NEXT_PUBLIC_ECOSYSTEM_LINK_${key}`] does NOT get replaced.\n */\nconst LINK_OVERRIDES: Record<string, string | undefined> = {\n website: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_WEBSITE,\n staking: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_STAKING,\n dex: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_DEX,\n burner: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_BURNER,\n factory: process.env.NEXT_PUBLIC_ECOSYSTEM_LINK_FACTORY,\n};\n\nconst LABEL_OVERRIDES: Record<string, string | undefined> = {\n website: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_WEBSITE,\n staking: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_STAKING,\n dex: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_DEX,\n burner: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_BURNER,\n factory: process.env.NEXT_PUBLIC_ECOSYSTEM_LABEL_FACTORY,\n};\n\n/**\n * Returns the list of ecosystem apps with env var overrides applied and exclusions removed.\n *\n * Env vars:\n * - NEXT_PUBLIC_ECOSYSTEM_LINK_{KEY} — override the href for an app (key uppercased, e.g. NEXT_PUBLIC_ECOSYSTEM_LINK_WEBSITE)\n * - NEXT_PUBLIC_ECOSYSTEM_LABEL_{KEY} — override the label for an app (e.g. NEXT_PUBLIC_ECOSYSTEM_LABEL_DEX)\n * - NEXT_PUBLIC_ECOSYSTEM_EXCLUDED — comma-separated keys to exclude (e.g. \"staking,factory\")\n */\nexport const getEcosystemApps = (): EcosystemApp[] => {\n const excluded = getExcludedKeys();\n\n return DEFAULT_APPS\n .filter(app => !excluded.has(app.key))\n .map(app => {\n const linkOverride = LINK_OVERRIDES[app.key];\n const labelOverride = LABEL_OVERRIDES[app.key];\n\n return {\n key: app.key,\n name: labelOverride || app.name,\n href: linkOverride || app.href,\n disabled: linkOverride ? false : app.disabled,\n icon: app.icon,\n };\n });\n};\n","export const MAINNET_CHAIN_INFO_FALLBACK = {\n \"chainId\": \"beezee-1\",\n \"chainName\": \"BeeZee\",\n \"chainSymbolImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/chain.png\",\n \"rpc\": \"https://rpc.getbze.com\",\n \"rest\": \"https://rest.getbze.com\",\n \"nodeProvider\": {\n \"name\": \"BZE Alpha Team\",\n \"email\": \"alphateam@getbze.com\",\n \"website\": \"https://getbze.com\"\n },\n \"stakeCurrency\": {\n \"coinDenom\": \"BZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/chain.png\"\n },\n \"bip44\": {\n \"coinType\": 118\n },\n \"bech32Config\": {\n \"bech32PrefixAccAddr\": \"bze\",\n \"bech32PrefixAccPub\": \"bzepub\",\n \"bech32PrefixValAddr\": \"bzevaloper\",\n \"bech32PrefixValPub\": \"bzevaloperpub\",\n \"bech32PrefixConsAddr\": \"bzevalcons\",\n \"bech32PrefixConsPub\": \"bzevalconspub\"\n },\n \"currencies\": [\n {\n \"coinDenom\": \"BZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/chain.png\"\n },\n {\n \"coinDenom\": \"VDL\",\n \"coinMinimalDenom\": \"factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"vidulum\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/factory/bze13gzq40che93tgfm9kzmkpjamah5nj0j73pyhqk/uvdl.png\"\n }\n ],\n \"feeCurrencies\": [{\n \"coinDenom\": \"BZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"gasPriceStep\": {\n \"low\": 0.001,\n \"average\": 0.01,\n \"high\": 0.1\n },\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/beezee/chain.png\"\n }],\n \"features\": []\n};\n\nexport const TESTNET_CHAIN_INFO_FALLBACK = {\n \"chainId\": \"bzetestnet-3\",\n \"chainName\": \"BeeZee Testnet 3\",\n \"chainSymbolImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/chain.png\",\n \"rpc\": \"https://testnet-rpc.getbze.com\",\n \"rest\": \"https://testnet.getbze.com\",\n \"nodeProvider\": {\n \"name\": \"BZE Alpha Team\",\n \"email\": \"alphateam@getbze.com\",\n \"website\": \"https://getbze.com\"\n },\n \"stakeCurrency\": {\n \"coinDenom\": \"TBZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/chain.png\"\n },\n \"bip44\": {\n \"coinType\": 118\n },\n \"bech32Config\": {\n \"bech32PrefixAccAddr\": \"bze\",\n \"bech32PrefixAccPub\": \"bzepub\",\n \"bech32PrefixValAddr\": \"bzevaloper\",\n \"bech32PrefixValPub\": \"bzevaloperpub\",\n \"bech32PrefixConsAddr\": \"bzevalcons\",\n \"bech32PrefixConsPub\": \"bzevalconspub\"\n },\n \"currencies\": [\n {\n \"coinDenom\": \"TBZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/chain.png\"\n },\n {\n \"coinDenom\": \"TVDL\",\n \"coinMinimalDenom\": \"factory/bze1z3mkcr2jz424w6m49frgjmy9uhlrx69phqwg3l/vidulum\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"vidulum\",\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/factory/testbz1z3mkcr2jz424w6m49frgjmy9uhlrx69p4cvrgf/vidulum.png\"\n }\n ],\n \"feeCurrencies\": [{\n \"coinDenom\": \"TBZE\",\n \"coinMinimalDenom\": \"ubze\",\n \"coinDecimals\": 6,\n \"coinGeckoId\": \"bzedge\",\n \"gasPriceStep\": {\n \"low\": 0.001,\n \"average\": 0.01,\n \"high\": 0.1\n },\n \"coinImageUrl\": \"https://raw.githubusercontent.com/chainapsis/keplr-chain-registry/main/images/bzetestnet/chain.png\"\n }],\n \"features\": []\n};\n","import BigNumber from \"bignumber.js\";\nimport { LiquidityPoolSDKType } from \"@bze/bzejs/bze/tradebin/store\";\nimport { toBigNumber } from \"../utils/amount\";\nimport {SwapRouteResult} from \"../types/liquidity_pool\";\n\ninterface RouteCache {\n result: SwapRouteResult;\n timestamp: number;\n}\n\nclass AmmRouter {\n private static instance: AmmRouter;\n private routeCache = new Map<string, RouteCache>();\n private routeMap: Map<string, Map<string, LiquidityPoolSDKType>> = new Map();\n\n private constructor() {}\n\n static getInstance(): AmmRouter {\n if (!AmmRouter.instance) {\n AmmRouter.instance = new AmmRouter();\n }\n return AmmRouter.instance;\n }\n\n updatePools(pools: LiquidityPoolSDKType[]): void {\n this.routeMap = this.mapLiquidityPoolRoutes(pools);\n this.clearCache();\n }\n\n private mapLiquidityPoolRoutes(\n pools: LiquidityPoolSDKType[]\n ): Map<string, Map<string, LiquidityPoolSDKType>> {\n const routeMap = new Map<string, Map<string, LiquidityPoolSDKType>>();\n\n for (const pool of pools) {\n if (!routeMap.has(pool.base)) {\n routeMap.set(pool.base, new Map());\n }\n routeMap.get(pool.base)!.set(pool.quote, pool);\n\n if (!routeMap.has(pool.quote)) {\n routeMap.set(pool.quote, new Map());\n }\n routeMap.get(pool.quote)!.set(pool.base, pool);\n }\n\n return routeMap;\n }\n\n findOptimalRoute(\n fromDenom: string,\n toDenom: string,\n amountIn: BigNumber,\n maxHops: number,\n useCache: boolean = true\n ): SwapRouteResult | null {\n const cacheKey = this.getCacheKey(fromDenom, toDenom, maxHops);\n\n if (useCache) {\n const cached = this.routeCache.get(cacheKey);\n if (cached) {\n return {\n ...cached.result,\n ...this.calculateRouteOutput(cached.result.pools, cached.result.path, amountIn)\n };\n }\n }\n\n const result = this.findOptimalSwapRoute(fromDenom, toDenom, amountIn, maxHops);\n\n if (result) {\n this.routeCache.set(cacheKey, {\n result,\n timestamp: Date.now()\n });\n }\n\n return result;\n }\n\n calculateRouteOutput(\n pools: LiquidityPoolSDKType[],\n path: string[],\n amountIn: BigNumber\n ): Omit<SwapRouteResult, 'route' | 'path' | 'pools'> {\n let currentAmount = amountIn;\n const fees: BigNumber[] = [];\n\n for (let i = 0; i < pools.length; i++) {\n const pool = pools[i];\n const currentDenom = path[i];\n const isBaseToQuote = pool.base === currentDenom;\n\n const { amountOut, fee } = this.calculateSwapOutput(pool, currentAmount, isBaseToQuote);\n fees.push(fee);\n currentAmount = amountOut;\n }\n\n const expectedOutput = currentAmount;\n\n const theoretical = this.calculateTheoreticalOutputs(pools, path, amountIn);\n\n const totalFees = theoretical.withoutFees.minus(theoretical.withFees);\n const priceImpact = theoretical.withFees.isZero()\n ? toBigNumber(0)\n : theoretical.withFees.minus(expectedOutput).dividedBy(theoretical.withFees).multipliedBy(100);\n\n return {\n expectedOutput,\n priceImpact,\n totalFees,\n feesPerHop: fees\n };\n }\n\n clearCache(filter?: (key: string, cache: RouteCache) => boolean): void {\n if (!filter) {\n this.routeCache.clear();\n return;\n }\n\n for (const [key, cache] of this.routeCache.entries()) {\n if (filter(key, cache)) {\n this.routeCache.delete(key);\n }\n }\n }\n\n getCacheStats() {\n return {\n size: this.routeCache.size,\n keys: Array.from(this.routeCache.keys())\n };\n }\n\n private calculateTheoreticalOutputs(\n pools: LiquidityPoolSDKType[],\n path: string[],\n amountIn: BigNumber\n ): { withoutFees: BigNumber; withFees: BigNumber } {\n let theoreticalOutputNoFees = amountIn;\n let theoreticalOutputWithFees = amountIn;\n\n for (let i = 0; i < pools.length; i++) {\n const pool = pools[i];\n const currentDenom = path[i];\n const isBaseToQuote = pool.base === currentDenom;\n\n const reserveIn = toBigNumber(isBaseToQuote ? pool.reserve_base : pool.reserve_quote);\n const reserveOut = toBigNumber(isBaseToQuote ? pool.reserve_quote : pool.reserve_base);\n const midPrice = reserveOut.dividedBy(reserveIn);\n\n theoreticalOutputNoFees = theoreticalOutputNoFees.multipliedBy(midPrice);\n\n const fee = toBigNumber(pool.fee);\n theoreticalOutputWithFees = theoreticalOutputWithFees\n .multipliedBy(toBigNumber(1).minus(fee))\n .multipliedBy(midPrice);\n }\n\n return {\n withoutFees: theoreticalOutputNoFees,\n withFees: theoreticalOutputWithFees\n };\n }\n\n private calculateSwapOutput(\n pool: LiquidityPoolSDKType,\n amountIn: BigNumber,\n isBaseToQuote: boolean\n ): { amountOut: BigNumber; fee: BigNumber } {\n const fee = toBigNumber(pool.fee);\n const reserveIn = toBigNumber(isBaseToQuote ? pool.reserve_base : pool.reserve_quote);\n const reserveOut = toBigNumber(isBaseToQuote ? pool.reserve_quote : pool.reserve_base);\n\n const feeAmount = amountIn.multipliedBy(fee);\n const amountInAfterFee = amountIn.minus(feeAmount);\n\n const amountOut = amountInAfterFee\n .multipliedBy(reserveOut)\n .dividedBy(reserveIn.plus(amountInAfterFee));\n\n return { amountOut, fee: feeAmount };\n }\n\n private findOptimalSwapRoute(\n fromDenom: string,\n toDenom: string,\n amountIn: BigNumber,\n maxHops: number\n ): SwapRouteResult | null {\n if (fromDenom === toDenom) {\n return null;\n }\n\n interface RouteNode {\n denom: string;\n amount: BigNumber;\n path: string[];\n poolIds: string[];\n pools: LiquidityPoolSDKType[];\n fees: BigNumber[];\n hops: number;\n }\n\n const queue: RouteNode[] = [{\n denom: fromDenom,\n amount: amountIn,\n path: [fromDenom],\n poolIds: [],\n pools: [],\n fees: [],\n hops: 0\n }];\n\n const bestAmounts = new Map<string, BigNumber>();\n bestAmounts.set(fromDenom, amountIn);\n\n let bestRoute: RouteNode | null = null;\n\n while (queue.length > 0) {\n queue.sort((a, b) => b.amount.comparedTo(a.amount) ?? 0);\n const current = queue.shift()!;\n\n if (current.denom === toDenom) {\n if (!bestRoute || current.amount.isGreaterThan(bestRoute.amount)) {\n bestRoute = current;\n }\n continue;\n }\n\n if (current.hops >= maxHops) {\n continue;\n }\n\n const neighbors = this.routeMap.get(current.denom);\n if (!neighbors) continue;\n\n for (const [nextDenom, pool] of neighbors.entries()) {\n if (current.path.includes(nextDenom)) {\n continue;\n }\n\n const isBaseToQuote = pool.base === current.denom;\n\n const { amountOut, fee } = this.calculateSwapOutput(pool, current.amount, isBaseToQuote);\n\n if (amountOut.lte(0)) {\n continue;\n }\n\n const previousBest = bestAmounts.get(nextDenom);\n if (previousBest && amountOut.lte(previousBest)) {\n continue;\n }\n\n bestAmounts.set(nextDenom, amountOut);\n\n queue.push({\n denom: nextDenom,\n amount: amountOut,\n path: [...current.path, nextDenom],\n poolIds: [...current.poolIds, pool.id],\n pools: [...current.pools, pool],\n fees: [...current.fees, fee],\n hops: current.hops + 1\n });\n }\n }\n\n if (!bestRoute) {\n return null;\n }\n\n const theoretical = this.calculateTheoreticalOutputs(bestRoute.pools, bestRoute.path, amountIn);\n\n const totalFees = theoretical.withoutFees.minus(theoretical.withFees);\n const priceImpact = theoretical.withFees.isZero()\n ? toBigNumber(0)\n : theoretical.withFees.minus(bestRoute.amount).dividedBy(theoretical.withFees).multipliedBy(100);\n\n return {\n route: bestRoute.poolIds,\n path: bestRoute.path,\n pools: bestRoute.pools,\n expectedOutput: bestRoute.amount,\n priceImpact,\n totalFees,\n feesPerHop: bestRoute.fees\n };\n }\n\n private getCacheKey(fromDenom: string, toDenom: string, maxHops: number): string {\n return `${fromDenom}_${toDenom}_${maxHops}`;\n }\n}\n\nexport const ammRouter = AmmRouter.getInstance();\n","import {EventCallback, InternalEvent} from \"../types/events\";\nimport {getMarketEventKey} from \"../utils/events\";\n\nclass BlockchainEventManager {\n private static instance: BlockchainEventManager;\n private listeners = new Map<string, Set<EventCallback>>();\n\n private constructor() {}\n\n static getInstance(): BlockchainEventManager {\n if (!BlockchainEventManager.instance) {\n BlockchainEventManager.instance = new BlockchainEventManager();\n }\n return BlockchainEventManager.instance;\n }\n\n subscribe(eventType: string, callback: EventCallback) {\n if (!this.listeners.has(eventType)) {\n this.listeners.set(eventType, new Set());\n }\n\n this.listeners.get(eventType)!.add(callback);\n\n return () => {\n const handlers = this.listeners.get(eventType);\n if (handlers) {\n handlers.delete(callback);\n if (handlers.size === 0) {\n this.listeners.delete(eventType);\n }\n }\n };\n }\n\n emit(eventType: string, event?: InternalEvent) {\n const generalListeners = this.listeners.get(eventType);\n if (generalListeners) {\n generalListeners.forEach(callback => callback(event));\n }\n\n if (!event) {\n return;\n }\n\n if (event.marketId) {\n const marketListeners = this.listeners.get(getMarketEventKey(eventType, event.marketId));\n if (marketListeners) {\n marketListeners.forEach(callback => callback(event));\n }\n }\n }\n}\n\nexport const blockchainEventManager = BlockchainEventManager.getInstance();\n","import {getPageRequestWithLimit, getRestClient} from \"./client\";\nimport {QueryDenomsMetadataRequest, QueryTotalSupplyRequest} from \"@bze/bzejs/cosmos/bank/v1beta1/query\";\n\nconst {fromPartial: TotalSupplyRequest} = QueryTotalSupplyRequest;\nconst {fromPartial: MetadataRequest} = QueryDenomsMetadataRequest;\n\nconst DEFAULT_LIMIT = 200;\n\nexport const getAllSupply = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.bank.v1beta1.totalSupply(TotalSupplyRequest(\n {pagination: getPageRequestWithLimit(DEFAULT_LIMIT)})\n );\n\n return resp.supply;\n } catch (error) {\n console.error('failed to get supply: ', error);\n }\n\n return undefined\n}\n\nexport const getAllSupplyMetadata = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.bank.v1beta1.denomsMetadata(MetadataRequest({\n pagination: getPageRequestWithLimit(DEFAULT_LIMIT)\n }))\n\n return resp.metadatas;\n } catch (error) {\n console.error('failed to get supply metadata: ', error);\n }\n\n return undefined\n}\n","import {getAllSupply, getAllSupplyMetadata} from \"../query/supply\";\nimport {MetadataSDKType} from \"@bze/bzejs/cosmos/bank/v1beta1/bank\";\nimport {Asset, ChainAssets, IBCData, IbcTransitionMock, LP_ASSETS_DECIMALS} from \"../types/asset\";\nimport {getDenomType, isFactoryDenom, isIbcDenom, isLpDenom, isNativeDenom, truncateDenom} from \"../utils/denom\";\nimport {BZE_CIRCLE_LOGO, TOKEN_LOGO_PLACEHOLDER} from \"../constants/placeholders\";\nimport {EXCLUDED_ASSETS, STABLE_COINS, VERIFIED_ASSETS} from \"../constants/assets\";\nimport {\n getAssetLists, getChainByChainId,\n getChainName,\n getChains,\n getIBCAssetList\n} from \"../constants/chain\";\nimport {getExponentByDenomFromAsset} from \"@chain-registry/utils\";\nimport {counterpartyChainForChannel, getHashIBCTrace} from \"../query/ibc\";\nimport {Asset as ChainRegistryAsset} from \"@chain-registry/types\";\nimport {denomOnFirstHopChainFromTrace} from \"../utils/ibc\";\n\nconst ORIGIN_CHAIN_PLACEHOLDER = \"Unknown chain\"\n\nconst getAssetLogo = (asset: ChainRegistryAsset): string => {\n return asset.logoURIs?.svg ?? asset.logoURIs?.png ?? asset.images?.[0]?.svg ?? asset.images?.[0]?.png ?? TOKEN_LOGO_PLACEHOLDER\n}\n\nexport const getChainAssets = async (): Promise<ChainAssets> => {\n const [metadata, supply] = await Promise.all([getAllMetadataMap(), getAllSupply()])\n const result = {\n assets: new Map<string, Asset>(),\n ibcData: new Map<string, IBCData>()\n }\n\n if (!metadata || !supply) {\n return result;\n }\n\n const filtered = supply.filter(asset => !EXCLUDED_ASSETS[asset.denom])\n const lpAssets = []\n for (const asset of filtered) {\n const baseAsset = createAsset(asset.denom, BigInt(asset.amount));\n if (isLpDenom(asset.denom)) {\n lpAssets.push(baseAsset)\n continue\n }\n let finalAsset = await populateAssetFromChainRegistry(baseAsset);\n\n if (!finalAsset) {\n const metadataEntry = metadata[asset.denom]\n finalAsset = populateAssetFromBlockchainMetadata(baseAsset, metadataEntry)\n }\n\n result.assets.set(finalAsset.denom, finalAsset)\n if (isIbcDenom(finalAsset.denom) && finalAsset.IBCData && finalAsset.IBCData.chain.channelId !== '') {\n result.ibcData.set(finalAsset.IBCData.chain.channelId, finalAsset.IBCData)\n }\n }\n\n for (const lpAsset of lpAssets) {\n const split = lpAsset.denom.split('_')\n if (split.length !== 3) {\n continue;\n }\n\n const baseAsset = result.assets.get(split[1])\n const quoteAsset = result.assets.get(split[2])\n if (!baseAsset || !quoteAsset) {\n result.assets.set(lpAsset.denom, lpAsset)\n continue;\n }\n\n lpAsset.name = `${baseAsset.ticker}/${quoteAsset.ticker} LP Shares`\n lpAsset.ticker = `${baseAsset.ticker}/${quoteAsset.ticker} LP`\n lpAsset.verified = true\n lpAsset.decimals = LP_ASSETS_DECIMALS\n\n result.assets.set(lpAsset.denom, lpAsset)\n }\n\n return result\n}\n\nconst populateIBCAsset = async (asset: Asset): Promise<Asset | undefined> => {\n const ibcList = getIBCAssetList()\n const ibcData = ibcList.find((item) => item.base === asset.denom)\n\n if (ibcData && ibcData.traces && ibcData.traces.length > 0) {\n const firstTrace = ibcData.traces.find((t) => t.type === \"ibc\") as unknown as IbcTransitionMock\n if (firstTrace) {\n const ibcAssetChain = getChains().find((c) => c.chainName === firstTrace.counterparty.chain_name)\n if (ibcAssetChain) {\n asset.name = ibcData.name\n asset.ticker = ibcData.symbol.toUpperCase()\n asset.decimals = getExponentByDenomFromAsset(ibcData, ibcData.display) ?? 0\n asset.logo = getAssetLogo(ibcData as unknown as ChainRegistryAsset)\n asset.verified = true\n asset.IBCData = {\n chain: {\n channelId: firstTrace.chain.channel_id\n },\n counterparty: {\n chainName: firstTrace.counterparty.chain_name,\n channelId: firstTrace.counterparty.channel_id,\n baseDenom: firstTrace.counterparty.base_denom,\n chainPrettyName: ibcAssetChain.prettyName ?? ibcAssetChain.chainName,\n }\n }\n\n return asset;\n }\n }\n }\n\n const ibcTrace = await getHashIBCTrace(asset.denom.replace('ibc/', ''))\n if (!ibcTrace) {\n return;\n }\n\n const splitPath = ibcTrace.path.split('/')\n if (splitPath.length < 2) {\n return\n }\n\n asset.IBCData = {\n chain: {\n channelId: splitPath[1]\n },\n counterparty: {\n chainName: \"\",\n channelId: \"\",\n baseDenom: \"\",\n chainPrettyName: ORIGIN_CHAIN_PLACEHOLDER,\n }\n }\n\n const denomOnCounterparty = await denomOnFirstHopChainFromTrace(ibcTrace)\n if (denomOnCounterparty) {\n asset.IBCData.counterparty.baseDenom = denomOnCounterparty\n }\n\n const counterPartyChain = await counterpartyChainForChannel(splitPath[1], splitPath[0])\n if (counterPartyChain) {\n asset.IBCData.counterparty.channelId = counterPartyChain.channelId\n const fullChain = getChainByChainId(counterPartyChain.chainId)\n if (fullChain) {\n asset.IBCData.counterparty.chainName = fullChain.chainName\n asset.IBCData.counterparty.chainPrettyName = fullChain.prettyName ?? fullChain.chainName\n }\n }\n\n const registryAssetChain = getAssetLists().find((item) => {\n const a = item.assets.find((i) => i.base === ibcTrace.base_denom)\n return !!a;\n })\n\n if (registryAssetChain) {\n const registryAsset = registryAssetChain.assets.find((i) => i.base === ibcTrace.base_denom) as ChainRegistryAsset\n asset.name = registryAsset.name\n asset.ticker = registryAsset.symbol.toUpperCase()\n asset.decimals = getExponentByDenomFromAsset(registryAsset, registryAsset.display) ?? 0\n asset.logo = getAssetLogo(registryAsset)\n asset.verified = true\n\n return asset;\n }\n\n const localAsset = await populateAssetFromBZEChainRegistryAssetList(asset)\n if (localAsset) {\n localAsset.verified = true\n return localAsset\n }\n\n if (!ibcTrace.base_denom.includes('/')) {\n let counterPartyDenom = ibcTrace.base_denom\n if (counterPartyDenom.length > 10) {\n counterPartyDenom = truncateDenom(counterPartyDenom)\n }\n asset.name = counterPartyDenom\n }\n\n asset.verified = false\n asset.decimals = 0\n\n return asset;\n}\n\nconst populateAssetFromChainRegistry = async (asset: Asset): Promise<Asset | undefined> => {\n if (isIbcDenom(asset.denom)) {\n return populateIBCAsset(asset)\n }\n\n if (isNativeDenom(asset.denom) || isFactoryDenom(asset.denom)) {\n return populateAssetFromBZEChainRegistryAssetList(asset)\n }\n\n return undefined\n}\n\nconst populateAssetFromBZEChainRegistryAssetList = async (asset: Asset): Promise<Asset | undefined> => {\n const data = getAssetLists().find((item) => item.chainName.toLowerCase() === getChainName().toLowerCase())\n if (!data) {\n return undefined;\n }\n\n const assetData = data.assets.find(item => item.base === asset.denom)\n if (!assetData) {\n return undefined;\n }\n\n asset.decimals = getExponentByDenomFromAsset(assetData, assetData.display) ?? 0\n asset.name = assetData.name\n asset.ticker = assetData.display.toUpperCase()\n asset.logo = isNativeDenom(asset.denom) ? BZE_CIRCLE_LOGO : getAssetLogo(assetData as unknown as ChainRegistryAsset)\n\n return asset\n}\n\nconst populateAssetFromBlockchainMetadata = (asset: Asset, meta: MetadataSDKType|undefined): Asset => {\n if (!meta || meta.base !== asset.denom) {\n return asset;\n }\n\n if (meta.name.length > 0) {\n asset.name = meta.name\n }\n if (meta.symbol.length > 0) {\n asset.ticker = meta.symbol.toUpperCase()\n }\n\n if (meta.denom_units.length === 0) {\n return asset;\n }\n\n meta.denom_units.map(unit => {\n if (unit.denom === meta.display) {\n asset.decimals = unit.exponent\n asset.ticker = unit.denom.toUpperCase()\n }\n })\n\n return asset;\n}\n\nconst createAsset = (denom: string, supply: bigint): Asset => {\n return {\n denom: denom,\n type: getDenomType(denom),\n name: truncateDenom(denom),\n ticker: truncateDenom(denom),\n decimals: 0,\n logo: TOKEN_LOGO_PLACEHOLDER,\n stable: STABLE_COINS[denom] ?? false,\n verified: VERIFIED_ASSETS[denom] ?? false,\n supply: supply,\n }\n}\n\nconst getAllMetadataMap = async () => {\n const allMetadata = await getAllSupplyMetadata()\n if (!allMetadata) {\n return {};\n }\n\n return allMetadata.reduce<Record<string, MetadataSDKType>>((acc, asset: MetadataSDKType) => {\n acc[asset.base] = asset;\n return acc;\n }, {});\n}\n","import {getSettings} from \"../storage/settings\";\nimport {CounterpartyChainForChannel, DenomTrace} from \"../types/ibc\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\n\nconst TRACES_CACHE_KEY = \"ibc:traces\";\nconst TRACES_CACHE_TTL = 5 * 60;\nconst HASH_TRACE_CACHE_TTL = 0;\nconst IBC_COUNTERPARTY_CACHE_TTL = 0;\nconst DEFAULT_LIMIT = 1000;\n\nconst getDenomTracesUrl = (limit: number): string => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/apps/transfer/v1/denom_traces?pagination.limit=${limit}`;\n}\n\nconst getHashDenomTracesUrl = (hash: string): string => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/apps/transfer/v1/denom_traces/${hash}`;\n}\n\nexport const getIBCTraces = async (): Promise<DenomTrace[]> => {\n const cached = getFromLocalStorage(TRACES_CACHE_KEY);\n if (cached) {\n return JSON.parse(cached);\n }\n\n try {\n const resp = await fetch(getDenomTracesUrl(DEFAULT_LIMIT));\n if (resp.status !== 200) {\n console.error(\"failed to fetch denom traces. status: \", resp.status);\n return [];\n }\n\n const responseJson = await resp.json();\n if (!responseJson.denom_traces) {\n return [];\n }\n\n setInLocalStorage(TRACES_CACHE_KEY, JSON.stringify(responseJson.denom_traces), TRACES_CACHE_TTL);\n\n return responseJson.denom_traces;\n } catch (e) {\n console.error(\"[IBC] failed to fetch denom traces\", e);\n return [];\n }\n}\n\nconst createHashTraceCacheKey = (hash: string): string => {\n return `${TRACES_CACHE_KEY}:${hash}`\n}\n\nexport const getHashIBCTrace = async (hash: string): Promise<DenomTrace|undefined> => {\n const cacheKey = createHashTraceCacheKey(hash);\n const cached = getFromLocalStorage(cacheKey);\n if (cached) {\n return JSON.parse(cached);\n }\n\n try {\n const resp = await fetch(getHashDenomTracesUrl(hash));\n if (resp.status !== 200) {\n console.error(\"failed to fetch hash denom trace. status: \", resp.status);\n return;\n }\n\n const responseJson = await resp.json();\n if (!responseJson.denom_trace) {\n return;\n }\n\n setInLocalStorage(cacheKey, JSON.stringify(responseJson.denom_trace), HASH_TRACE_CACHE_TTL);\n\n return responseJson.denom_trace;\n } catch (e) {\n console.error(\"[IBC] failed to fetch denom traces\", e);\n }\n\n return;\n}\n\nconst getChannelIdUrl = (channelId: string, portId: string) => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/core/channel/v1/channels/${channelId}/ports/${portId}`;\n}\n\nconst getConnectionIdUrl = (connectionId: string) => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/core/connection/v1/connections/${connectionId}`;\n}\n\nconst getClientStateUrl = (clientId: string) => {\n const settings = getSettings()\n return `${settings.endpoints.restEndpoint}/ibc/core/client/v1/client_states/${clientId}`;\n}\n\nconst getIbcCounterpartyChainIdCacheKey = (channelId: string, portId: string) => {\n return `ibc:counterparty:${channelId}:${portId}`;\n}\n\nexport const counterpartyChainForChannel = async (channelId: string, portId: string = \"transfer\"): Promise<CounterpartyChainForChannel | undefined> => {\n const cacheKey = getIbcCounterpartyChainIdCacheKey(channelId, portId);\n const cached = getFromLocalStorage(cacheKey);\n if (cached) {\n return JSON.parse(cached) as CounterpartyChainForChannel;\n }\n\n const result: CounterpartyChainForChannel = {\n chainId: \"\",\n channelId: \"\",\n }\n\n try {\n const chRes = await fetch(getChannelIdUrl(channelId, portId));\n if (!chRes.ok) {\n console.error(`[counterpartyChainForChannel] channel fetch failed: ${chRes.status} ${chRes.statusText}`);\n return undefined;\n }\n\n const chJson = await chRes.json();\n const connectionId: string | undefined = chJson?.channel?.connection_hops?.[0];\n result.channelId = chJson?.channel?.counterparty?.channel_id;\n if (!connectionId || !result.channelId) {\n console.error(`[counterpartyChainForChannel] no connection_hops for ${channelId}/${portId}`);\n return undefined;\n }\n\n const connRes = await fetch(getConnectionIdUrl(connectionId));\n if (!connRes.ok) {\n console.error(`[counterpartyChainForChannel] connection fetch failed: ${connRes.status} ${connRes.statusText}`);\n return undefined;\n }\n const connJson = await connRes.json();\n const clientId: string | undefined = connJson?.connection?.client_id;\n if (!clientId) {\n console.error(`[counterpartyChainForChannel] no client_id on ${connectionId}`);\n return undefined;\n }\n\n const csRes = await fetch(getClientStateUrl(clientId));\n if (!csRes.ok) {\n console.error(`[counterpartyChainForChannel] client_state fetch failed: ${csRes.status} ${csRes.statusText}`);\n return undefined;\n }\n const csJson = await csRes.json();\n const clientState = csJson?.client_state?.value ?? csJson?.client_state;\n const chainId: string | undefined = clientState?.chain_id ?? clientState?.chainId;\n\n if (!chainId) {\n console.error(`[counterpartyChainForChannel] chain_id missing in client_state for ${clientId}`);\n return undefined;\n }\n\n result.chainId = chainId;\n\n setInLocalStorage(cacheKey, JSON.stringify(result), IBC_COUNTERPARTY_CACHE_TTL);\n\n return result;\n } catch (err) {\n console.error(\"[counterpartyChainForChannel] unexpected error:\", err);\n return undefined;\n }\n}\n","import {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {MAINNET_CHAIN_INFO_FALLBACK, TESTNET_CHAIN_INFO_FALLBACK} from \"../constants/keplr\";\n\nasync function getKeplrMainnetChainInfo() {\n const localKey = 'ci:keplr:mainnet';\n const cachedData = getFromLocalStorage(localKey);\n if (cachedData) {\n return JSON.parse(cachedData);\n }\n\n const url = 'https://raw.githubusercontent.com/faneaatiku/keplr-chain-registry/main/cosmos/beezee.json';\n try {\n const response = await fetch(url);\n if (!response.ok) {\n console.error(`HTTP error when fetching mainnet keplr data. status: ${response.status}`);\n return MAINNET_CHAIN_INFO_FALLBACK;\n }\n\n const json = await response.json();\n setInLocalStorage(localKey, JSON.stringify(json), 60 * 60 * 24);\n return json;\n } catch (error) {\n console.error(`Error fetching mainnet keplr data from ${url}:`, error);\n return MAINNET_CHAIN_INFO_FALLBACK;\n }\n}\n\nasync function getKeplrTestnetChainInfo() {\n const localKey = 'ci:keplr:testnet';\n const cachedData = getFromLocalStorage(localKey);\n if (cachedData) {\n return JSON.parse(cachedData);\n }\n\n const url = 'https://raw.githubusercontent.com/faneaatiku/keplr-chain-registry/refs/heads/patch-2/cosmos/bzetestnet.json';\n try {\n const response = await fetch(url);\n if (!response.ok) {\n console.error(`HTTP error when fetching testnet keplr data. status: ${response.status}`);\n return TESTNET_CHAIN_INFO_FALLBACK;\n }\n\n const json = await response.json();\n setInLocalStorage(localKey, JSON.stringify(json), 60 * 60 * 24);\n return json;\n } catch (error) {\n console.error(`Error fetching testnet keplr data from ${url}:`, error);\n return TESTNET_CHAIN_INFO_FALLBACK;\n }\n}\n\nasync function getKeplrChainInfo(chainId: string) {\n if (chainId !== 'beezee') {\n return getKeplrTestnetChainInfo();\n }\n\n return getKeplrMainnetChainInfo();\n}\n\nexport async function keplrSuggestChain(chainId: string) {\n return await window.keplr?.experimentalSuggestChain(await getKeplrChainInfo(chainId))\n}\n","import {GetBlockByHeightResponseSDKType} from \"@bze/bzejs/cosmos/base/tendermint/v1beta1/query\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {getRestClient} from \"./client\";\nimport BigNumber from \"bignumber.js\";\nimport {BlockResults} from \"../types/block\";\nimport {getSettings} from \"../storage/settings\";\n\ntype FailoverBlockTimes = {\n [key: string]: string;\n};\n\nconst FAILOVER_BLOCKTIMES: FailoverBlockTimes = {\n \"9334084\": \"2023-12-07T14:30:55.034845214Z\",\n \"4423602\": \"2023-01-18T07:51:31.391193017Z\",\n \"4827583\": \"2023-02-14T03:34:27.791387761Z\",\n \"5149043\": \"2023-03-07T11:41:10.455072975Z\",\n \"10855457\": \"2024-03-17T19:41:34.031980836Z\",\n};\n\nconst BLOCK_KEY = 'tendermint:block:';\n\nexport async function getBlockDetailsByHeight(height: BigNumber): Promise<GetBlockByHeightResponseSDKType> {\n try {\n const cacheKey = `${BLOCK_KEY}${height}`;\n const localData = getFromLocalStorage(cacheKey);\n if (null !== localData) {\n const parsed = JSON.parse(localData);\n if (parsed) {\n return parsed;\n }\n }\n\n const client = await getRestClient();\n const response = await client.cosmos.base.tendermint.v1beta1.getBlockByHeight({height: BigInt(height.toFixed(0))});\n\n setInLocalStorage(cacheKey, JSON.stringify(response), 0);\n\n return response;\n } catch (e) {\n console.error(e);\n return {};\n }\n}\n\nexport async function getBlockTimeByHeight(height: BigNumber): Promise<Date | undefined> {\n const details = await getBlockDetailsByHeight(height);\n if (details.block_id === undefined) {\n if (height.toFixed(0) in FAILOVER_BLOCKTIMES) {\n return new Date(FAILOVER_BLOCKTIMES[height.toFixed(0)]);\n }\n }\n\n return details.block?.header?.time\n}\n\nexport async function getBlockResults(height: number): Promise<BlockResults | undefined> {\n const settings = getSettings();\n const rpcUrl = settings.endpoints.rpcEndpoint.replace(\"wss\", \"https\");\n const url = `${rpcUrl}/block_results?height=${height}`;\n\n try {\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n if (!response.ok) {\n console.log('not ok response from RPC: ', response);\n return undefined\n }\n\n return await response.json();\n } catch (error) {\n console.error(\"Failed to fetch block results:\", error);\n throw error;\n }\n}\n","import {RaffleSDKType, RaffleWinnerSDKType} from \"@bze/bzejs/bze/burner/raffle\";\nimport {getRestClient} from \"./client\";\nimport {getBlockResults} from \"./block\";\nimport {mapEventAttributes} from \"../utils/events\";\n\nexport async function getRaffles(): Promise<RaffleSDKType[]> {\n try {\n const client = await getRestClient();\n const response = await client.bze.burner.raffles();\n\n return response.list;\n } catch (e) {\n console.error(e);\n\n return [];\n }\n}\n\nexport async function getRaffleWinners(denom: string): Promise<RaffleWinnerSDKType[]> {\n try {\n const client = await getRestClient();\n const response = await client.bze.burner.raffleWinners({denom: denom});\n return response.list;\n } catch (e) {\n console.error(e);\n\n return [];\n }\n}\n\ninterface RaffleResult {\n hasWon: boolean;\n amount: string;\n denom: string;\n address: string;\n}\n\nexport async function checkAddressWonRaffle(address: string, denom: string, height: number): Promise<RaffleResult|undefined> {\n const response = {\n hasWon: false,\n amount: \"0\",\n denom: denom,\n address: address,\n };\n if (address == \"\" || height <= 0) {\n return undefined;\n }\n\n const blockResults = await getBlockResults(height);\n if (!blockResults) {\n return undefined;\n }\n\n if (!blockResults.result?.finalize_block_events) {\n return undefined;\n }\n\n if (blockResults.result.finalize_block_events.length === 0) {\n return undefined;\n }\n\n const raffleEvents = blockResults.result.finalize_block_events.filter(ev => ev.type.includes('Raffle'));\n if (!raffleEvents || raffleEvents.length === 0) {\n return undefined;\n }\n\n for (let i = 0; i < raffleEvents.length; i++) {\n const ev = raffleEvents[i];\n const converted = mapEventAttributes(ev.attributes)\n if ('participant' in converted && ev.type.includes('RaffleLostEvent') && converted['participant'] === address) {\n return response;\n }\n\n if ('winner' in converted && ev.type.includes('RaffleWinnerEvent') && converted['winner'] === address && converted['denom'] === denom) {\n response.hasWon = true;\n response.amount = converted['amount'];\n return response;\n }\n }\n\n return response;\n}\n","import {getRestClient} from \"./client\";\n\nexport async function getFactoryDenomAdminAddress(denom: string): Promise<string> {\n try {\n const client = await getRestClient();\n const res = await client.bze.tokenfactory.denomAuthority({denom: denom});\n\n return res.denomAuthority?.admin ?? ''\n } catch (e) {\n console.error(e);\n\n return '';\n }\n}\n","import {getPageRequestWithLimit, getRestClient} from \"./client\";\nimport {QueryAllLiquidityPoolsRequest, QueryLiquidityPoolRequest} from \"@bze/bzejs/bze/tradebin/query\";\n\nconst {fromPartial: AllLpsRequest} = QueryAllLiquidityPoolsRequest;\nconst {fromPartial: LpRequest} = QueryLiquidityPoolRequest;\n\nconst DEFAULT_LIMIT = 1000;\n\nexport const getLiquidityPools = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.bze.tradebin.allLiquidityPools(AllLpsRequest(\n {pagination: getPageRequestWithLimit(DEFAULT_LIMIT)})\n );\n\n return resp.list;\n } catch (error) {\n console.error('failed to get markets: ', error);\n }\n\n return []\n}\n\nexport const getLiquidityPool = async (poolId: string) => {\n try {\n const client = await getRestClient();\n const resp = await client.bze.tradebin.liquidityPool(LpRequest({\n poolId: poolId,\n }));\n\n return resp.pool;\n } catch (error) {\n console.error('failed to get markets: ', error);\n }\n\n return undefined\n}\n","import {getPageRequestWithLimit, getRestClient} from \"./client\";\nimport {\n QueryAllMarketsRequest,\n QueryMarketAggregatedOrdersRequest,\n QueryMarketAggregatedOrdersResponseSDKType,\n QueryMarketHistoryRequest,\n QueryMarketHistoryResponseSDKType,\n QueryMarketOrderRequest,\n QueryMarketOrderResponseSDKType,\n QueryUserMarketOrdersRequest,\n QueryUserMarketOrdersResponseSDKType,\n} from \"@bze/bzejs/bze/tradebin/query\";\nimport {ORDER_TYPE_BUY, ORDER_TYPE_SELL} from \"../types/market\";\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\nimport {OrderSDKType} from \"@bze/bzejs/bze/tradebin/store\";\n\nconst {fromPartial: AllMarketsRequest} = QueryAllMarketsRequest;\nconst {fromPartial: QueryMarketAggregatedOrdersRequestFromPartyal} = QueryMarketAggregatedOrdersRequest;\nconst {fromPartial: QueryMarketHistoryRequestFromPartial} = QueryMarketHistoryRequest;\nconst {fromPartial: QueryUserMarketOrdersRequestFromPartial} = QueryUserMarketOrdersRequest;\nconst {fromPartial: QueryMarketOrderRequestFromPartial} = QueryMarketOrderRequest;\n\nconst DEFAULT_LIMIT = 1000;\n\nexport const getMarkets = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.bze.tradebin.allMarkets(AllMarketsRequest(\n {pagination: getPageRequestWithLimit(DEFAULT_LIMIT)})\n );\n\n return resp.market;\n } catch (error) {\n console.error('failed to get markets: ', error);\n }\n\n return []\n}\n\nexport async function getMarketBuyOrders(marketId: string): Promise<QueryMarketAggregatedOrdersResponseSDKType> {\n return getMarketOrders(marketId, ORDER_TYPE_BUY);\n}\n\nexport async function getMarketSellOrders(marketId: string): Promise<QueryMarketAggregatedOrdersResponseSDKType> {\n return getMarketOrders(marketId, ORDER_TYPE_SELL);\n}\n\nexport async function getMarketOrders(marketId: string, orderType: string): Promise<QueryMarketAggregatedOrdersResponseSDKType> {\n try {\n const reversed = orderType === ORDER_TYPE_BUY;\n const client = await getRestClient();\n return client.bze.tradebin.marketAggregatedOrders(QueryMarketAggregatedOrdersRequestFromPartyal({\n market: marketId,\n orderType: orderType,\n pagination: PageRequest.fromPartial({limit: BigInt(15), reverse: reversed})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getMarketHistory(marketId: string): Promise<QueryMarketHistoryResponseSDKType> {\n try {\n const client = await getRestClient();\n return client.bze.tradebin.marketHistory(QueryMarketHistoryRequestFromPartial({\n market: marketId,\n pagination: PageRequest.fromPartial({limit: BigInt(50), reverse: true})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getAddressMarketOrders(marketId: string, address: string): Promise<QueryUserMarketOrdersResponseSDKType> {\n try {\n const client = await getRestClient();\n return client.bze.tradebin.userMarketOrders(QueryUserMarketOrdersRequestFromPartial({\n market: marketId,\n address: address,\n pagination: PageRequest.fromPartial({limit: BigInt(100), reverse: true})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getAddressFullMarketOrders(marketId: string, address: string): Promise<OrderSDKType[]> {\n const addressOrders = await getAddressMarketOrders(marketId, address);\n if (addressOrders.list.length === 0) {\n return [];\n }\n\n const promises = [];\n for (const reference of addressOrders.list) {\n promises.push(getMarketOrder(reference.market_id, reference.order_type, reference.id))\n }\n\n const orders = await Promise.all(promises);\n\n return orders.filter((item) => item !== undefined).map(resp => resp.order) as OrderSDKType[];\n}\n\nexport async function getMarketOrder(marketId: string, orderType: string, orderId: string): Promise<QueryMarketOrderResponseSDKType|undefined> {\n try {\n const client = await getRestClient();\n return client.bze.tradebin.marketOrder(QueryMarketOrderRequestFromPartial({\n market: marketId,\n orderType: orderType,\n orderId: orderId\n }));\n } catch (e) {\n console.error(e);\n return undefined;\n }\n}\n","import {getAggregatorHost} from \"../constants/endpoints\";\nimport {getFromLocalStorage, setInLocalStorage} from \"../storage/storage\";\nimport {PriceApiResponse} from \"../types/price\";\n\nconst PRICE_PATH = '/api/prices';\n\nconst usdPriceDenom = \"usd\";\nconst usdPriceCacheKey = \"price:usd\";\nconst priceCacheTtl = 5 * 60;\n\nconst getPriceUrl = (): string => {\n return `${getAggregatorHost()}${PRICE_PATH}`;\n}\n\nconst getAssetPriceCacheKey = (asset: string): string => {\n return `${usdPriceCacheKey}:${asset.toLowerCase()};`\n}\n\nconst fetchAssetUsdPrice = async (asset: string): Promise<PriceApiResponse | undefined> => {\n const cacheKey = getAssetPriceCacheKey(asset);\n const cached = getFromLocalStorage(cacheKey);\n if (cached) {\n return JSON.parse(cached);\n }\n\n try {\n const resp = await fetch(getPriceUrl());\n if (resp.status !== 200) {\n return undefined\n }\n\n const decodedResp = await resp.json();\n const result = decodedResp.find((item: PriceApiResponse) => item.denom.toLowerCase() === asset.toLowerCase() && item.price_denom.toLowerCase() === usdPriceDenom);\n\n setInLocalStorage(cacheKey, JSON.stringify(result), priceCacheTtl);\n\n return result;\n } catch (e) {\n console.log(\"error on getAssetUsdPrice: \", e);\n return undefined;\n }\n}\n\nexport const getBZEUSDPrice = async (): Promise<number> => {\n const usdPrice = await fetchAssetUsdPrice(\"bzedge\");\n if (!usdPrice) {\n return 0;\n }\n\n return usdPrice.price;\n}\n","import {\n QueryAllPendingUnlockParticipantsResponseSDKType,\n QueryAllStakingRewardsResponseSDKType, QueryStakingRewardParticipantResponseSDKType,\n} from \"@bze/bzejs/bze/rewards/query\";\nimport {bze} from '@bze/bzejs';\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\nimport {getRestClient} from \"./client\";\nimport {\n PendingUnlockParticipantSDKType,\n StakingRewardParticipantSDKType,\n} from \"@bze/bzejs/bze/rewards/store\";\nimport {AddressRewardsStaking, ExtendedPendingUnlockParticipantSDKType} from \"../types/staking\";\nimport BigNumber from \"bignumber.js\";\n\nconst {fromPartial: QueryAllStakingRewardRequestFromPartial} = bze.rewards.QueryAllStakingRewardsRequest;\nconst {fromPartial: QueryGetStakingRewardParticipantRequestFromPartial} = bze.rewards.QueryStakingRewardParticipantRequest;\nconst {fromPartial: QueryAllPendingUnlockParticipantRequestFromPartial} = bze.rewards.QueryAllPendingUnlockParticipantsRequest;\n\nexport async function getStakingRewards(reverse: boolean = true): Promise<QueryAllStakingRewardsResponseSDKType> {\n try {\n const client = await getRestClient();\n return await client.bze.rewards.allStakingRewards(QueryAllStakingRewardRequestFromPartial({\n pagination: PageRequest.fromPartial({\n reverse: reverse,\n limit: BigInt(1000)\n })\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getAddressPendingUnlock(address: string): Promise<PendingUnlockParticipantSDKType[]> {\n const all = await getPendingUnlockParticipants();\n if (!all || all.list.length === 0) {\n return [];\n }\n\n return all.list.filter((item) => item.address === address);\n}\n\nexport async function getPendingUnlockParticipants(): Promise<QueryAllPendingUnlockParticipantsResponseSDKType> {\n try {\n const client = await getRestClient();\n return client.bze.rewards.allPendingUnlockParticipants(QueryAllPendingUnlockParticipantRequestFromPartial({\n pagination: PageRequest.fromPartial({limit: BigInt(1000)})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getStakingRewardParticipantByAddress(address: string): Promise<QueryStakingRewardParticipantResponseSDKType> {\n try {\n const client = await getRestClient();\n return client.bze.rewards.stakingRewardParticipant(QueryGetStakingRewardParticipantRequestFromPartial({\n address: address,\n pagination: PageRequest.fromPartial({limit: BigInt(500)})\n }));\n } catch (e) {\n console.error(e);\n return {list: []};\n }\n}\n\nexport async function getAddressStakingRewards(address: string): Promise<AddressRewardsStaking> {\n const result = {\n address: address,\n active: new Map<string, StakingRewardParticipantSDKType>(),\n unlocking: new Map<string, ExtendedPendingUnlockParticipantSDKType[]>(),\n }\n\n if (address === \"\") {\n return result\n }\n\n try {\n const [participantRewards, pending] = await Promise.all([getStakingRewardParticipantByAddress(address), getAddressPendingUnlock(address)]);\n [result.active, result.unlocking] = await Promise.all([mapParticipantRewards(participantRewards.list), mapPendingUnlock(pending)])\n\n return result;\n } catch (e) {\n console.error(e);\n return result;\n }\n}\n\nasync function mapParticipantRewards(participantRewards: StakingRewardParticipantSDKType[]): Promise<Map<string, StakingRewardParticipantSDKType>> {\n const result = new Map<string, StakingRewardParticipantSDKType>();\n for (let i = 0; i < participantRewards.length; i++) {\n result.set(participantRewards[i].reward_id, participantRewards[i]);\n }\n return result;\n}\n\nasync function mapPendingUnlock(pending: PendingUnlockParticipantSDKType[]): Promise<Map<string, ExtendedPendingUnlockParticipantSDKType[]>> {\n const result = new Map<string, ExtendedPendingUnlockParticipantSDKType[]>\n for (let i = 0; i < pending.length; i++) {\n const splitIndex = pending[i].index.split('/');\n if (splitIndex.length !== 3) {\n console.error(\"invalid pending unlock index\", pending[i].index);\n continue;\n }\n\n const item = {\n ...pending[i],\n rewardId: splitIndex[1],\n unlockEpoch: new BigNumber(splitIndex[0]),\n }\n\n const allItems = result.get(item.rewardId) ?? [];\n allItems.push(item);\n result.set(item.rewardId, allItems);\n }\n return result;\n}\n","import {getRestClient} from \"./client\";\nimport {PageRequest} from \"@bze/bzejs/cosmos/base/query/v1beta1/pagination\";\nimport BigNumber from \"bignumber.js\";\nimport {Balance} from \"../types/balance\";\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\nimport {BondStatus, UnbondingDelegationSDKType, ValidatorSDKType} from \"@bze/bzejs/cosmos/staking/v1beta1/staking\";\nimport {NativeUnbondingSummary, UserNativeStakingRewards} from \"../types/staking\";\nimport {DelegationResponseSDKType} from \"@bze/bzejs/cosmos/staking/v1beta1/staking\";\n\nexport const getAddressDelegations = async (address: string) => {\n try {\n const client = await getRestClient();\n const response = await client.cosmos.staking.v1beta1.delegatorDelegations({\n delegatorAddr: address,\n pagination: PageRequest.fromPartial({\n limit: BigInt(1000)\n })});\n\n return response.delegation_responses;\n } catch (e) {\n console.error(\"failed to get address delegations\",e);\n return [];\n }\n}\n\nexport const getAddressNativeDelegatedBalance = async (address: string): Promise<Balance> => {\n const delegations = await getAddressDelegations(address);\n const total = delegations.reduce((acc, delegation) => {\n if (!delegation.balance) return acc;\n if (delegation.balance.denom !== getChainNativeAssetDenom()) return acc;\n return acc.plus(delegation.balance.amount);\n }, new BigNumber(0));\n\n return {\n denom: getChainNativeAssetDenom(),\n amount: total\n }\n}\n\nexport const getAddressUnbondingDelegations = async (address: string): Promise<UnbondingDelegationSDKType[]> => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.delegatorUnbondingDelegations({\n delegatorAddr: address,\n pagination: PageRequest.fromPartial({\n limit: BigInt(1000)\n })\n });\n\n return resp.unbonding_responses;\n } catch (e) {\n console.error(\"failed to get address delegations\",e);\n return [];\n }\n}\n\nexport const getAddressUnbondingDelegationsSummary = async (address: string): Promise<NativeUnbondingSummary> => {\n const unbondingDelegations = await getAddressUnbondingDelegations(address);\n let totalAmount = new BigNumber(0);\n let firstUnlockDate: Date|undefined = undefined;\n let firstUnlock: Balance|undefined = undefined;\n unbondingDelegations.map(delegation => {\n delegation.entries.forEach(entry => {\n totalAmount = totalAmount.plus(entry.balance);\n const entryDate = new Date(entry.completion_time);\n if (!firstUnlockDate || entryDate < firstUnlockDate) {\n firstUnlockDate = entryDate;\n firstUnlock = {\n amount: new BigNumber(entry.balance),\n denom: getChainNativeAssetDenom()\n }\n }\n })\n })\n\n return {\n total: {\n amount: totalAmount,\n denom: getChainNativeAssetDenom()\n },\n firstUnlock: {\n amount: firstUnlock,\n unlockTime: firstUnlockDate\n }\n }\n}\n\nexport const getAddressRewards = async (address: string) => {\n try {\n const client = await getRestClient();\n return await client.cosmos.distribution.v1beta1.delegationTotalRewards({delegatorAddress: address})\n } catch (e) {\n console.error(\"failed to get address rewards\", e);\n return {\n rewards: [],\n total: []\n }\n }\n}\n\nexport const getAddressNativeTotalRewards = async (address: string): Promise<UserNativeStakingRewards> => {\n const rewards = await getAddressRewards(address);\n const total = rewards.total.find(r => r.denom === getChainNativeAssetDenom());\n if (!total) {\n return {\n total: {\n denom: getChainNativeAssetDenom(),\n amount: new BigNumber(0)\n },\n validators: []\n }\n }\n\n const validators: string[] = [];\n rewards.rewards.map((r) => {\n const rewards = new BigNumber(r.reward.find(r => r.denom === getChainNativeAssetDenom())?.amount ?? \"0\").integerValue()\n if (!rewards.gt(0)) {\n return\n }\n validators.push(r.validator_address);\n });\n\n return {\n total: {\n denom: getChainNativeAssetDenom(),\n amount: new BigNumber(total.amount).integerValue(),\n },\n validators: validators,\n }\n}\n\nexport const getAnnualProvisions = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.mint.v1beta1.annualProvisions()\n return new BigNumber(resp.annual_provisions as unknown as string).integerValue()\n } catch (e) {\n console.error(\"failed to get annual provisions\", e);\n return new BigNumber(0);\n }\n}\n\nexport const getDistributionParams = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.distribution.v1beta1.params()\n return resp.params;\n } catch (e) {\n console.error(\"failed to get distribution params\", e);\n return {\n community_tax: \"0.05\",\n base_proposer_reward: \"0.1\",\n bonus_proposer_reward: \"0.2\",\n withdraw_addr_enabled: true,\n }\n }\n}\n\nexport const getStakingParams = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.params()\n return resp.params;\n } catch (e) {\n console.error(\"failed to get distribution params\", e);\n return {\n unbonding_time: \"1814400s\",\n max_validators: 100,\n max_entries: 7,\n historical_entries: 0,\n bond_denom: \"ubze\",\n }\n }\n}\n\nexport const getStakingPool = async () => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.pool()\n return resp.pool\n } catch (e) {\n console.error(\"failed to get staking pool\", e);\n return {\n not_bonded_tokens: \"0\",\n bonded_tokens: \"0\",\n }\n }\n}\n\nexport const getValidators = async (status: BondStatus = BondStatus.BOND_STATUS_BONDED): Promise<ValidatorSDKType[]> => {\n try {\n const client = await getRestClient();\n const statusStr = status === BondStatus.BOND_STATUS_BONDED ? \"BOND_STATUS_BONDED\" :\n status === BondStatus.BOND_STATUS_UNBONDING ? \"BOND_STATUS_UNBONDING\" :\n status === BondStatus.BOND_STATUS_UNBONDED ? \"BOND_STATUS_UNBONDED\" : \"\";\n const resp = await client.cosmos.staking.v1beta1.validators({\n status: statusStr,\n pagination: PageRequest.fromPartial({\n limit: BigInt(500)\n })\n });\n return resp.validators;\n } catch (e) {\n console.error(\"failed to get validators\", e);\n return [];\n }\n}\n\nexport const getDelegatorValidators = async (address: string): Promise<ValidatorSDKType[]> => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.delegatorValidators({\n delegatorAddr: address,\n pagination: PageRequest.fromPartial({\n limit: BigInt(500)\n })\n });\n return resp.validators;\n } catch (e) {\n console.error(\"failed to get delegator validators\", e);\n return [];\n }\n}\n\nexport const getDelegatorDelegations = async (address: string): Promise<DelegationResponseSDKType[]> => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.staking.v1beta1.delegatorDelegations({\n delegatorAddr: address,\n pagination: PageRequest.fromPartial({\n limit: BigInt(1000)\n })\n });\n return resp.delegation_responses;\n } catch (e) {\n console.error(\"failed to get delegator delegations\", e);\n return [];\n }\n}\n\nexport const getValidatorDelegatorRewards = async (address: string, validatorAddress: string) => {\n try {\n const client = await getRestClient();\n const resp = await client.cosmos.distribution.v1beta1.delegationRewards({\n delegatorAddress: address,\n validatorAddress: validatorAddress,\n });\n return resp.rewards;\n } catch (e) {\n console.error(\"failed to get validator delegator rewards\", e);\n return [];\n }\n}\n","import {MarketData} from \"../types/market\";\nimport {getAggregatorHost} from \"../constants/endpoints\";\nimport {HistoryOrder, SwapHistory} from \"../types/aggregator\";\nimport {TradeViewChart} from \"../types/charts\";\n\nconst getAllTickersUrl = (): string => {\n return `${getAggregatorHost()}/api/dex/tickers`;\n}\n\nconst getHistoryUrl = (): string => {\n return `${getAggregatorHost()}/api/dex/history`;\n}\n\nexport async function getAllTickers(): Promise<MarketData[]> {\n try {\n const resp = await fetch(getAllTickersUrl());\n if (resp.status !== 200) {\n console.error(\"failed to fetch tickers. status: \", resp.status);\n return [];\n }\n\n return await resp.json();\n } catch (e) {\n console.error(\"[AGG] failed to fetch tickers\", e);\n return [];\n }\n}\n\nexport async function getMarketOrdersHistory(marketId: string, limit: number = 1): Promise<HistoryOrder[]> {\n try {\n const url = `${getHistoryUrl()}?market_id=${marketId}&limit=${limit}`;\n const resp = await fetch(url);\n if (resp.status !== 200) {\n return [];\n }\n\n return await resp.json();\n } catch (e) {\n console.error(\"[AGG] failed to fetch market orders\", e);\n return [];\n }\n}\n\nexport async function getAddressHistory(address: string, market: string): Promise<HistoryOrder[]> {\n try {\n const url = `${getHistoryUrl()}?address=${address}&market_id=${market}&limit=100`;\n const resp = await fetch(url);\n if (resp.status !== 200) {\n return [];\n }\n\n return await resp.json();\n } catch (e) {\n console.error(\"failed to fetch address orders\", e);\n return [];\n }\n}\n\nexport async function getTradingViewIntervals(market: string, minutes: number, limit: number): Promise<TradeViewChart[]> {\n try {\n const url = `${getAggregatorHost()}/api/dex/intervals?market_id=${market}&minutes=${minutes}&limit=${limit}&format=tv`;\n const resp = await fetch(url);\n if (resp.status !== 200) {\n return [];\n }\n\n const jsonResponse = await resp.json();\n if (!jsonResponse) {\n return [];\n }\n\n return jsonResponse;\n } catch (e) {\n console.error(\"failed to fetch trading view intervals\", e);\n return [];\n }\n}\n\nexport async function getAddressSwapHistory(address: string): Promise<SwapHistory[]> {\n try {\n const url = `${getAggregatorHost()}/api/dex/swaps?address=${address}`;\n const resp = await fetch(url);\n if (resp.status !== 200) {\n console.error(\"failed to fetch swap history. status: \", resp.status);\n return [];\n }\n\n return await resp.json();\n } catch (e) {\n console.error(\"[AGG] failed to fetch swap history\", e);\n return [];\n }\n}\n","'use client';\n\nimport {createContext} from 'react';\nimport {Asset} from '../types/asset';\nimport {Market, MarketData} from '../types/market';\nimport {Balance} from '../types/balance';\nimport {LiquidityPoolSDKType} from '@bze/bzejs/bze/tradebin/store';\nimport {LiquidityPoolData} from '../types/liquidity_pool';\nimport {EpochInfoSDKType} from '@bze/bzejs/bze/epochs/epoch';\nimport {ConnectionType} from '../types/settings';\nimport {IBCData} from '../types/asset';\nimport BigNumber from 'bignumber.js';\n\nexport interface AssetsContextType {\n assetsMap: Map<string, Asset>;\n updateAssets: () => Promise<Map<string, Asset>>;\n\n marketsMap: Map<string, Market>;\n updateMarkets: () => void;\n\n marketsDataMap: Map<string, MarketData>;\n updateMarketsData: () => Promise<Map<string, MarketData>>;\n\n poolsMap: Map<string, LiquidityPoolSDKType>;\n poolsDataMap: Map<string, LiquidityPoolData>;\n updateLiquidityPools: () => Promise<void>;\n\n balancesMap: Map<string, Balance>;\n updateBalances: () => void;\n\n usdPricesMap: Map<string, BigNumber>;\n\n isLoading: boolean;\n isLoadingPrices: boolean;\n\n ibcChains: IBCData[];\n\n epochs: Map<string, EpochInfoSDKType>;\n updateEpochs: () => void;\n\n connectionType: ConnectionType;\n updateConnectionType: (conn: ConnectionType) => void;\n}\n\nexport const AssetsContext = createContext<AssetsContextType | undefined>(undefined);\n","'use client';\n\nimport {useCallback, useContext, useMemo} from 'react';\nimport {AssetsContext, AssetsContextType} from '../contexts/assets_context';\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\nimport {Asset} from \"../types/asset\";\nimport {isLpDenom, truncateDenom} from \"../utils/denom\";\n\nexport function useAssetsContext(): AssetsContextType {\n const context = useContext(AssetsContext);\n if (context === undefined) {\n throw new Error('useAssets must be used within an AssetsProvider');\n }\n return context;\n}\n\nexport function useAssets() {\n const { assetsMap, isLoading } = useAssetsContext();\n\n const nativeAsset = useMemo(() =>\n assetsMap.get(getChainNativeAssetDenom()) as Asset,\n [assetsMap]\n );\n\n const assets = useMemo(() =>\n Array.from(assetsMap.values()),\n [assetsMap]\n );\n\n const isVerifiedAsset = useCallback((denom: string) => {\n const asset = assetsMap.get(denom)\n if (!asset) {\n return false\n }\n\n return asset.verified\n }, [assetsMap])\n\n const denomTicker = useCallback((denom: string) => {\n const asset = assetsMap.get(denom)\n if (!asset) {\n return truncateDenom(denom)\n }\n\n return asset.ticker\n }, [assetsMap])\n\n const denomDecimals = useCallback((denom: string) => {\n const asset = assetsMap.get(denom)\n if (!asset) {\n return 0\n }\n\n return asset.decimals\n }, [assetsMap])\n\n const getAsset = useCallback((denom: string) => {\n return assetsMap.get(denom)\n }, [assetsMap])\n\n const assetsLpExcluded = useMemo(() => {\n return assets?.filter(item => !isLpDenom(item.denom))\n }, [assets])\n\n return {\n assets,\n isLoading,\n nativeAsset,\n isVerifiedAsset,\n denomTicker,\n denomDecimals,\n getAsset,\n assetsLpExcluded,\n };\n}\n\nexport function useAsset(denom: string) {\n const { assetsMap, isLoading } = useAssetsContext();\n\n const asset = useMemo(() =>\n assetsMap.get(denom),\n [assetsMap, denom]\n );\n\n return {\n asset,\n isLoading,\n };\n}\n\nexport function useAssetsManager() {\n const { updateAssets, isLoading } = useAssetsContext();\n return {\n updateAssets,\n isLoading\n };\n}\n\nexport function useIBCChains() {\n const {ibcChains, isLoading} = useAssetsContext()\n\n return {\n ibcChains,\n isLoading\n }\n}\n","import {useAssetsContext} from \"./useAssets\";\n\nexport function useConnectionType() {\n const {connectionType, updateConnectionType} = useAssetsContext()\n\n return {\n connectionType,\n updateConnectionType,\n }\n}\n","import {useCallback, useEffect, useRef, useState} from \"react\";\nimport {useChain} from \"@interchain-kit/react\";\nimport {getChainName} from \"../constants/chain\";\nimport {registerBzeEncoders} from \"../utils/signing_client_setup\";\n\ninterface UseSigningClientProps {\n chainName?: string;\n}\n\nexport const useSigningClient = ({chainName}: UseSigningClientProps): {\n signingClientError: unknown;\n signingClient: unknown;\n isSigningClientReady: boolean;\n} => {\n const {getSigningClient, signingClientError, wallet, chain} = useChain(chainName ?? getChainName());\n const [signingClient, setSigningClient] = useState<Awaited<ReturnType<typeof getSigningClient>>|null>(null);\n const [isSigningClientReady, setIsSigningClientReady] = useState(false);\n const hasInitialized = useRef(false);\n\n const createSigningClient = useCallback(async () => {\n return getSigningClient();\n }, [getSigningClient]);\n\n useEffect(() => {\n if (!wallet || !chain || hasInitialized.current) {\n return\n }\n\n const load = async () => {\n const client = await createSigningClient();\n if (client) {\n registerBzeEncoders(client);\n setSigningClient(client);\n setIsSigningClientReady(true);\n hasInitialized.current = true;\n }\n }\n\n load();\n }, [wallet, chain, createSigningClient]);\n\n return {\n signingClientError,\n signingClient,\n isSigningClientReady,\n }\n};\n","/**\n * Registers all BZE ecosystem message encoders and amino converters on a signing client.\n *\n * This is required because interchain-kit creates signing clients without any message\n * encoders pre-registered. Without this, signAndBroadcast and fee simulation will fail\n * with \"No encoder/converter found for type\" errors.\n *\n * Covers all modules used across dex.getbze.com, burner.getbze.com, app.getbze.com,\n * and stake.getbze.com. Add new message types here when new modules are introduced.\n */\n\n// BZE modules\nimport {\n MsgCreateMarket, MsgCreateOrder, MsgCancelOrder, MsgFillOrders,\n MsgCreateLiquidityPool, MsgAddLiquidity, MsgRemoveLiquidity, MsgMultiSwap,\n} from \"@bze/bzejs/bze/tradebin/tx\";\nimport {\n MsgCreateStakingReward, MsgUpdateStakingReward, MsgJoinStaking, MsgExitStaking,\n MsgClaimStakingRewards, MsgCreateTradingReward, MsgActivateTradingReward,\n} from \"@bze/bzejs/bze/rewards/tx\";\nimport {MsgFundBurner, MsgStartRaffle, MsgJoinRaffle} from \"@bze/bzejs/bze/burner/tx\";\nimport {MsgCreateDenom, MsgMint, MsgBurn, MsgChangeAdmin, MsgSetDenomMetadata} from \"@bze/bzejs/bze/tokenfactory/tx\";\nimport {MsgAddArticle, MsgPayPublisherRespect, MsgAcceptDomain, MsgSavePublisher} from \"@bze/bzejs/bze/cointrunk/tx\";\n\n// Cosmos modules\nimport {MsgSend, MsgMultiSend} from \"@bze/bzejs/cosmos/bank/v1beta1/tx\";\nimport {\n MsgDelegate, MsgUndelegate, MsgBeginRedelegate, MsgCancelUnbondingDelegation,\n} from \"@bze/bzejs/cosmos/staking/v1beta1/tx\";\nimport {\n MsgSetWithdrawAddress, MsgWithdrawDelegatorReward, MsgWithdrawValidatorCommission,\n MsgFundCommunityPool,\n} from \"@bze/bzejs/cosmos/distribution/v1beta1/tx\";\nimport {\n MsgSubmitProposal, MsgVote, MsgVoteWeighted, MsgDeposit, MsgCancelProposal,\n} from \"@bze/bzejs/cosmos/gov/v1/tx\";\nimport {MsgGrant, MsgExec, MsgRevoke} from \"@bze/bzejs/cosmos/authz/v1beta1/tx\";\nimport {MsgGrantAllowance, MsgRevokeAllowance} from \"@bze/bzejs/cosmos/feegrant/v1beta1/tx\";\n\n// IBC\nimport {MsgTransfer} from \"@bze/bzejs/ibc/applications/transfer/v1/tx\";\n\ntype MsgCodec = {\n typeUrl: string;\n aminoType?: string;\n fromPartial: (object: any) => any;\n encode: (message: any, writer?: any) => any;\n fromAmino?: (object: any) => any;\n toAmino?: (message: any) => any;\n};\n\nconst toEncoder = (g: MsgCodec) => ({\n typeUrl: g.typeUrl,\n fromPartial: g.fromPartial,\n encode: (data: any) => {\n const encoded = g.encode(g.fromPartial(data));\n return encoded.finish ? encoded.finish() : encoded;\n },\n});\n\nconst toConverter = (g: MsgCodec) => ({\n typeUrl: g.typeUrl,\n aminoType: g.aminoType,\n fromAmino: g.fromAmino,\n toAmino: g.toAmino,\n});\n\nconst ALL_MSG_TYPES: MsgCodec[] = [\n // BZE tradebin\n MsgCreateMarket, MsgCreateOrder, MsgCancelOrder, MsgFillOrders,\n MsgCreateLiquidityPool, MsgAddLiquidity, MsgRemoveLiquidity, MsgMultiSwap,\n // BZE rewards\n MsgCreateStakingReward, MsgUpdateStakingReward, MsgJoinStaking, MsgExitStaking,\n MsgClaimStakingRewards, MsgCreateTradingReward, MsgActivateTradingReward,\n // BZE burner\n MsgFundBurner, MsgStartRaffle, MsgJoinRaffle,\n // BZE tokenfactory\n MsgCreateDenom, MsgMint, MsgBurn, MsgChangeAdmin, MsgSetDenomMetadata,\n // BZE cointrunk\n MsgAddArticle, MsgPayPublisherRespect, MsgAcceptDomain, MsgSavePublisher,\n // Cosmos bank\n MsgSend, MsgMultiSend,\n // Cosmos staking\n MsgDelegate, MsgUndelegate, MsgBeginRedelegate, MsgCancelUnbondingDelegation,\n // Cosmos distribution\n MsgSetWithdrawAddress, MsgWithdrawDelegatorReward, MsgWithdrawValidatorCommission,\n MsgFundCommunityPool,\n // Cosmos gov\n MsgSubmitProposal, MsgVote, MsgVoteWeighted, MsgDeposit, MsgCancelProposal,\n // Cosmos authz\n MsgGrant, MsgExec, MsgRevoke,\n // Cosmos feegrant\n MsgGrantAllowance, MsgRevokeAllowance,\n // IBC transfer\n MsgTransfer,\n];\n\nexport const registerBzeEncoders = (client: any): void => {\n if (!client) return;\n client.addEncoders?.(ALL_MSG_TYPES.map(toEncoder));\n client.addConverters?.(ALL_MSG_TYPES.map(toConverter));\n};\n","import {getChainNativeAssetDenom, getUSDCDenom} from \"../constants/assets\";\nimport {createMarketId} from \"../utils/market\";\nimport BigNumber from \"bignumber.js\";\nimport {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {toBigNumber, uAmountToBigNumberAmount} from \"../utils/amount\";\n\nexport function useAssetPrice(denom: string) {\n const {usdPricesMap, marketsDataMap, isLoadingPrices} = useAssetsContext()\n\n const usdDenom = useMemo(() => getUSDCDenom(), []);\n const bzeDenom = useMemo(() => getChainNativeAssetDenom(), [])\n\n const change = useMemo(() => {\n const marketData = marketsDataMap.get(createMarketId(denom, usdDenom))\n if (marketData) {\n return marketData.change\n }\n\n const marketData2 = marketsDataMap.get(createMarketId(denom, bzeDenom))\n if (marketData2) {\n return marketData2.change\n }\n\n return 0\n }, [marketsDataMap, denom, usdDenom, bzeDenom]);\n\n const price = useMemo(() => {\n const zeroBN = toBigNumber(0)\n if (denom === '') return zeroBN;\n\n if (denom === usdDenom) return toBigNumber(1)\n\n return usdPricesMap.get(denom) || zeroBN\n }, [usdPricesMap, denom, usdDenom]);\n\n const totalUsdValue = useCallback((amount: BigNumber): BigNumber => {\n return price.multipliedBy(amount)\n }, [price]);\n\n const uAmountUsdValue = useCallback((amount: BigNumber, decimals: number): BigNumber => {\n return totalUsdValue(uAmountToBigNumberAmount(amount, decimals))\n }, [totalUsdValue]);\n\n const isUSDC = useMemo(() => denom === usdDenom, [denom, usdDenom]);\n const hasPrice = useMemo(() => price.gt(0), [price]);\n\n return {\n price,\n change,\n totalUsdValue,\n uAmountUsdValue,\n isLoading: isLoadingPrices,\n hasPrice,\n isUSDC,\n }\n}\n","'use client';\n\nimport { useState, useEffect, useCallback, useMemo } from 'react'\nimport { AppSettings, BeeZeeEndpoints } from '../types/settings'\nimport { DEFAULT_SETTINGS } from '../constants/settings'\nimport {getSettings, setSettings} from \"../storage/settings\";\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\n\n// Custom hook for managing application settings\nexport function useSettings() {\n const [settings, setSettingsState] = useState<AppSettings>(DEFAULT_SETTINGS)\n const [isLoaded, setIsLoaded] = useState(false)\n\n // Load settings from localStorage on mount\n useEffect(() => {\n setSettingsState(getSettings())\n setIsLoaded(true)\n }, [])\n\n // Save settings to localStorage\n const saveSettings = useCallback((newSettings: AppSettings): boolean => {\n setSettings(newSettings)\n setSettingsState(newSettings)\n return true\n }, [])\n\n // Update endpoint configuration\n const updateEndpoints = useCallback((endpoints: BeeZeeEndpoints): boolean => {\n const newSettings = { ...settings, endpoints }\n return saveSettings(newSettings)\n }, [settings, saveSettings])\n\n // Update preferred fee denom\n const updatePreferredFeeDenom = useCallback((preferredFeeDenom?: string): boolean => {\n const newSettings = { ...settings, preferredFeeDenom }\n return saveSettings(newSettings)\n }, [settings, saveSettings])\n\n // Reset all settings to default values\n const resetToDefaults = useCallback((): boolean => {\n saveSettings(DEFAULT_SETTINGS)\n return true\n }, [saveSettings])\n\n // Get current endpoint configuration\n const getEndpoints = useCallback((): BeeZeeEndpoints => {\n return settings.endpoints\n }, [settings.endpoints])\n\n const defaultSettings = useMemo(() => DEFAULT_SETTINGS, [])\n\n const feeDenom = useMemo(() => settings.preferredFeeDenom || getChainNativeAssetDenom(), [settings.preferredFeeDenom])\n\n return {\n settings,\n isLoaded,\n saveSettings,\n updateEndpoints,\n updatePreferredFeeDenom,\n resetToDefaults,\n getEndpoints,\n defaultSettings,\n feeDenom,\n }\n}\n","import BigNumber from \"bignumber.js\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {Asset} from \"../types/asset\";\nimport {uAmountToBigNumberAmount} from \"../utils/amount\";\nimport {getUSDCDenom} from \"../constants/assets\";\nimport {useMemo, useCallback} from \"react\";\n\nexport interface AssetBalance extends Asset {\n amount: BigNumber;\n USDValue: BigNumber;\n}\n\nexport function useBalances() {\n const { balancesMap, isLoading, assetsMap, usdPricesMap } = useAssetsContext()\n\n const balances = useMemo(() => Array.from(balancesMap.values()), [balancesMap])\n\n const getBalanceByDenom = useCallback((denom: string) => {\n return balancesMap.get(denom) || { denom, amount: BigNumber(0) }\n }, [balancesMap])\n\n const assetsBalances = useMemo(() => {\n const result: AssetBalance[] = []\n balances.map(bal => {\n const asset = assetsMap.get(bal.denom)\n if (!asset) {\n return\n }\n\n let usdPrice = usdPricesMap.get(bal.denom)\n if (!usdPrice) {\n usdPrice = BigNumber(0)\n }\n\n if (asset.denom === getUSDCDenom()) {\n usdPrice = BigNumber(1)\n }\n\n result.push({\n ...asset,\n amount: bal.amount,\n USDValue: uAmountToBigNumberAmount(bal.amount, asset.decimals).multipliedBy(usdPrice)\n })\n })\n\n return result\n }, [balances, assetsMap, usdPricesMap])\n\n return {\n isLoading,\n balances,\n assetsBalances,\n getBalanceByDenom\n }\n}\n\nexport function useBalance(denom: string) {\n const { balancesMap, isLoading } = useAssetsContext()\n\n const balance = useMemo(() =>\n balancesMap.get(denom) || {\n denom,\n amount: BigNumber(0)\n },\n [balancesMap, denom]\n )\n\n const hasAmount = useCallback((amount: BigNumber|string): boolean => {\n return balance.amount.gte(amount)\n }, [balance])\n\n return {\n balance,\n isLoading,\n hasAmount,\n }\n}\n","import {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {EpochInfoSDKType} from \"@bze/bzejs/bze/epochs/epoch\";\nimport BigNumber from \"bignumber.js\";\n\nconst EPOCH_HOUR = \"hour\";\nconst EPOCH_DAY = \"day\";\nconst EPOCH_WEEK = \"week\";\n\nfunction getEpochDurationByIdentifier(identifier: string): number {\n const hourMs = 60 * 60 * 1000;\n switch (identifier) {\n case EPOCH_HOUR:\n return hourMs;\n case EPOCH_DAY:\n return hourMs * 24;\n case EPOCH_WEEK:\n return hourMs * 24 * 7;\n default:\n return hourMs;\n }\n}\n\nexport function useEpochs() {\n const {epochs, isLoading, updateEpochs} = useAssetsContext()\n\n const getCurrentEpoch = useCallback((identifier: string): EpochInfoSDKType | undefined => {\n return epochs.get(identifier);\n }, [epochs]);\n\n const hourEpochInfo = useMemo((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_HOUR);\n }, [epochs])\n\n const dayEpochInfo = useMemo((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_DAY);\n }, [epochs])\n\n const weekEpochInfo = useMemo((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_WEEK);\n }, [epochs])\n\n const getHourEpochInfo = useCallback((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_HOUR);\n }, [epochs]);\n\n const getDayEpochInfo = useCallback((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_DAY);\n }, [epochs]);\n\n const getWeekEpochInfo = useCallback((): EpochInfoSDKType | undefined => {\n return epochs.get(EPOCH_WEEK);\n }, [epochs]);\n\n const getPeriodicEpochEndTime = useCallback((identifier: string, modWeek: number = 1): Date | undefined => {\n const epoch = epochs.get(identifier);\n if (!epoch || !epoch.current_epoch_start_time) {\n return undefined;\n }\n const current = new BigNumber(epoch.current_epoch);\n let remainingEpochs = modWeek - (current.toNumber() % modWeek);\n if (remainingEpochs === modWeek) {\n remainingEpochs = 0;\n }\n\n const startAt = new Date(epoch.current_epoch_start_time);\n const duration = getEpochDurationByIdentifier(identifier);\n startAt.setTime(startAt.getTime() + duration + (duration * remainingEpochs));\n\n return startAt;\n }, [epochs]);\n\n const getCurrentWeekEpochEndTime = useCallback((): Date | undefined => {\n return getPeriodicEpochEndTime(EPOCH_WEEK);\n }, [getPeriodicEpochEndTime]);\n\n const getPeriodicWeekEpochEndTime = useCallback((modWeek: number = 1): Date | undefined => {\n return getPeriodicEpochEndTime(EPOCH_WEEK, modWeek);\n }, [getPeriodicEpochEndTime]);\n\n const epochsList = useMemo(() => Array.from(epochs.values()), [epochs]);\n\n return {\n epochs: epochsList,\n epochsMap: epochs,\n hourEpochInfo,\n dayEpochInfo,\n weekEpochInfo,\n isLoading,\n updateEpochs,\n getCurrentEpoch,\n getHourEpochInfo,\n getDayEpochInfo,\n getWeekEpochInfo,\n getCurrentWeekEpochEndTime,\n getPeriodicWeekEpochEndTime,\n getPeriodicEpochEndTime,\n }\n}\n\nexport function useEpochsManager() {\n const { updateEpochs, isLoading } = useAssetsContext();\n return {\n updateEpochs,\n isLoading,\n };\n}\n","import {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {LiquidityPoolSDKType} from \"@bze/bzejs/bze/tradebin/store\";\nimport {createPoolId, poolIdFromPoolDenom, calculatePoolOppositeAmount} from \"../utils/liquidity_pool\";\nimport {toBigNumber} from \"../utils/amount\";\nimport {Asset} from \"../types/asset\";\nimport {LiquidityPoolData} from \"../types/liquidity_pool\";\nimport BigNumber from \"bignumber.js\";\n\nexport function useLiquidityPools() {\n const {poolsMap, poolsDataMap, updateLiquidityPools, isLoading, assetsMap} = useAssetsContext()\n\n const pools = useMemo((): LiquidityPoolSDKType[] => {\n return Array.from(poolsMap.values())\n }, [poolsMap])\n\n const getPoolByLpDenom = (lpDenom: string) => {\n const poolId = poolIdFromPoolDenom(lpDenom);\n return poolsMap.get(poolId);\n }\n\n const getDenomsPool = useCallback((denomA: string, denomB: string) => {\n const poolId = createPoolId(denomA, denomB)\n return poolsMap.get(poolId)\n }, [poolsMap])\n\n const liquidAssets = useMemo(() => {\n if (!assetsMap || assetsMap.size === 0) return [];\n\n const result = new Map<string, Asset|undefined>();\n pools.forEach(pool => {\n result.set(pool.base, assetsMap.get(pool.base))\n result.set(pool.quote, assetsMap.get(pool.quote))\n })\n\n return Array.from(result.values()).filter(asset => asset !== undefined)\n }, [assetsMap, pools])\n\n return {\n pools,\n poolsMap,\n poolsData: poolsDataMap,\n poolsDataMap,\n isLoading,\n updateLiquidityPools,\n getPoolByLpDenom,\n getDenomsPool,\n liquidAssets,\n }\n}\n\nexport function useAssetLiquidityPools(denom: string) {\n const {poolsMap, poolsDataMap, isLoading} = useAssetsContext()\n\n const assetPools = useMemo(() => {\n return Array.from(poolsMap.values()).filter(pool =>\n pool.base === denom || pool.quote === denom\n )\n }, [poolsMap, denom])\n\n const assetPoolsData = useMemo(() => {\n const newMap = new Map<string, LiquidityPoolData>()\n if (isLoading || denom === '') return newMap\n\n assetPools.forEach(pool => {\n const poolData = poolsDataMap.get(pool.id)\n if (poolData) {\n newMap.set(pool.id, poolData)\n }\n })\n\n return newMap\n }, [assetPools, poolsDataMap, isLoading, denom])\n\n const asset24HoursVolume = useMemo(() => {\n let volume = BigNumber(0)\n if (isLoading || denom === '') return volume\n\n assetPoolsData.forEach((poolData) => {\n if (poolData.base === denom) {\n volume = volume.plus(poolData.baseVolume)\n } else if (poolData.quote === denom) {\n volume = volume.plus(poolData.quoteVolume)\n }\n })\n\n return volume\n }, [isLoading, assetPoolsData, denom])\n\n return {\n assetPools,\n poolsDataMap,\n isLoading,\n asset24HoursVolume,\n assetPoolsData,\n }\n}\n\nexport function useLiquidityPool(poolId: string) {\n const {balancesMap, assetsMap, poolsMap, poolsDataMap, isLoading} = useAssetsContext()\n\n const pool = useMemo(() => poolsMap.get(poolId), [poolsMap, poolId])\n const poolData = useMemo(() => poolsDataMap.get(poolId), [poolsDataMap, poolId])\n\n const userShares = useMemo(() => {\n if (!pool) return toBigNumber(0)\n const balance = balancesMap.get(pool.lp_denom)\n if (!balance) return toBigNumber(0)\n return toBigNumber(balance.amount)\n }, [balancesMap, pool])\n\n const totalShares = useMemo(() => {\n if (!assetsMap || !pool) return toBigNumber(0)\n const sharesAsset = assetsMap.get(pool.lp_denom)\n if (!sharesAsset) return toBigNumber(0)\n return toBigNumber(sharesAsset?.supply || 0)\n }, [assetsMap, pool])\n\n const userSharesPercentage = useMemo(() => {\n if (!userShares || !totalShares || totalShares.isZero()) {\n return toBigNumber(0);\n }\n return userShares.dividedBy(totalShares).multipliedBy(100).toFixed(2);\n }, [userShares, totalShares])\n\n const userReserveBase = useMemo(() => {\n if (!pool || !userShares || !totalShares || totalShares.isZero()) {\n return toBigNumber(0);\n }\n const reserveBase = toBigNumber(pool.reserve_base);\n return userShares.dividedBy(totalShares).multipliedBy(reserveBase);\n }, [pool, userShares, totalShares])\n\n const userReserveQuote = useMemo(() => {\n if (!pool || !userShares || !totalShares || totalShares.isZero()) {\n return toBigNumber(0);\n }\n const reserveQuote = toBigNumber(pool.reserve_quote);\n return userShares.dividedBy(totalShares).multipliedBy(reserveQuote);\n }, [pool, userShares, totalShares])\n\n const calculateOppositeAmount = useCallback((amount: string | BigNumber, isBase: boolean): BigNumber => {\n if (!pool) {\n return toBigNumber(0);\n }\n return calculatePoolOppositeAmount(pool, amount, isBase);\n }, [pool])\n\n const calculateSharesFromAmounts = useCallback((baseAmount: string | BigNumber, quoteAmount: string | BigNumber): BigNumber => {\n if (!pool || !totalShares) {\n return toBigNumber(0);\n }\n\n const baseAmountBN = toBigNumber(baseAmount);\n const quoteAmountBN = toBigNumber(quoteAmount);\n\n if (baseAmountBN.isZero() || baseAmountBN.isNaN() || quoteAmountBN.isZero() || quoteAmountBN.isNaN()) {\n return toBigNumber(0);\n }\n\n const reserveBase = toBigNumber(pool.reserve_base);\n const reserveQuote = toBigNumber(pool.reserve_quote);\n\n if (reserveBase.isZero() || reserveQuote.isZero() || totalShares.isZero()) {\n return toBigNumber(0);\n }\n\n const baseRatio = baseAmountBN.dividedBy(reserveBase);\n const quoteRatio = quoteAmountBN.dividedBy(reserveQuote);\n const mintRatio = BigNumber.minimum(baseRatio, quoteRatio);\n const tokensToMint = mintRatio.multipliedBy(totalShares);\n\n return tokensToMint.integerValue(BigNumber.ROUND_DOWN);\n }, [pool, totalShares])\n\n return {\n isLoading,\n pool,\n poolData,\n userShares,\n totalShares,\n userSharesPercentage,\n userReserveBase,\n userReserveQuote,\n calculateOppositeAmount,\n calculateSharesFromAmounts,\n }\n}\n","import {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {toBigNumber, uAmountToBigNumberAmount} from \"../utils/amount\";\nimport BigNumber from \"bignumber.js\";\nimport {PrettyBalance} from \"../types/balance\";\n\nexport function useAssetsValue() {\n const {assetsMap, usdPricesMap, balancesMap, isLoading: isLoadingPrices} = useAssetsContext()\n\n /**\n * Calculate total USD value of an array of PrettyBalance items.\n */\n const totalUsdValue = useCallback((prettyBalances: PrettyBalance[]) => {\n let usdValue = BigNumber(0)\n prettyBalances.map((denomBalance: PrettyBalance) => {\n const assetPrice = usdPricesMap.get(denomBalance.denom)\n if (assetPrice && assetPrice.gt(0)) {\n usdValue = usdValue.plus(assetPrice.multipliedBy(denomBalance.amount))\n }\n })\n\n return usdValue\n }, [usdPricesMap])\n\n /**\n * Calculate total USD value of all wallet balances.\n */\n const walletTotalUsdValue = useMemo(() => {\n let total = toBigNumber(0)\n balancesMap.forEach((balance, denom) => {\n const price = usdPricesMap.get(denom)\n if (!price || !price.gt(0)) return\n\n const asset = assetsMap.get(denom)\n if (!asset) return\n\n total = total.plus(price.multipliedBy(uAmountToBigNumberAmount(balance.amount, asset.decimals)))\n })\n return total\n }, [balancesMap, usdPricesMap, assetsMap])\n\n const denomUsdValue = useCallback((denom: string, uAmount: BigNumber): BigNumber => {\n const price = usdPricesMap.get(denom)\n if (!price || !price.gt(0)) return toBigNumber(0)\n\n const asset = assetsMap.get(denom)\n if (!asset) return toBigNumber(0)\n\n return price.multipliedBy(uAmountToBigNumberAmount(uAmount, asset.decimals))\n }, [usdPricesMap, assetsMap])\n\n const compareValues = useCallback((a: PrettyBalance, b: PrettyBalance) => {\n let aValue = BigNumber(0)\n const aPrice = usdPricesMap.get(a.denom)\n if (aPrice) {\n aValue = aPrice.multipliedBy(a.amount)\n }\n let bValue = BigNumber(0)\n const bPrice = usdPricesMap.get(b.denom)\n if (bPrice) {\n bValue = bPrice.multipliedBy(b.amount)\n }\n\n return aValue.comparedTo(bValue) ?? 0\n }, [usdPricesMap])\n\n return {\n totalUsdValue,\n walletTotalUsdValue,\n denomUsdValue,\n compareValues,\n isLoading: isLoadingPrices,\n }\n}\n","import { useMemo } from \"react\";\nimport { useLiquidityPools } from \"./useLiquidityPools\";\nimport { getChainNativeAssetDenom } from \"../constants/assets\";\nimport { useAssetsContext } from \"./useAssets\";\nimport {toBigNumber} from \"../utils/amount\";\n\nconst MIN_LIQUIDITY_FOR_FEE_TOKEN = 50000000000;\n\nexport function useFeeTokens() {\n const { pools, isLoading: poolsLoading } = useLiquidityPools();\n const { assetsMap, isLoading: assetsLoading } = useAssetsContext();\n const nativeDenom = getChainNativeAssetDenom();\n\n const feeTokens = useMemo(() => {\n if (poolsLoading || assetsLoading) {\n return [];\n }\n\n const feeTokenDenoms = new Set<string>();\n\n pools.forEach(pool => {\n if (pool.base === nativeDenom && toBigNumber(pool.reserve_base).gt(MIN_LIQUIDITY_FOR_FEE_TOKEN)) {\n feeTokenDenoms.add(pool.quote);\n } else if (pool.quote === nativeDenom && toBigNumber(pool.reserve_quote).gt(MIN_LIQUIDITY_FOR_FEE_TOKEN)) {\n feeTokenDenoms.add(pool.base);\n }\n });\n\n const tokens = Array.from(feeTokenDenoms)\n .map(denom => assetsMap.get(denom))\n .filter(asset => asset !== undefined)\n .sort((a, b) => {\n if (!a || !b) return 0;\n return a.denom.localeCompare(b.denom);\n })\n\n const bzeAsset = assetsMap.get(nativeDenom);\n if (!bzeAsset) {\n return tokens;\n }\n\n return [bzeAsset, ...tokens];\n }, [pools, poolsLoading, assetsLoading, nativeDenom, assetsMap]);\n\n return {\n feeTokens,\n isLoading: poolsLoading || assetsLoading,\n nativeDenom\n };\n}\n","import {useCallback, useMemo} from \"react\";\nimport {useAssetsContext} from \"./useAssets\";\nimport {Market, MarketData} from \"../types/market\";\nimport {toBigNumber, uAmountToBigNumberAmount} from \"../utils/amount\";\nimport {truncateDenom} from \"../utils/denom\";\nimport BigNumber from \"bignumber.js\";\n\nexport function useMarkets() {\n const {marketsMap, marketsDataMap, updateMarkets, isLoading} = useAssetsContext()\n\n const markets = useMemo((): Market[] => {\n return Array.from(marketsMap.values())\n }, [marketsMap])\n\n const marketsData = useMemo(() => Array.from(marketsDataMap.values()), [marketsDataMap])\n\n const marketExists = useCallback((marketId: string): boolean => marketsMap.has(marketId), [marketsMap])\n\n const getMarketData = useCallback((marketId: string): MarketData | undefined => marketsDataMap.get(marketId), [marketsDataMap])\n const getMarket = useCallback((marketId: string): Market | undefined => marketsMap.get(marketId), [marketsMap])\n\n return {\n markets,\n marketsData,\n marketsMap,\n marketsDataMap,\n isLoading,\n updateMarkets,\n marketExists,\n getMarketData,\n getMarket,\n }\n}\n\nexport function useAssetMarkets(denom: string) {\n const { isLoading, marketsMap, marketsDataMap } = useAssetsContext()\n\n const markets = useMemo(() => Array.from(marketsMap.values()), [marketsMap])\n const marketsData = useMemo(() => Array.from(marketsDataMap.values()), [marketsDataMap])\n\n const assetMarkets = useMemo((): Market[] => {\n const baseMatches = []\n const quoteMatches = []\n\n for (const market of markets) {\n if (market.base === denom) baseMatches.push(market)\n else if (market.quote === denom) quoteMatches.push(market)\n }\n\n return [...baseMatches, ...quoteMatches]\n }, [markets, denom])\n\n const assetMarketsData = useMemo((): MarketData[] => {\n const baseMatches = []\n const quoteMatches = []\n\n for (const market of marketsData) {\n if (market.base === denom) baseMatches.push(market)\n else if (market.quote === denom) quoteMatches.push(market)\n }\n\n return [...baseMatches, ...quoteMatches]\n }, [marketsData, denom])\n\n const asset24hTradedVolume = useMemo((): BigNumber => {\n return assetMarketsData.reduce((acc, market) => {\n if (denom === market.base) {\n return acc.plus(market.base_volume || 0)\n } else if (denom === market.quote) {\n return acc.plus(market.quote_volume || 0)\n }\n return acc\n }, new BigNumber(0))\n }, [assetMarketsData, denom])\n\n return {\n isLoading,\n assetMarkets,\n assetMarketsData,\n asset24hTradedVolume,\n }\n}\n\n/**\n * Hook to get a market by its ID string.\n */\nexport function useMarket(marketId: string) {\n const { marketsMap, marketsDataMap, isLoading, assetsMap } = useAssetsContext()\n\n const market = useMemo(() => marketsMap.get(marketId), [marketsMap, marketId])\n\n const marketSymbol = useMemo((): string => {\n if (isLoading) return \"\"\n if (!market) return \"\"\n\n let base = assetsMap.get(market.base)?.ticker\n if (!base) {\n base = truncateDenom(market.base)\n }\n\n let quote = assetsMap.get(market.quote)?.ticker\n if (!quote) {\n quote = truncateDenom(market.quote)\n }\n\n return `${base}/${quote}`\n }, [market, isLoading, assetsMap])\n\n const marketData = useMemo(() => marketsDataMap.get(marketId), [marketsDataMap, marketId])\n\n const marketExists = useMemo(() => !!market, [market])\n\n const volume24h = useMemo(() => {\n if (!marketData || !market) return toBigNumber(0);\n const quoteAsset = assetsMap.get(market.quote);\n if (!quoteAsset) return toBigNumber(0);\n return uAmountToBigNumberAmount(toBigNumber(marketData.quote_volume), quoteAsset.decimals);\n }, [marketData, assetsMap, market])\n\n return {\n isLoading,\n market,\n marketData,\n marketSymbol,\n marketId,\n marketExists,\n volume24h,\n }\n}\n\nexport function useMarketsManager() {\n const { updateMarkets, isLoading } = useAssetsContext();\n return {\n updateMarkets,\n isLoading\n };\n}\n","'use client';\n\nimport { useCallback, useMemo } from 'react';\nimport { toaster } from '../components/toaster';\n\nexport const useToast = () => {\n const clickableSuccess = useCallback((title: string, actionFn: () => void, actionLabel?: string, description?: string, duration = 5000) => {\n toaster.create({\n title,\n description,\n type: 'success',\n duration,\n closable: true,\n action: {\n label: actionLabel ?? '',\n onClick: actionFn,\n }\n });\n }, []);\n\n const success = useCallback((title: string, description?: string, duration = 5000) => {\n toaster.create({\n title,\n description,\n type: 'success',\n duration,\n closable: true,\n });\n }, []);\n\n const error = useCallback((title: string, description?: string, duration = 8000) => {\n toaster.create({\n title,\n description,\n type: 'error',\n duration,\n closable: true,\n });\n }, []);\n\n const warning = useCallback((title: string, description?: string, duration = 6000) => {\n toaster.create({\n title,\n description,\n type: 'warning',\n duration,\n closable: true,\n });\n }, []);\n\n const info = useCallback((title: string, description?: string, duration = 5000) => {\n toaster.create({\n title,\n description,\n type: 'info',\n duration,\n closable: true,\n });\n }, []);\n\n const loading = useCallback((title: string, description?: string) => {\n return toaster.create({\n title,\n description,\n type: 'loading',\n closable: false,\n });\n }, []);\n\n const dismiss = useCallback((id: string) => {\n toaster.dismiss(id);\n }, []);\n\n const toast = useMemo(() => ({\n clickableSuccess,\n success,\n error,\n warning,\n info,\n loading,\n dismiss,\n }), [clickableSuccess, success, error, warning, info, loading, dismiss]);\n\n return { toast };\n};\n","'use client'\n\nimport {\n Toaster as ChakraToaster,\n Portal,\n Spinner,\n Stack,\n Toast,\n createToaster,\n} from \"@chakra-ui/react\"\n\nexport const toaster = createToaster({\n placement: \"top-end\",\n pauseOnPageIdle: true,\n})\n\nexport const Toaster = () => {\n return (\n <Portal>\n <ChakraToaster toaster={toaster} insetInline={{ mdDown: \"4\" }}>\n {(toast) => (\n <Toast.Root width={{ md: \"sm\" }}>\n {toast.type === \"loading\" ? (\n <Spinner size=\"sm\" color=\"blue.solid\" />\n ) : (\n <Toast.Indicator />\n )}\n <Stack gap=\"1\" flex=\"1\" maxWidth=\"100%\">\n {toast.title && <Toast.Title>{toast.title}</Toast.Title>}\n {toast.description && (\n <Toast.Description>{toast.description}</Toast.Description>\n )}\n </Stack>\n {toast.action && (\n <Toast.ActionTrigger>{toast.action.label}</Toast.ActionTrigger>\n )}\n {toast.closable && <Toast.CloseTrigger />}\n </Toast.Root>\n )}\n </ChakraToaster>\n </Portal>\n )\n}\n","import {DeliverTxResponse, EncodeObject, StdFee} from \"@bze/bzejs/types\";\nimport {TxBody, SignerInfo} from \"@bze/bzejs/cosmos/tx/v1beta1/tx\";\nimport {useChain} from \"@interchain-kit/react\";\nimport {getChainExplorerURL, getChainName, getGasMultiplier} from \"../constants/chain\";\nimport {useToast} from \"./useToast\";\nimport {prettyError} from \"../utils/user_errors\";\nimport {getChainNativeAssetDenom} from \"../constants/assets\";\nimport {useSigningClient} from \"./useSigningClient\";\nimport {openExternalLink, sleep} from \"../utils/functions\";\nimport BigNumber from \"bignumber.js\";\nimport {DEFAULT_TX_MEMO} from \"../constants/placeholders\";\nimport {useCallback, useMemo, useState} from \"react\";\nimport {useLiquidityPools} from \"./useLiquidityPools\";\nimport {useSettings} from \"./useSettings\";\nimport {calculatePoolOppositeAmount} from \"../utils/liquidity_pool\";\nimport {toBigNumber} from \"../utils/amount\";\nimport {coins} from \"../utils/coins\";\n\nexport interface TxOptions {\n fee?: StdFee | null;\n onSuccess?: (res: DeliverTxResponse) => void;\n onFailure?: (err: string) => void;\n memo?: string;\n progressTrackerTimeout?: number;\n}\n\nexport enum TxStatus {\n Failed = 'Transaction Failed',\n Successful = 'Transaction Successful',\n Broadcasting = 'Transaction Pending',\n}\n\nconst defaultFee = {\n amount: coins(20000, getChainNativeAssetDenom()),\n gas: \"500000\"\n}\n\nexport const useSDKTx = (chainName?: string) => {\n const {tx, progressTrack} = useTx(chainName ?? getChainName());\n\n return {\n tx,\n progressTrack\n }\n}\n\nexport const useBZETx = () => {\n const {tx, progressTrack} = useTx(getChainName());\n\n return {\n tx,\n progressTrack,\n }\n}\n\nexport const useIBCTx = (chainName?: string) => {\n const {tx, progressTrack} = useTx(chainName ?? getChainName());\n\n return {\n tx,\n progressTrack\n }\n}\n\nconst useTx = (chainName: string) => {\n const {address, disconnect} = useChain(chainName);\n const {toast} = useToast();\n const {signingClient, isSigningClientReady, signingClientError} = useSigningClient({chainName: chainName});\n const [progressTrack, setProgressTrack] = useState(\"\")\n const {getDenomsPool} = useLiquidityPools()\n const {feeDenom} = useSettings()\n\n const defaultChainName = useMemo(() => getChainName(), []);\n\n const canUseClient = useCallback(async () => {\n if (!isSigningClientReady) {\n //TODO: this is a hack to make sure the signing client is ready. Remove this when we have a better way to\n // do this\n console.error(\"waiting for signing client to be ready\", signingClientError)\n\n await sleep(1_000)\n }\n\n return isSigningClientReady\n }, [isSigningClientReady, signingClientError]);\n\n const simulateFee = useCallback(async (messages: EncodeObject[], memo: string | undefined): Promise<StdFee> => {\n const gasPrice = 0.02;\n const nativeDenom = getChainNativeAssetDenom();\n const signer = signingClient as any;\n\n // Encode messages into TxBody using the signer's own encoders\n const encodedMessages = messages.map(({typeUrl, value}) => {\n const encoder = signer.getEncoder(typeUrl);\n const encodedWriter = encoder.encode(value);\n const encodedValue = typeof encodedWriter?.finish === 'function' ? encodedWriter.finish() : encodedWriter;\n return {typeUrl, value: encodedValue};\n });\n const txBody = TxBody.fromPartial({messages: encodedMessages, memo: memo ?? ''});\n // BZE ante handler checks sequence even in simulation — use the real sequence\n const sequence = await signer.getSequence(address);\n const signerInfo = SignerInfo.fromPartial({modeInfo: {single: {mode: 1}}, sequence});\n const {gasInfo} = await signer.simulateByTxBody(txBody, [signerInfo]);\n const gasEstimated = Number(gasInfo?.gasUsed ?? BigInt(0));\n if (gasEstimated === 0) {\n throw new Error(\"Gas simulation returned 0\");\n }\n\n const gasAmount = BigNumber(gasEstimated).multipliedBy(getGasMultiplier());\n const gasPayment = gasAmount.multipliedBy(gasPrice);\n const nativeFee = {\n amount: coins(gasPayment.toFixed(0).toString(), nativeDenom),\n gas: gasAmount.toFixed(0)\n }\n\n //user wants to pay in the fee in native denomination\n if (feeDenom === nativeDenom) {\n return nativeFee;\n }\n\n //search for the pool for the fee denom and calculate the expected amount\n const pool = getDenomsPool(feeDenom, nativeDenom)\n if (!pool) {\n return nativeFee;\n }\n\n //calculate how much amount we need to pay for fee in the opposite denomination\n let expectedAmount = calculatePoolOppositeAmount(pool, gasPayment, pool.base === nativeDenom)\n if (!expectedAmount.isPositive()) {\n return nativeFee;\n }\n expectedAmount = expectedAmount.multipliedBy(1.5).integerValue(BigNumber.ROUND_FLOOR)\n //if the fee resulted from swapping the fee amount is lower than 1, it can't be paid.\n //we have to make sure the blockchain can capture the swap fee.\n if (expectedAmount.multipliedBy(pool.fee).lt(1)) {\n expectedAmount = toBigNumber(1).dividedBy(pool.fee).integerValue(BigNumber.ROUND_CEIL)\n }\n\n return {\n amount: coins(expectedAmount.toFixed(0).toString(), feeDenom),\n gas: gasAmount.multipliedBy(1.5).toFixed(0)\n };\n }, [signingClient, address, feeDenom, getDenomsPool]);\n\n const getFee = useCallback(async (messages: EncodeObject[], options?: TxOptions|undefined): Promise<StdFee> => {\n try {\n if (options?.fee) {\n return options.fee;\n } else {\n setProgressTrack(\"Simulating transaction\")\n return await simulateFee(messages, options?.memo);\n }\n } catch (e) {\n console.error(\"could not get fee, using default fee: \", e);\n return defaultFee;\n }\n }, [simulateFee]);\n\n const tx = useCallback(async (msgs: EncodeObject[], options?: TxOptions|undefined) => {\n if (!address) {\n toast.error(TxStatus.Failed, 'Please connect the wallet')\n return;\n }\n\n if (!(await canUseClient())) {\n toast.error(TxStatus.Failed, 'Can not find suitable signing client. Make sure your wallet is installed, connected and unlocked.')\n disconnect()\n return;\n }\n\n setProgressTrack(\"Getting fee\")\n const broadcastToastId = toast.loading(TxStatus.Broadcasting,'Waiting for transaction to be signed and included in block')\n if (signingClient) {\n try {\n const fee = await getFee(msgs, options);\n setProgressTrack(\"Signing transaction\")\n const broadcastResult = await (signingClient as any).signAndBroadcast(address, msgs, fee, options?.memo ?? DEFAULT_TX_MEMO)\n setProgressTrack(\"Waiting for confirmation\")\n const resp = await broadcastResult.wait();\n const txHash = resp?.txhash || broadcastResult.transactionHash;\n if (resp?.code === 0) {\n setProgressTrack(\"Transaction sent\")\n toast.clickableSuccess(TxStatus.Successful, () => {openExternalLink(`${getChainExplorerURL(chainName ?? defaultChainName)}/tx/${txHash}`)}, 'View in Explorer');\n\n if (options?.onSuccess) {\n options.onSuccess(resp)\n }\n } else {\n setProgressTrack(\"Transaction failed\")\n toast.error(TxStatus.Failed, prettyError(resp?.rawLog));\n if (options?.onFailure) {\n options.onFailure(prettyError(resp?.rawLog) || \"Unknown error\")\n }\n }\n } catch (e) {\n console.error(e);\n //@ts-expect-error - small chances for e to be undefined\n if (e.message.includes(\"Failed to retrieve account from signer\")) {\n disconnect()\n }\n // @ts-expect-error - small chances for e to be undefined\n toast.error(TxStatus.Failed, prettyError(e?.message));\n if (options?.onFailure) {\n // @ts-expect-error - small chances for e to be undefined\n options.onFailure(prettyError(e?.message) || \"Unknown error\")\n }\n }\n }\n toast.dismiss(broadcastToastId);\n setTimeout(() => {\n setProgressTrack(\"\")\n }, options?.progressTrackerTimeout || 5000)\n }, [address, canUseClient, toast, signingClient, disconnect, getFee, chainName, defaultChainName]);\n\n return {\n tx,\n progressTrack\n };\n};\n","import {useCallback, useEffect, useRef, useState} from 'react';\n\nconst KEYBASE_API_URL = 'https://keybase.io/_/api/1.0/user/lookup.json';\nconst LOGOS_STORAGE_KEY = 'validator_logos';\nconst LOGOS_TTL = 24 * 60 * 60 * 1000; // 24 hours\n\ninterface ValidatorIdentity {\n operatorAddress: string;\n identity: string;\n}\n\n/**\n * Fetches validator logo URLs from Keybase using their identity field.\n * Results are cached in localStorage for 24 hours.\n *\n * @param validators - array of objects with operator_address and description.identity\n * @returns Record mapping operator_address to image URL (or empty string if none)\n */\nexport const useValidatorLogos = (\n validators: Array<{ operator_address: string; description?: { identity?: string } | null }>\n): { logos: Record<string, string>; isLoading: boolean } => {\n const [logos, setLogos] = useState<Record<string, string>>({});\n const [isLoading, setIsLoading] = useState(false);\n const fetchedRef = useRef(false);\n const validatorCountRef = useRef(0);\n\n const fetchLogos = useCallback(async (identities: ValidatorIdentity[]) => {\n if (identities.length === 0) return {};\n\n // Check cache\n let cached: Record<string, string> | null = null;\n try {\n const raw = typeof window !== 'undefined' ? localStorage.getItem(LOGOS_STORAGE_KEY) : null;\n if (raw) {\n const parsed = JSON.parse(raw);\n if (parsed && typeof parsed === 'object' && parsed.data && (!parsed.expiry || Date.now() < parsed.expiry)) {\n cached = parsed.data;\n }\n }\n } catch { /* ignore */ }\n\n if (cached) {\n const allCached = identities.every(\n (v) => v.operatorAddress in cached!\n );\n if (allCached) {\n return cached;\n }\n }\n\n const result: Record<string, string> = cached ?? {};\n\n // Only fetch identities not already cached\n const toFetch = identities.filter((v) => !(v.operatorAddress in result));\n if (toFetch.length === 0) return result;\n\n // Chunk requests to avoid overwhelming the Keybase API\n const chunkSize = 20;\n for (let i = 0; i < toFetch.length; i += chunkSize) {\n const chunk = toFetch.slice(i, i + chunkSize);\n\n const chunkResults = await Promise.all(\n chunk.map(async ({operatorAddress, identity}) => {\n if (!identity) {\n return {operatorAddress, url: ''};\n }\n try {\n const resp = await fetch(\n `${KEYBASE_API_URL}?key_suffix=${encodeURIComponent(identity)}&fields=pictures`\n );\n const data = await resp.json();\n const url = data?.them?.[0]?.pictures?.primary?.url ?? '';\n return {operatorAddress, url};\n } catch {\n return {operatorAddress, url: ''};\n }\n })\n );\n\n for (const {operatorAddress, url} of chunkResults) {\n result[operatorAddress] = url;\n }\n\n // Rate-limit between chunks\n if (i + chunkSize < toFetch.length) {\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n // Cache results\n try {\n if (typeof window !== 'undefined') {\n localStorage.setItem(LOGOS_STORAGE_KEY, JSON.stringify({\n data: result,\n expiry: Date.now() + LOGOS_TTL,\n }));\n }\n } catch { /* ignore */ }\n\n return result;\n }, []);\n\n useEffect(() => {\n if (!validators || validators.length === 0) return;\n // Only re-fetch if validators list changed size (avoids repeated fetches on re-renders)\n if (fetchedRef.current && validatorCountRef.current === validators.length) return;\n\n const identities: ValidatorIdentity[] = validators.map((v) => ({\n operatorAddress: v.operator_address,\n identity: v.description?.identity ?? '',\n }));\n\n setIsLoading(true);\n fetchedRef.current = true;\n validatorCountRef.current = validators.length;\n\n fetchLogos(identities)\n .then((result) => {\n setLogos(result);\n })\n .catch(console.error)\n .finally(() => {\n setIsLoading(false);\n });\n }, [validators, fetchLogos]);\n\n return {logos, isLoading};\n};\n","'use client'\n\nimport { Text, TextProps } from '@chakra-ui/react'\nimport { useEffect, useRef, useState } from 'react'\n\ninterface HighlightTextProps extends TextProps {\n /**\n * Duration of the highlight effect in milliseconds\n * @default 1000\n */\n duration?: number\n\n /**\n * Whether to highlight the text on initial mount\n * @default false\n */\n highlightOnMount?: boolean\n\n /**\n * Color to use for the highlight effect\n * @default 'blue.500'\n */\n highlightColor?: string\n\n /**\n * Intensity of the highlight effect\n * - 'subtle': Lower opacity highlight (15%)\n * - 'evident': Higher opacity highlight (30%)\n * @default 'subtle'\n */\n highlightIntensity?: 'subtle' | 'evident'\n\n /**\n * The text content to display and monitor for changes\n */\n children: React.ReactNode\n}\n\nexport const HighlightText = ({\n duration = 200,\n highlightOnMount = false,\n highlightColor = 'blue.500',\n highlightIntensity = 'subtle',\n children,\n ...textProps\n}: HighlightTextProps) => {\n const [isHighlighted, setIsHighlighted] = useState(false)\n const isMountedRef = useRef(false)\n const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined)\n\n // Convert children to a string for comparison\n const childrenString = String(children)\n const previousValueRef = useRef<string>(childrenString)\n\n // Get opacity and shadow based on intensity\n const highlightOpacity = highlightIntensity === 'subtle' ? '15' : '50'\n const boxShadowStrength = highlightIntensity === 'subtle' ? '10' : '25'\n\n useEffect(() => {\n // Check if this is the first mount\n if (!isMountedRef.current) {\n isMountedRef.current = true\n\n // Highlight on mount if requested\n if (highlightOnMount) {\n setIsHighlighted(true)\n timeoutRef.current = setTimeout(() => {\n setIsHighlighted(false)\n }, duration)\n }\n\n previousValueRef.current = childrenString\n return\n }\n\n // Check if the actual value changed (not just reference)\n if (previousValueRef.current !== childrenString) {\n // Clear any existing timeout\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n\n // Trigger highlight\n setIsHighlighted(true)\n\n // Remove highlight after duration\n timeoutRef.current = setTimeout(() => {\n setIsHighlighted(false)\n }, duration)\n\n // Update previous value\n previousValueRef.current = childrenString\n }\n\n // Cleanup timeout on unmount\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n }\n }\n }, [childrenString, duration, highlightOnMount])\n\n return (\n <Text\n {...textProps}\n transition={`all ${duration}ms ease-out`}\n bg={isHighlighted ? `${highlightColor}/${highlightOpacity}` : 'transparent'}\n boxShadow={isHighlighted ? `0 0 0 ${highlightIntensity === 'evident' ? '4px' : '3px'} ${highlightColor}/${boxShadowStrength}` : 'none'}\n borderRadius=\"md\"\n px={isHighlighted ? '2' : '0'}\n transform={isHighlighted && highlightIntensity === 'evident' ? 'scale(1.02)' : 'scale(1)'}\n fontWeight={isHighlighted && highlightIntensity === 'evident' ? 'semibold' : textProps.fontWeight}\n >\n {children}\n </Text>\n )\n}\n","'use client'\n\nimport { Icon, IconButton, Portal } from '@chakra-ui/react'\nimport type { PropsWithChildren } from 'react'\nimport { LuX } from 'react-icons/lu'\nimport { useState } from 'react'\n\ninterface SidebarProps extends PropsWithChildren {\n trigger: React.ReactNode\n ariaLabel: string\n}\n\nexport const Sidebar = ({ children, trigger, ariaLabel }: SidebarProps) => {\n const [isOpen, setIsOpen] = useState(false)\n\n const handleTriggerClick = () => {\n setIsOpen(true)\n }\n\n const handleClose = () => {\n setIsOpen(false)\n }\n\n return (\n <>\n {/* Trigger Button */}\n <div onClick={handleTriggerClick} style={{ cursor: 'pointer' }}>\n {trigger}\n </div>\n\n {/* Sidebar Overlay */}\n {isOpen && (\n <Portal>\n {/* Backdrop */}\n <div\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: '3',\n display: 'block',\n }}\n onClick={(e) => {\n // Only close if clicking the backdrop itself, not child elements\n if (e.target === e.currentTarget) {\n handleClose()\n }\n }}\n />\n\n {/* Sidebar Content */}\n <div\n id=\"sidebar-content\"\n style={{\n position: 'fixed',\n top: 0,\n right: 0,\n bottom: 0,\n width: window.innerWidth < 768 ? '100vw' : '20vw',\n minWidth: window.innerWidth < 768 ? '100vw' : '300px',\n maxWidth: window.innerWidth < 768 ? '100vw' : '400px',\n backgroundColor: 'var(--chakra-colors-bg-panel)',\n borderLeft: '1px solid var(--chakra-colors-border-subtle)',\n boxShadow: window.innerWidth >= 768 ? '-4px 0 12px rgba(0, 0, 0, 0.15)' : 'none',\n zIndex: '99',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }}\n >\n {/* Header */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '1rem',\n borderBottom: '1px solid var(--chakra-colors-border-subtle)',\n backgroundColor: 'var(--chakra-colors-bg-panel)',\n flexShrink: 0,\n }}\n >\n <h3\n style={{\n fontSize: '1.125rem',\n fontWeight: '600',\n margin: 0,\n color: 'var(--chakra-colors-fg)',\n }}\n >\n {ariaLabel}\n </h3>\n <IconButton\n aria-label=\"Close sidebar\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClose}\n >\n <Icon size=\"md\">\n <LuX />\n </Icon>\n </IconButton>\n </div>\n\n {/* Content Area */}\n <div\n style={{\n padding: '1rem',\n flex: 1,\n overflowY: 'auto',\n backgroundColor: 'var(--chakra-colors-bg-panel)',\n position: 'relative',\n }}\n >\n {children}\n </div>\n </div>\n </Portal>\n )}\n </>\n )\n}\n","'use client'\n\nimport {\n VStack,\n HStack,\n Text,\n Switch,\n Button,\n Separator,\n Box,\n Input,\n Badge,\n createListCollection,\n} from '@chakra-ui/react'\nimport { Select, Portal } from '@chakra-ui/react'\nimport { useTheme } from \"next-themes\"\nimport {useState, useEffect, useMemo, useCallback} from 'react'\nimport { useSettings } from '../../hooks/useSettings'\nimport {convertToWebSocketUrl, validateEndpoints} from '../../utils/validation'\nimport {\n CONNECTION_TYPE_NONE,\n CONNECTION_TYPE_POLLING,\n CONNECTION_TYPE_WS,\n} from '../../types/settings'\nimport type { EndpointValidationResults } from '../../types/settings'\nimport {useToast} from \"../../hooks/useToast\"\nimport {useConnectionType} from \"../../hooks/useConnectionType\"\nimport {useFeeTokens} from \"../../hooks/useFeeTokens\"\nimport {getChainNativeAssetDenom} from \"../../constants/assets\"\n\ninterface SettingsSidebarContentProps {\n accentColor?: string\n}\n\nexport const SettingsSidebarContent = ({ accentColor = 'blue' }: SettingsSidebarContentProps) => {\n const { setTheme, resolvedTheme} = useTheme()\n const {toast} = useToast()\n const { settings, isLoaded, updateEndpoints, updatePreferredFeeDenom, defaultSettings } = useSettings()\n const {connectionType} = useConnectionType()\n const { feeTokens, isLoading: feeTokensLoading } = useFeeTokens()\n\n // Local form state\n const [restEndpoint, setRestEndpoint] = useState('')\n const [rpcEndpoint, setRpcEndpoint] = useState('')\n const [isValidating, setIsValidating] = useState(false)\n const [validationResults, setValidationResults] = useState<EndpointValidationResults>({})\n const [preferredFeeDenom, setPreferredFeeDenom] = useState<string | undefined>(undefined)\n\n // Initialize form with loaded settings\n useEffect(() => {\n if (isLoaded) {\n setRestEndpoint(settings.endpoints.restEndpoint)\n setRpcEndpoint(settings.endpoints.rpcEndpoint)\n setPreferredFeeDenom(settings.preferredFeeDenom || getChainNativeAssetDenom())\n }\n }, [isLoaded, settings])\n\n const handleValidateEndpoints = useCallback(async (rest: string, rpc: string) => {\n setIsValidating(true)\n setValidationResults({})\n\n try {\n const results = await validateEndpoints(rest, rpc)\n setValidationResults({\n rest: results.rest,\n rpc: results.rpc\n })\n } catch (error) {\n console.error(error)\n setValidationResults({\n rest: { isValid: false, error: 'Validation failed' },\n rpc: { isValid: false, error: 'Validation failed' }\n })\n } finally {\n setIsValidating(false)\n setTimeout(() => setValidationResults({}), 10_000)\n }\n }, [])\n\n const handleSaveSettings = useCallback(async (rest: string, rpc: string, feeDenom?: string) => {\n setValidationResults({})\n const results = await validateEndpoints(rest, rpc)\n if (!results.isValid) {\n setValidationResults({\n rest: results.rest,\n rpc: results.rpc\n })\n\n setTimeout(() => setValidationResults({}), 10_000)\n\n return\n }\n\n const endpointsSuccess = updateEndpoints({\n restEndpoint: rest.trim(),\n rpcEndpoint: convertToWebSocketUrl(rpc.trim())\n })\n\n const feeTokenSuccess = updatePreferredFeeDenom(feeDenom)\n\n if (endpointsSuccess && feeTokenSuccess) {\n toast.success('Success!', 'Settings have been saved.')\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const handleResetToDefaults = useCallback(() => {\n setRestEndpoint(defaultSettings.endpoints.restEndpoint)\n setRpcEndpoint(defaultSettings.endpoints.rpcEndpoint)\n setPreferredFeeDenom(defaultSettings.preferredFeeDenom)\n setValidationResults({})\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const connectionStatusText = useMemo(() => {\n switch(connectionType) {\n case CONNECTION_TYPE_NONE:\n return 'Failed'\n case CONNECTION_TYPE_POLLING:\n return 'Polling'\n case CONNECTION_TYPE_WS:\n return 'Connected'\n }\n }, [connectionType])\n\n const connectionStatusBadgeColor = useMemo(() => {\n switch(connectionType) {\n case CONNECTION_TYPE_NONE:\n return 'red'\n case CONNECTION_TYPE_POLLING:\n return 'orange'\n case CONNECTION_TYPE_WS:\n return 'green'\n }\n }, [connectionType])\n\n // Create fee tokens collection for select\n const feeTokensCollection = useMemo(() => createListCollection({\n items: feeTokens.map(token => ({\n label: token.ticker || token.name,\n value: token.denom,\n name: token.ticker || token.name,\n }))\n }), [feeTokens])\n\n const handleFeeTokenChange = useCallback((denom: string) => {\n setPreferredFeeDenom(denom || undefined)\n }, [])\n\n const hasUnsavedChanges =\n restEndpoint !== settings.endpoints.restEndpoint ||\n rpcEndpoint !== settings.endpoints.rpcEndpoint ||\n preferredFeeDenom !== settings.preferredFeeDenom\n\n return (\n <VStack gap=\"6\" align=\"stretch\">\n {/* Appearance Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n Appearance\n </Text>\n <VStack gap=\"3\" align=\"stretch\">\n <HStack justify=\"space-between\">\n <Text fontSize=\"sm\">Dark Mode</Text>\n <Switch.Root\n checked={resolvedTheme === 'dark'}\n onCheckedChange={(details) => {\n const newTheme = details.checked ? 'dark' : 'light'\n setTheme(newTheme)\n }}\n >\n <Switch.HiddenInput />\n <Switch.Control>\n <Switch.Thumb />\n </Switch.Control>\n </Switch.Root>\n </HStack>\n </VStack>\n </Box>\n\n <Separator />\n\n {/* Fee Token Preference Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n Fee Token Preference\n </Text>\n <VStack gap=\"3\" align=\"stretch\">\n <Box>\n <Select.Root\n collection={feeTokensCollection}\n size=\"sm\"\n value={preferredFeeDenom ? [preferredFeeDenom] : ['']}\n onValueChange={(details) => handleFeeTokenChange(details.value[0] || '')}\n disabled={feeTokensLoading}\n >\n <Select.Label>Preferred Fee Token</Select.Label>\n <Select.HiddenSelect />\n <Select.Control>\n <Select.Trigger>\n <Select.ValueText placeholder=\"Native Token (default)\" />\n </Select.Trigger>\n <Select.IndicatorGroup>\n <Select.Indicator />\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <Select.Content>\n {feeTokensCollection.items.map((item) => (\n <Select.Item key={item.value} item={item}>\n <Text>{item.label}</Text>\n <Select.ItemIndicator />\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Positioner>\n </Portal>\n </Select.Root>\n <Text fontSize=\"xs\" color=\"fg.muted\" mt=\"2\">\n Select your preferred token for paying transaction fees. Only tokens with liquidity pools paired with the native token are available.\n </Text>\n </Box>\n </VStack>\n </Box>\n\n <Separator />\n\n {/* BeeZee Endpoints Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n BeeZee Endpoints\n </Text>\n\n <VStack gap=\"4\" align=\"stretch\">\n <Box>\n <HStack gap=\"2\" align=\"center\" justify=\"space-between\">\n <Text fontSize=\"sm\" mb=\"1\">Status: </Text>\n <Badge colorPalette={connectionStatusBadgeColor}>{connectionStatusText}</Badge>\n </HStack>\n </Box>\n {/* REST Endpoint */}\n <Box>\n <Text fontSize=\"sm\" mb=\"1\">REST Endpoint</Text>\n <Text fontSize=\"xs\" color=\"fg.muted\" mb=\"2\">\n Note: Endpoint must have CORS enabled to work in browser\n </Text>\n <Input\n size=\"sm\"\n placeholder=\"https://rest.getbze.com\"\n value={restEndpoint}\n onChange={(e) => setRestEndpoint(e.target.value)}\n />\n {validationResults.rest && (\n <Box\n mt=\"2\"\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={validationResults.rest.isValid ? \"green.500/15\" : \"red.500/15\"}\n gradientTo={validationResults.rest.isValid ? \"green.600/15\" : \"red.600/15\"}\n borderWidth=\"1px\"\n borderColor={validationResults.rest.isValid ? \"green.500/30\" : \"red.500/30\"}\n borderRadius=\"md\"\n >\n <Text fontSize=\"sm\" color={validationResults.rest.isValid ? \"green.700\" : \"red.700\"} _dark={{color: validationResults.rest.isValid ? \"green.300\" : \"red.300\"}}>\n {validationResults.rest.error || 'REST endpoint is valid'}\n </Text>\n </Box>\n )}\n </Box>\n\n {/* RPC Endpoint */}\n <Box>\n <Text fontSize=\"sm\" mb=\"1\">RPC Endpoint</Text>\n <Text fontSize=\"xs\" color=\"fg.muted\" mb=\"2\">\n Note: Must support WebSocket (WS/WSS) connections\n </Text>\n <Input\n size=\"sm\"\n placeholder=\"wss://rpc.getbze.com\"\n value={rpcEndpoint}\n onChange={(e) => setRpcEndpoint(e.target.value)}\n />\n {validationResults.rpc && (\n <Box\n mt=\"2\"\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={validationResults.rpc.isValid ? \"green.500/15\" : \"red.500/15\"}\n gradientTo={validationResults.rpc.isValid ? \"green.600/15\" : \"red.600/15\"}\n borderWidth=\"1px\"\n borderColor={validationResults.rpc.isValid ? \"green.500/30\" : \"red.500/30\"}\n borderRadius=\"md\"\n >\n <Text fontSize=\"sm\" color={validationResults.rpc.isValid ? \"green.700\" : \"red.700\"} _dark={{color: validationResults.rpc.isValid ? \"green.300\" : \"red.300\"}}>\n {validationResults.rpc.error || 'RPC endpoint is valid'}\n </Text>\n </Box>\n )}\n </Box>\n\n {/* Validation Button */}\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => handleValidateEndpoints(restEndpoint, rpcEndpoint)}\n loading={isValidating}\n disabled={!restEndpoint.trim() || !rpcEndpoint.trim()}\n >\n {isValidating ? 'Validating...' : 'Validate Endpoints'}\n </Button>\n </VStack>\n </Box>\n\n {/* Action Buttons */}\n <Box>\n <VStack gap=\"3\">\n <Button\n size=\"sm\"\n width=\"full\"\n onClick={() => handleSaveSettings(restEndpoint, rpcEndpoint, preferredFeeDenom)}\n colorPalette={accentColor}\n disabled={!hasUnsavedChanges}\n >\n Save Settings\n </Button>\n <Button\n size=\"sm\"\n width=\"full\"\n variant=\"outline\"\n onClick={handleResetToDefaults}\n >\n Reset to Defaults\n </Button>\n </VStack>\n </Box>\n </VStack>\n )\n}\n","'use client'\nimport \"@interchain-kit/react/styles.css\";\nimport {InterchainWalletModal, useChain} from \"@interchain-kit/react\";\nimport {\n Badge,\n Box,\n Button,\n createListCollection,\n Field,\n Group,\n HStack,\n Image,\n Input,\n Portal,\n Select,\n Separator,\n Text,\n Textarea,\n VStack,\n} from '@chakra-ui/react'\nimport {LuCopy, LuExternalLink, LuX} from 'react-icons/lu'\nimport {useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {getChainExplorerURL, getChainName} from \"../../constants/chain\";\nimport {WalletState} from \"@interchain-kit/core\";\nimport {stringTruncateFromCenter} from \"../../utils/strings\";\nimport {useBalances} from \"../../hooks/useBalances\";\nimport type {AssetBalance} from \"../../hooks/useBalances\";\nimport {isIbcDenom, isLpDenom} from \"../../utils/denom\";\n\nimport {amountToUAmount, prettyAmount, uAmountToAmount, uAmountToBigNumberAmount} from \"../../utils/amount\";\nimport {getChainNativeAssetDenom} from \"../../constants/assets\";\nimport {sanitizeNumberInput} from \"../../utils/number\";\nimport {validateBZEBech32Address} from \"../../utils/address\";\nimport BigNumber from \"bignumber.js\";\nimport {useToast} from \"../../hooks/useToast\";\nimport {useSDKTx} from \"../../hooks/useTx\";\nimport {cosmos} from \"@bze/bzejs\";\nimport {openExternalLink} from \"../../utils/functions\";\nimport {shortNumberFormat} from \"../../utils/formatter\";\nimport {HighlightText} from \"../highlight\";\n\ntype ViewState = 'balances' | 'send'\n\ninterface WalletSidebarContentProps {\n accentColor?: string\n}\n\ninterface BalanceItemProps {\n asset: AssetBalance;\n onClick: () => void;\n accentColor: string;\n}\n\nconst validateAmount = (amount: string, coin: AssetBalance|undefined, onError:(msg: string) => void) => {\n if (!coin) return\n if (amount === \"\") return\n\n const amountNumber = BigNumber(amount)\n if (amountNumber.isNaN()) {\n onError('Invalid amount')\n return\n }\n\n const coinBalance = uAmountToBigNumberAmount(coin.amount, coin.decimals)\n if (coinBalance.isLessThan(amount)) {\n onError('Insufficient balance')\n } else {\n onError('')\n }\n}\n\nconst BalanceItem = ({asset, onClick, accentColor}: BalanceItemProps) => {\n const [showSendButton, setShowSendButton] = useState(false)\n const formattedBalanceAmount = useMemo(() => {\n return prettyAmount(uAmountToBigNumberAmount(asset.amount, asset.decimals ?? 0))\n }, [asset.amount, asset.decimals])\n\n const formattedBalanceUSDValue = useMemo(() => {\n return shortNumberFormat(asset.USDValue)\n }, [asset.USDValue])\n\n return (\n <Box\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={`${accentColor}.500/5`}\n gradientTo={`${accentColor}.600/5`}\n borderRadius=\"md\"\n borderWidth=\"1px\"\n borderColor={`${accentColor}.500/15`}\n _hover={{\n gradientFrom: `${accentColor}.500/10`,\n gradientTo: `${accentColor}.600/10`,\n borderColor: `${accentColor}.500/25`\n }}\n transition=\"all 0.2s\"\n onMouseLeave={() => setShowSendButton(false)}\n onMouseEnter={() => setShowSendButton(true)}\n >\n <HStack justify=\"space-between\" mb=\"2\">\n <HStack>\n <Image\n src={asset.logo}\n alt={asset.ticker}\n width=\"20px\"\n height=\"20px\"\n borderRadius=\"full\"\n />\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n {asset.ticker}\n </Text>\n <Text fontSize=\"xs\" color=\"fg.muted\">\n {asset.name}\n </Text>\n {isIbcDenom(asset.denom) && (\n <Badge size=\"xs\" colorPalette={accentColor}>\n IBC\n </Badge>\n )}\n </HStack>\n {showSendButton && (\n <HStack justify=\"end\">\n <Button size='2xs' variant={'outline'} onClick={onClick}>Send</Button>\n </HStack>\n )}\n </HStack>\n <HStack justify=\"space-between\">\n <HighlightText fontSize=\"sm\" fontFamily=\"mono\">\n {formattedBalanceAmount}\n </HighlightText>\n <HighlightText fontSize=\"sm\" color=\"fg.muted\">\n ${formattedBalanceUSDValue}\n </HighlightText>\n </HStack>\n </Box>\n )\n}\n\nconst SendForm = ({balances, onClose, selectedTicker, accentColor}: {balances: AssetBalance[], onClose: () => void, selectedTicker: string, accentColor: string}) => {\n // Send form state\n const [isLoading, setIsLoading] = useState(false)\n const [selectedCoin, setSelectedCoin] = useState<AssetBalance|undefined>()\n\n const [sendAmount, setSendAmount] = useState('')\n const [sendAmountError, setSendAmountError] = useState('')\n\n const [recipient, setRecipient] = useState('')\n const [recipientError, setRecipientError] = useState('')\n\n const [memo, setMemo] = useState('')\n const [memoError, setMemoError] = useState('')\n\n //other hooks\n const { toast } = useToast()\n const { status, address } = useChain(getChainName());\n const {tx} = useSDKTx(getChainName());\n\n // Create collections for selects\n const coinsCollection = createListCollection({\n items: balances.map(item => ({\n label: `${item.ticker} - ${shortNumberFormat(uAmountToBigNumberAmount(item.amount, item?.decimals ?? 0))}`,\n value: item.ticker,\n logo: item.logo\n }))\n })\n\n const isValidForm = useMemo(() => {\n return selectedCoin &&\n memoError === \"\" &&\n recipientError === \"\" &&\n sendAmountError === \"\" &&\n sendAmount !== \"\" &&\n recipient !== \"\"\n }, [selectedCoin, memoError, recipientError, sendAmountError, sendAmount, recipient])\n\n const resetSendForm = useCallback(() => {\n setSelectedCoin(undefined)\n setSendAmount('')\n setRecipient('')\n setMemo('')\n }, [])\n\n const handleSend = useCallback(async () => {\n if (!isValidForm) {\n toast.error('Can not send coins!', 'Please check the input data.')\n return\n }\n\n if (status !== WalletState.Connected) {\n toast.error('Wallet not connected!','Please connect your wallet first.')\n return\n }\n\n const {send} = cosmos.bank.v1beta1.MessageComposer.withTypeUrl;\n\n const msg = send({\n fromAddress: address,\n toAddress: recipient,\n amount: [{\n denom: selectedCoin?.denom ?? '',\n amount: amountToUAmount(sendAmount, selectedCoin?.decimals ?? 0)\n }],\n })\n\n setIsLoading(true)\n await tx([msg], {memo: memo.length > 0 ? memo : undefined});\n\n // Reset form\n resetSendForm()\n setIsLoading(false)\n onClose()\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [address, memo, onClose, recipient, selectedCoin, sendAmount, status])\n\n const handleCancel = useCallback(() => {\n resetSendForm()\n onClose()\n }, [onClose, resetSendForm])\n\n const onRecipientChange = useCallback((recipient: string) => {\n setRecipient(recipient)\n if (recipient.length === 0) {\n setRecipientError('')\n return\n }\n\n const validate = validateBZEBech32Address(recipient)\n if (validate.isValid) {\n setRecipientError('')\n } else {\n setRecipientError(validate.message)\n }\n }, [])\n\n const onAmountChange = useCallback((amount: string) => {\n setSendAmount(sanitizeNumberInput(amount))\n setSendAmountError('')\n }, [])\n\n const onCoinSelectChange = useCallback((ticker: string) => {\n if (ticker === \"\") return\n\n const selectedCoin = balances.find(item => item.ticker === ticker)\n if (selectedCoin) {\n setSelectedCoin(selectedCoin)\n validateAmount(sendAmount, selectedCoin, setSendAmountError)\n }\n }, [sendAmount, balances])\n\n const setMaxAmount = useCallback(() => {\n if (!selectedCoin) return\n const maxAmount = uAmountToBigNumberAmount(selectedCoin.amount, selectedCoin.decimals)\n onAmountChange(maxAmount.toString())\n validateAmount(maxAmount.toString(), selectedCoin, setSendAmountError)\n }, [selectedCoin, onAmountChange])\n\n const onMemoChange = useCallback((memo: string) => {\n setMemo(memo)\n if (memo.length > 256) {\n setMemoError('Memo must be less than or equal to 256 characters')\n } else {\n setMemoError('')\n }\n }, [])\n\n useEffect(() => {\n if (selectedTicker !== '') {\n onCoinSelectChange(selectedTicker)\n }\n }, [onCoinSelectChange, selectedTicker])\n\n return (\n <VStack gap=\"4\" align=\"stretch\">\n <HStack justify=\"space-between\" align=\"center\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Send Coins\n </Text>\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={handleCancel}\n disabled={isLoading}\n >\n <LuX size=\"14\" />\n </Button>\n </HStack>\n\n <Box>\n <Select.Root\n collection={coinsCollection}\n size=\"sm\"\n value={selectedCoin?.ticker ? [selectedCoin.ticker] : []}\n onValueChange={(details) => onCoinSelectChange(details.value[0] || '')}\n >\n <Select.Label>Coin</Select.Label>\n <Select.HiddenSelect />\n <Select.Control>\n <Select.Trigger>\n <Select.ValueText placeholder=\"Select coin\" />\n </Select.Trigger>\n <Select.IndicatorGroup>\n <Select.Indicator />\n </Select.IndicatorGroup>\n </Select.Control>\n <Portal>\n <Select.Positioner>\n <Select.Content>\n {coinsCollection.items.map((item) => (\n <Select.Item key={item.value} item={item}>\n <HStack gap=\"2\">\n <Image\n src={item.logo}\n alt={item.value}\n width=\"16px\"\n height=\"16px\"\n borderRadius=\"full\"\n />\n <Text>{item.label}</Text>\n </HStack>\n <Select.ItemIndicator />\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Positioner>\n </Portal>\n </Select.Root>\n\n {selectedCoin && (\n <Box\n mt=\"2\"\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={`${accentColor}.500/10`}\n gradientTo={`${accentColor}.600/10`}\n borderRadius=\"md\"\n borderWidth=\"1px\"\n borderColor={`${accentColor}.500/30`}\n >\n <HStack justify=\"space-between\">\n <Text fontSize=\"xs\" color=\"fg.muted\">\n Available:\n </Text>\n <VStack gap=\"0\" align=\"end\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n {uAmountToAmount(selectedCoin.amount, selectedCoin.decimals)} {selectedCoin.ticker}\n </Text>\n {selectedCoin.USDValue.gt(0) && (\n <Text fontSize=\"xs\" color=\"fg.muted\">\n ≈ ${shortNumberFormat(selectedCoin.USDValue)}\n </Text>\n )}\n </VStack>\n </HStack>\n </Box>\n )}\n </Box>\n\n <Box>\n <Field.Root invalid={sendAmountError !== \"\"}>\n <Field.Label>Amount</Field.Label>\n <Group attached w=\"full\" maxW=\"sm\">\n <Input\n size=\"sm\"\n placeholder=\"Amount to send\"\n value={sendAmount}\n onChange={(e) => onAmountChange(e.target.value)}\n onBlur={() => validateAmount(sendAmount, selectedCoin, setSendAmountError)}\n />\n <Button variant=\"outline\" size=\"sm\" onClick={setMaxAmount} disabled={isLoading}>\n Max\n </Button>\n </Group>\n <Field.ErrorText>{sendAmountError}</Field.ErrorText>\n </Field.Root>\n </Box>\n <Box>\n <Field.Root invalid={recipientError !== \"\"}>\n <Field.Label>Recipient Address</Field.Label>\n <Input\n size=\"sm\"\n placeholder=\"bze...2a1b\"\n value={recipient}\n onChange={(e) => onRecipientChange(e.target.value)}\n />\n <Field.ErrorText>{recipientError}</Field.ErrorText>\n </Field.Root>\n </Box>\n\n <Box>\n <Field.Root invalid={memoError !== \"\"}>\n <Field.Label>Memo\n <Field.RequiredIndicator\n fallback={\n <Badge size=\"xs\" variant=\"surface\">\n Optional\n </Badge>\n }\n />\n </Field.Label>\n <Textarea\n size=\"sm\"\n placeholder=\"Transaction memo\"\n rows={3}\n value={memo}\n onChange={(e) => onMemoChange(e.target.value)}\n resize=\"none\"\n />\n <Field.ErrorText>{memoError}</Field.ErrorText>\n </Field.Root>\n </Box>\n\n <HStack gap=\"2\">\n <Button\n size=\"sm\"\n flex=\"1\"\n onClick={handleSend}\n colorPalette={accentColor}\n disabled={!isValidForm || isLoading}\n loading={isLoading}\n loadingText={\"Sending...\"}\n >\n Send\n </Button>\n <Button\n size=\"sm\"\n flex=\"1\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={isLoading}\n >\n Cancel\n </Button>\n </HStack>\n </VStack>\n )\n}\n\nexport const WalletSidebarContent = ({ accentColor = 'blue' }: WalletSidebarContentProps) => {\n const [viewState, setViewState] = useState<ViewState>('balances')\n const [isDisconnecting, setIsDisconnecting] = useState(false)\n const [showCopiedTooltip, setShowCopiedTooltip] = useState(false)\n const [clickedBalance, setClickedBalance] = useState('')\n const copyButtonRef = useRef<HTMLButtonElement>(null)\n\n const {\n status,\n username,\n address,\n disconnect,\n connect,\n } = useChain(getChainName());\n const {assetsBalances, isLoading: assetsLoading} = useBalances();\n\n const balancesWithoutLps = useMemo(() => {\n if (assetsLoading) return [];\n\n return assetsBalances.filter(asset => !isLpDenom(asset.denom))\n }, [assetsLoading, assetsBalances])\n\n const nativeDenom = getChainNativeAssetDenom()\n const sortedBalances = useMemo(() => {\n return balancesWithoutLps.sort((a, b) => {\n // 1. Native denom always first\n if (a.denom === nativeDenom) return -1;\n if (b.denom === nativeDenom) return 1;\n\n // 2. Verified vs non-verified\n if (a.verified && !b.verified) return -1;\n if (!a.verified && b.verified) return 1;\n\n // 3. Positive balances vs zero balances\n const aHasBalance = a.amount.gt(0);\n const bHasBalance = b.amount.gt(0);\n\n if (aHasBalance && !bHasBalance) return -1;\n if (!aHasBalance && bHasBalance) return 1;\n\n // 4. If both have positive balances, sort by USD amount descending\n if (aHasBalance && bHasBalance) {\n return a.USDValue.gt(b.USDValue) ? -1 : 1;\n }\n\n // 5. For remaining items (both zero balance), maintain stable sort\n return 0;\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [balancesWithoutLps])\n\n const walletAddress = useMemo(() => stringTruncateFromCenter(address ?? \"\", 16), [address])\n\n const handleCopyAddress = () => {\n navigator.clipboard.writeText(address)\n setShowCopiedTooltip(true)\n setTimeout(() => setShowCopiedTooltip(false), 2000)\n }\n\n const handleCancel = useCallback(() => {\n setViewState('balances')\n setClickedBalance('')\n }, [])\n\n const onBalanceClick = useCallback((ticker: string) => {\n setClickedBalance(ticker)\n setViewState('send')\n }, [])\n\n const handleDisconnectAll = useCallback(async () => {\n setIsDisconnecting(true)\n try {\n console.log('Disconnected from all chains')\n } catch (error) {\n console.error('Error disconnecting:', error)\n } finally {\n disconnect()\n setIsDisconnecting(false)\n }\n }, [disconnect])\n\n const renderBalancesView = () => (\n <VStack gap=\"6\" align=\"stretch\">\n {/* Token Balances Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n Balances\n </Text>\n <VStack gap=\"2\" align=\"stretch\">\n {sortedBalances.map((bal) => (\n <BalanceItem key={bal.denom} asset={bal} onClick={() => onBalanceClick(bal.ticker)} accentColor={accentColor}/>\n ))}\n </VStack>\n </Box>\n\n {/* Quick Actions Section */}\n <Box>\n <Text fontSize=\"sm\" fontWeight=\"medium\" mb=\"3\">\n Quick Actions\n </Text>\n <VStack gap=\"2\" align=\"stretch\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => setViewState('send')}\n w=\"full\"\n disabled={assetsLoading}\n >\n Send\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n w=\"full\"\n onClick={() => openExternalLink('https://go.skip.build/?src_chain=1&src_asset=ethereum-native&dest_chain=beezee-1&dest_asset=ubze')}\n >\n <LuExternalLink />\n Cross-chain Deposit\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n w=\"full\"\n onClick={() => openExternalLink(`${getChainExplorerURL(getChainName())}/account/${address}`)}\n >\n <LuExternalLink />\n View on Explorer\n </Button>\n </VStack>\n </Box>\n\n {/* Disconnect Button */}\n <Box>\n <Button\n size=\"sm\"\n width=\"full\"\n variant=\"outline\"\n colorPalette=\"red\"\n onClick={handleDisconnectAll}\n loading={isDisconnecting}\n loadingText={\"Disconnecting...\"}\n >\n Disconnect Wallet\n </Button>\n </Box>\n </VStack>\n )\n\n const statusColor = useMemo(() => {\n switch (status) {\n case WalletState.Connected:\n return 'green'\n case WalletState.Connecting:\n return 'yellow'\n case WalletState.Disconnected:\n return 'red'\n default:\n return 'gray'\n }\n }, [status])\n\n return (\n <VStack gap=\"6\" align=\"stretch\">\n {/* Wallet Status - Always at top */}\n <Box>\n <InterchainWalletModal />\n <HStack justify=\"space-between\" mb=\"3\">\n <Text fontSize=\"sm\" fontWeight=\"medium\">\n Wallet Status\n </Text>\n <Badge colorPalette={statusColor} size=\"sm\">\n {status}\n </Badge>\n </HStack>\n {status === WalletState.Connected &&\n <Box\n p=\"3\"\n bgGradient=\"to-br\"\n gradientFrom={`${accentColor}.500/8`}\n gradientTo={`${accentColor}.600/8`}\n borderRadius=\"md\"\n borderWidth=\"1px\"\n borderColor={`${accentColor}.500/20`}\n >\n <Text fontSize=\"xs\" color=\"fg.muted\" mb=\"1\">\n {username ?? \"Address\"}\n </Text>\n <HStack justify=\"space-between\">\n <Text fontSize=\"sm\" fontFamily=\"mono\">\n {walletAddress}\n </Text>\n <Box position=\"relative\">\n <Button\n ref={copyButtonRef}\n size=\"xs\"\n variant=\"ghost\"\n onClick={handleCopyAddress}\n >\n <LuCopy />\n </Button>\n {showCopiedTooltip && (\n <Box\n position=\"absolute\"\n top=\"-35px\"\n right=\"0\"\n bgGradient=\"to-br\"\n gradientFrom={`${accentColor}.500`}\n gradientTo={`${accentColor}.600`}\n color=\"white\"\n px=\"3\"\n py=\"1.5\"\n borderRadius=\"md\"\n fontSize=\"xs\"\n fontWeight=\"semibold\"\n whiteSpace=\"nowrap\"\n zIndex=\"tooltip\"\n shadow=\"md\"\n >\n Copied!\n </Box>\n )}\n </Box>\n </HStack>\n </Box>\n }\n {status !== WalletState.Connected &&\n <Button\n size=\"sm\"\n variant=\"solid\"\n w=\"full\"\n onClick={connect}\n >\n Connect Wallet\n </Button>\n }\n </Box>\n\n <Separator />\n\n {/* Dynamic Content Based on View State */}\n {status === WalletState.Connected && viewState === 'balances' && renderBalancesView()}\n {status === WalletState.Connected && viewState === 'send' && <SendForm balances={sortedBalances} onClose={handleCancel} selectedTicker={clickedBalance} accentColor={accentColor}/>}\n </VStack>\n )\n}\n","'use client'\n\nimport { Button } from \"@chakra-ui/react\"\nimport { LuSettings } from \"react-icons/lu\"\nimport { Sidebar } from \"./sidebar/sidebar\"\nimport { SettingsSidebarContent } from \"./sidebar/settings-sidebar\"\n\ninterface SettingsToggleProps {\n accentColor?: string\n}\n\nexport function SettingsToggle({ accentColor }: SettingsToggleProps) {\n return (\n <Sidebar\n ariaLabel=\"Settings\"\n trigger={\n <Button variant=\"subtle\" size={{ base: 'sm', md: 'md' }}>\n <LuSettings />\n </Button>\n }\n >\n <SettingsSidebarContent accentColor={accentColor} />\n </Sidebar>\n )\n}\n","'use client'\n\nimport { Box, Text } from \"@chakra-ui/react\"\nimport { isTestnetChain } from \"../constants/chain\"\n\nexport const TestnetBanner = () => {\n if (!isTestnetChain()) {\n return null\n }\n\n return (\n <Box\n position=\"fixed\"\n bottom=\"0\"\n left=\"0\"\n right=\"0\"\n bg=\"red.600\"\n color=\"white\"\n textAlign=\"center\"\n py=\"1\"\n zIndex=\"banner\"\n fontSize=\"xs\"\n fontWeight=\"bold\"\n letterSpacing=\"wide\"\n >\n <Text>YOU ARE ON TESTNET</Text>\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["testnetChains","_a","chains","ibcAssetsList","BigNumber","_a","import_bignumber","BigNumber","import_bignumber","ibcData","BigNumber","import_bignumber","BigNumber","import_bignumber","BigNumber","_a","import_bzejs","import_pagination","_a","module","_a","_a","_a","import_utils","DEFAULT_LIMIT","_a","_b","_a","_b","ibcData","_a","_a","_b","_a","_a","_b","import_query","DEFAULT_LIMIT","import_query","import_pagination","DEFAULT_LIMIT","import_bzejs","import_pagination","import_bignumber","_a","BigNumber","import_pagination","import_bignumber","BigNumber","_a","_b","rewards","r","import_react","import_react","import_tx","_a","_b","import_react","import_react","import_bignumber","import_react","BigNumber","import_react","import_bignumber","EPOCH_HOUR","EPOCH_DAY","EPOCH_WEEK","getEpochDurationByIdentifier","getCurrentEpoch","getHourEpochInfo","getWeekEpochInfo","getPeriodicEpochEndTime","BigNumber","getCurrentWeekEpochEndTime","getPeriodicWeekEpochEndTime","import_react","import_bignumber","BigNumber","import_react","import_bignumber","BigNumber","_a","import_react","import_react","import_bignumber","BigNumber","_a","_b","import_react","import_react","ChakraToaster","import_tx","import_react","import_bignumber","import_react","TxStatus","_a","BigNumber","import_react","_a","_b","import_react","import_jsx_runtime","_a","_b","import_react","import_lu","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_lu","import_bignumber","import_bzejs","import_jsx_runtime","coin","BigNumber","_a","_b","recipient","selectedCoin","memo","import_react","import_lu","import_jsx_runtime","import_react","import_jsx_runtime"]}
|