{"version":3,"file":"chunk-c9a6fe7c.js","sources":["../../../src/modules/web3/stake/components/VestingCurrentIcon.svelte","../../../src/modules/web3/stake/dashboard/components/balance/Balance.svelte","../../../src/modules/web3/stake/dashboard/popups/stake-confirm/StakeConfirm.svelte","../../../src/modules/web3/stake/dashboard/popups/stake/stream.ts","../../../src/modules/web3/stake/dashboard/popups/stake/DatepickerInput.svelte","../../../src/modules/web3/stake/dashboard/popups/stake/LockTime.svelte","../../../src/modules/web3/stake/dashboard/popups/stake/Amount.svelte","../../../src/modules/web3/stake/dashboard/popups/stake/Stake.svelte","../../../src/modules/web3/stake/dashboard/popups/stake-success/StakeSuccess.svelte","../../../src/modules/web3/stake/dashboard/components/stake/Stake.svelte","../../../src/modules/web3/stake/streams/vip.ts","../../../src/modules/web3/stake/streams/protocol.ts","../../../src/api/buy-crypto-vept-airdrop.ts","../../../src/api/vip.js","../../../src/modules/fees-conditions/images.js","../../../src/modules/fees-conditions/const.js","../../../src/modules/fees-conditions/utils.js","../../../src/modules/fees-conditions/stream.js","../../../src/modules/web3/components/vept-airdrop/streams.ts","../../../src/modules/web3/components/vept-airdrop/AirdropTooltip.svelte","../../../src/modules/web3/components/vept-airdrop/BuyCryptoAirdropPrivilege.svelte","../../../src/modules/web3/stake/dashboard/popups/apr-history/stream.ts","../../../src/modules/web3/stake/dashboard/popups/apr-history/AprHistory.svelte","../../../src/modules/web3/stake/dashboard/popups/claim-reward-confirm/ClaimRewardConfirm.svelte","../../../src/modules/web3/stake/dashboard/popups/reward-auto-compound-confirm/RewardAutoCompoundConfirm.svelte","../../../src/modules/web3/stake/dashboard/components/rewards/Rewards.svelte","../../../src/modules/web3/stake/dashboard/components/protocols/Protocols.svelte","../../../src/modules/web3/stake/dashboard/Page.svelte"],"sourcesContent":["\n\n\n\n
\n \n \"vesting\"\n
\n","\n\n\n\n
\n \"staking\"\n
\n
\n

{LG(lang.BannerTitle)}

\n {#if isLogin}\n \n {LG(lang.HistoryData)}\n \n \n {/if}\n
\n
\n
\n {#if stakeInfo.stakeCurrency}\n \"coin\"\n {/if}\n
\n
{LG(lang.CurrencyBalance, {Currency: stakeInfo.stakeCurrency})}
\n
{stakeInfo.stakeCurrency}
\n
\n {isLogin ? formatDisplayScaleValueStr(activeStakeCurrencyWallet.totalBalanceEv, stakeCurrencyConfig.valueScale, StakeCurrencyPrecision, true) : '--'}\n
\n
\n
\n
\n {#if stakeInfo.veStakeCurrency}\n \"coin\"\n {/if}\n
\n
{LG(lang.CurrencyBalance, {Currency: stakeInfo.veStakeCurrency})}
\n
{stakeInfo.veStakeCurrency}
\n
\n {formatDisplayValueStr(stakeInfo.veStakedAmountRq, VeStakeCurrencyPrecision) || '--'}\n \n
\n
\n
\n
\n {#if stakeInfo.stakeCurrency}\n \n \"coin\"\n \n {/if}\n
\n
{LG(lang.CurrencyVesting, {Currency: stakeInfo.stakeCurrency})}
\n
\n {formatDisplayValueStr(stakeInfo.vestingAmountRq, StakeCurrencyPrecision) || '--'}\n \n
\n
\n
\n
\n
\n
{LG(lang.PhemexSoulPassId)}
\n {#if soulPassInfo.passId}\n
{soulPassInfo.passId}
\n {:else}\n \n {LG(lang.MintNow)}\n \n \n {/if}\n
\n {#if soulPassInfo.passId}\n
\n
{LG(lang.EthereumWallet)}
\n
{userWeb3WalletInfo.shortAddress || '--'}
\n
\n {/if}\n
\n
\n
\n","\n\n\n\n\n
\n {stakeInfo.hasStake ? LG(lang.IncreasePopupTitle) : LG(lang.PopupTitle)}\n
\n
\n {#if !stakeInfo.hasStake}\n \"Stake\n {LG(lang.StakeConfirmWarning)}\n {/if}\n
\n
\n
\n
{LG(lang.StakeAmount)}
\n
{formatDisplayValueStr(stakeInfo.stakeAmount, stakeInfo.stakeCurrencyValuePrecision)} {stakeInfo.stakeCurrency}
\n
\n
\n
{LG(lang.ExpiryDate)}(UTC)
\n
\n {#if stakeInfo.hasStake && stakeInfo.originStakedExpiryTime !== stakeInfo.lockTimestamp}\n {formatUTCDate(stakeInfo.originStakedExpiryTime) || '--'}\n  > \n {/if}\n {formatUTCDate(stakeInfo.lockTimestamp) || '--'}\n
\n
\n
\n
{LG(lang.GasFee)}
\n
{formatDisplayValueStr(stakeInfo.gasFeeRq, stakeInfo.stakeCurrencyValuePrecision)} {stakeInfo.stakeCurrency}
\n
\n
\n
{LG(lang.VeStakeAmount)}
\n
\n \"coin\"\n {stakeInfo.receiveAmount} {stakeInfo.veStakeCurrency}\n
\n
\n
\n
\n \n \n
\n
\n","import {BehaviorSubject} from 'rxjs';\n\nexport const stakeAmount$ = new BehaviorSubject(0);\n","\n\n\n\n{#if formattedSelected}\n
\n \n
\n {displayValue}\n \"Calendar\"\n
\n
\n
\n{/if}\n","\n\n\n\n\n
\n {#each Object.values(quickLockTimeMap) as item}\n \n {LG(lang[item.labelLangKey], {Num: item.value})}\n \n {/each}\n
\n","\n\n\n\n{#if activeStakeCurrencyConfig}\n
\n \n {LG(lang.MaxBtn)}\n
\n
\n {LG(lang.CurrencyBalance, {StakeCurrency: stakeProject.stakeCurrency})}: \n {stakeCurrencyWallet.availableBalance} {stakeProject.stakeCurrency}\n
\n
{LG(lang.ErrorField)}
\n{/if}\n","\n\n\n\n\n
\n {LG(lang.PopupTitle, {StakeCurrency: stakeProject.stakeCurrency})}\n
\n
\n
\n
{hasStake ? LG(lang.IncreaseAmountField) : LG(lang.AmountField)}
\n \n
\n
\n
{hasStake ? LG(lang.ExtendLockTimeField) : LG(lang.LockTimeField)} (UTC)
\n \n
\n
\n
\n {LG(lang.Receive)}: \n \"coin\"\n {receiveAmountDisplay} {activeStakeInfo.veStakeCurrency}\n
\n
\n \"Gas\n \n {LG(lang.GasFee)}: {formatDisplayValueStr(gasFee)} {activeStakeInfo.stakeCurrency}\n
\n {LG(lang.StakeGasFeeTip, {GasFee: formatDisplayValueStr(gasFee), StakeCurrency: activeStakeInfo.stakeCurrency})}\n
\n
\n
\n
\n \n
\n
\n","\n\n\n\n\n
\n {LG(lang.PopupTitle)}\n
\n
\n
\n
{LG(lang.StakeAmount)}
\n
{numUtil.delimit(stakedHistory.amountRq) || '--'} {stakedHistory.stakeCurrency}
\n
\n \n \n
\n \n
\n","\n\n\n\n
\n
\n
\n
\n {stakeProject.veCurrency || '--'}\n {#if stakeProject.veCurrency}\n \n \n {LG(lang.VeStakeCurrencyTip, {StakeCurrency: stakeProject.stakeCurrency, VeStakeCurrency: stakeProject.veCurrency})}\n \n {/if}\n
\n {#if isLogin}\n
\n {LG(lang.History)}\n {LG(lang.CheckYourWallet)}\n
\n {/if}\n
\n
\n
\n {LG(lang.YourStaking)}\n \n \n {LG(lang.YourStakingTip, {StakeCurrency: stakeProject.stakeCurrency, VeStakeCurrency: stakeProject.veCurrency})}\n \n
\n {#if userWeb3WalletInfo.address}\n \n {userWeb3WalletInfo.shortAddress}\n \n \n {:else}\n \n {LG(lang.MintSoulPass)}\n \n \n {/if}\n
\n
\n {#if isFirstStake && !isH5}\n {#if hasStaking}\n
\n
\n \"staking\"\n \"staking\"\n
\n
\n {LG(lang.StakingAmount)}\n {formatDisplayValueStr(stakeInfo.stakingAmountRq, stakeCurrencyConfig.valuePrecision)}\n
\n
\n {LG(lang.WaitingStakingTip)}\n
\n {LG(lang.StakeSuccessTip)}\n
\n
\n {:else}\n
\n
\n {#if isLogin}\n {LG(lang.YourCurrencyBalance, {Currency: stakeProject.stakeCurrency})}\n {formatDisplayScaleValueStr(stakeCurrencyWallet.totalBalanceEv, stakeCurrencyConfig.valueScale, StakeCurrencyPrecision, true)}\n {:else}\n {LG(lang.LoginSeeBalance)}\n {/if}\n
\n
{LG(lang.StakeCurrencyGetVeStakeCurrencyTip, {StakeCurrency: stakeProject.stakeCurrency, VeStakeCurrency: stakeProject.veCurrency})}
\n \n
\n {/if}\n {:else}\n
\n
\n
{LG(lang.VotingPower)}
\n
{formatDisplayValueStr(stakeInfo.veStakedAmountRq, VeStakeCurrencyPrecision)} {stakeInfo.veStakeCurrency}
\n
\n
\n
\n
\n
\n
{LG(lang.StakeCurrencyStaked, {StakeCurrency: stakeInfo.stakeCurrency})}
\n
{formatDisplayValueStr(stakeInfo.stakedAmountRq, stakeCurrencyConfig.valuePrecision)} {stakeInfo.stakeCurrency}
\n
\n {#if hasStaking && !isFirstStake && gt(stakeInfo.stakingAmountRq, 0)}\n
\n \n \n {LG(lang.StakingAmountTip, {StakingAmount: formatDisplayValueStr(stakeInfo.stakingAmountRq, stakeCurrencyConfig.valuePrecision) + ' ' + stakeInfo.stakeCurrency})}\n \n
\n {:else if isRedeemingStatus}\n
\n \n \n {LG(lang.RedeemingAmountTip, {RedeemingAmount: formatDisplayValueStr(stakeInfo.redeemingAmountRq, stakeCurrencyConfig.valuePrecision) + ' ' + stakeInfo.stakeCurrency})}\n \n
\n {/if}\n
\n {#if canWithdraw || isRedeemingStatus}\n \n {:else}\n \n {/if}\n
\n
\n
\n
\n
{LG(lang.ExpiryDate)}(UTC)
\n
{stakeInfo.stakedExpiryTime ? timeUtil.formatUTCDateTime(stakeInfo.stakedExpiryTime) : '--'}
\n
\n {#if hasStaking && !isFirstStake && stakeInfo.stakingExpiryTime !== stakeInfo.stakedExpiryTime}\n
\n \n {LG(lang.StakingExpiryDateTip, {StakingExpiryTime: timeUtil.formatUTCDateTime(stakeInfo.stakingExpiryTime) + '(UTC)'})}\n
\n {/if}\n
\n \n
\n
\n {#if canWithdraw || isRedeemingStatus}\n \n {#if isRedeemingStatus}\n
\n \n \n {LG(lang.RedeemingAmountTip, {RedeemingAmount: formatDisplayValueStr(stakeInfo.redeemingAmountRq, stakeCurrencyConfig.valuePrecision) + ' ' + stakeInfo.stakeCurrency})}\n \n
\n {/if}\n {:else if isFirstStake}\n \n {#if hasStaking}\n
\n \n {LG(lang.WaitingStakingTip)}\n
\n {:else}\n
{LG(lang.StakeCurrencyGetVeStakeCurrencyTip, {StakeCurrency: stakeInfo.stakeCurrency, VeStakeCurrency: stakeInfo.veStakeCurrency})}
\n {/if}\n {:else}\n
\n \n \n
\n {/if}\n
\n {/if}\n
\n
\n {LG(lang.StakingDoneTip, {VeStakeCurrency: stakeInfo.veStakeCurrency || '--'})}\n
\n
\n
\n
\n
\n
{LG(lang.TotalStakeCurrency, {StakeCurrency: stakeInfo.stakeCurrency})} 
\n
{$startStakeReward$ ? formatDisplayValueStr(summaryInfo.totalStakedAmountRq, StakeCurrencyPrecision) : '--'}
\n
\n
\n
{LG(lang.TotalVeStakeCurrency, {VeStakeCurrency: stakeInfo.veStakeCurrency})} 
\n
{$startStakeReward$ ? formatDisplayValueStr(summaryInfo.totalVeAmountRq, VeStakeCurrencyPrecision) : '--'}
\n
\n
\n
\n
{LG(lang.AvgStakedPeriod, {StakeCurrency: stakeInfo.stakeCurrency})} 
\n
\n {LG(lang.Days, {Days: formatStakeDate($startStakeReward$ && summaryInfo.avgWeightStakePeriod)})}\n
\n
\n
\n
{LG(lang.TotalCirculationSupply)} 
\n
{$startStakeReward$ ? formatDisplayPercentage(summaryInfo.totalCirculationSupplyRate, StakeCurrencyPrecision) : '--'}
\n
\n
\n
\n {@html LG(pLang.PowerChain, {Chain: `${PowerChainName}`})}\n
\n
\n
\n
\n
\n
\n","import {BehaviorSubject, Subject, combineLatest} from 'rxjs';\nimport {distinctUntilChanged, filter, map, switchMap} from 'rxjs/operators';\nimport {mc} from '@/core';\nimport {web3Api} from '@/api/web3';\nimport {userStatus$} from '@/streams/auth';\nimport {userMemberLevel$} from '@/streams/user';\n\n// account vip\nconst loadAccountVipLevelConfig$ = new Subject();\nexport const accountVipLevelConfig$ = new BehaviorSubject([]);\nexport const accountNextLevelVipConfig$ = new BehaviorSubject(null);\nexport {userMemberLevel$};\n\ncombineLatest({configs: accountVipLevelConfig$, level: userMemberLevel$})\n .pipe(\n filter(({configs}) => configs.length > 0),\n map(({configs, level}) => {\n const config = configs.find((o) => o.level === level);\n if (config && config.nextLevel) {\n return configs.find((o) => o.level === config.nextLevel);\n }\n return null;\n }),\n distinctUntilChanged()\n )\n .subscribe(accountNextLevelVipConfig$);\n\nloadAccountVipLevelConfig$.pipe(switchMap(loadAccountVipLevelConfig)).subscribe(accountVipLevelConfig$);\n\nuserStatus$.pipe(filter((status) => status === 'Login')).subscribe(() => {\n loadAccountVipLevelConfig$.next();\n});\n\nasync function loadAccountVipLevelConfig() {\n const {data, error} = await web3Api.getAccountVipLevelConfig();\n if (error) {\n mc.send('toast', 'error', error);\n }\n if (data && data.vept && data.vept.length > 0) {\n const levelConfig = data.vept.sort((a, b) => a.level - b.level);\n return levelConfig.map((item, i) => ({...item, nextLevel: (levelConfig[i + 1] && levelConfig[i + 1].level) || null}));\n }\n return [];\n}\n","import {BehaviorSubject, Subject} from 'rxjs';\nimport {filter, switchMap} from 'rxjs/operators';\nimport {mc} from '@/core';\nimport {minus, times} from '@/helper/num';\nimport {timeUtil} from '@/helper/time';\nimport {web3Api} from '@/api/web3';\nimport {userStatus$} from '@/streams/auth';\n\nconst loadPtMiningAwardBoost$ = new Subject();\nconst loadPtMiningIsAutoStake$ = new Subject();\nconst loadPtMiningAwardHistoryRecord$ = new Subject();\n\nexport const ptMiningAwardBoost$ = new BehaviorSubject('');\nexport const ptMiningIsAutoStake$ = new BehaviorSubject(false);\nexport const ptMiningLatestAward$ = new BehaviorSubject(null);\n\n// PT Trading Reward 延后上线\n// loadPtMiningAwardBoost$.pipe(switchMap(loadPtMiningAwardBoost)).subscribe(ptMiningAwardBoost$);\n// loadPtMiningIsAutoStake$.pipe(switchMap(loadPtMiningIsAutoStake)).subscribe(ptMiningIsAutoStake$);\n// loadPtMiningAwardHistoryRecord$.pipe(switchMap(loadPtMiningAwardHistoryRecord)).subscribe(ptMiningLatestAward$);\n\nuserStatus$.pipe(filter((status) => status === 'Login')).subscribe(() => {\n loadPtMiningAwardBoost$.next();\n loadPtMiningIsAutoStake$.next();\n loadPtMiningAwardHistoryRecord$.next(calcBeforeDayTimestamp());\n});\n\nasync function loadPtMiningAwardHistoryRecord(activityTime) {\n const {data, error} = await web3Api.getPtMiningAwardHistoryRecord({activityTime});\n if (error) {\n mc.send('toast', 'error', error);\n }\n\n return data || {ptAwardRv: '0'};\n}\n\nasync function loadPtMiningAwardBoost() {\n const {data, error} = await web3Api.getPtMiningAwardBoost();\n if (error) {\n mc.send('toast', 'error', error);\n }\n\n return (data && data.boost) || '';\n}\n\nasync function loadPtMiningIsAutoStake() {\n const {data, error} = await web3Api.getPtMiningUserConfig();\n if (error) {\n mc.send('toast', 'error', error);\n }\n\n // ptAwardType: 1-线性发放;2-AutoStake\n return data && data.ptAwardType === 2;\n}\n\nfunction calcBeforeDayTimestamp() {\n const oneDayMs = times(24, 3600000);\n return minus(new Date(timeUtil.formatDate(new Date())).valueOf(), oneDayMs);\n}\n","import {http} from '@/helper';\nimport {API_URLS} from '@/const/urls';\n\nexport const buyCryptoVeptAirdropApi = {\n getRewardInfo() {\n return http.get(API_URLS.VEPT_REWARD_INFO, {query: {}});\n },\n getConfig(query) {\n return http.get(API_URLS.VEPT_AIRDROP_CONFIG, {query});\n },\n};\n","import {API_URLS} from '@/const/urls';\nimport {http} from '@/helper';\n\nexport const vipProgramApi = {\n getVIPContractInfo(query) {\n return http.get(API_URLS.VIP_CONTRACT_INFO, {query});\n },\n getRatioConfig() {\n return http.get(API_URLS.VIP_RATIO_CONFIG, {});\n },\n getVIPAssets(bizline, userIds) {\n return http.get(API_URLS.VIP_ASSETS, {query: {bizline, userIds: userIds && userIds.join(',')}});\n },\n getVIPTransactions({bizline, userIds, start, end, count = 5}) {\n return http.get(API_URLS.VIP_TRANSACTIONS, {query: {bizline, userIds: userIds && userIds.join(','), start, end, topN: count}});\n },\n getVIPAllTransactions({bizline, userIds, start, end}) {\n return http.get(API_URLS.VIP_ALL_TRANSACTIONS, {query: {bizline, userIds: userIds && userIds.join(','), start, end}});\n },\n getVIPAumData(userIds, start, end) {\n return http.get(API_URLS.VIP_HISTORY, {query: {userIds: userIds && userIds.join(','), start, end}});\n },\n getVIPSummary(symbols, userIds, start, end) {\n return http.get(API_URLS.VIP_CONTRACT_SUMMARY, {query: {symbols: symbols && symbols.join(','), userIds: userIds && userIds.join(','), start, end}});\n },\n getVIPTotal(symbols, userIds, start, end) {\n return http.get(API_URLS.VIP_CONTRACT_TOTAL, {query: {symbols: symbols && symbols.join(','), userIds: userIds && userIds.join(','), start, end}});\n },\n getVIPPairs(symbols, userIds, start, end) {\n return http.get(API_URLS.VIP_CONTRACT_PAIRS, {query: {symbols: symbols && symbols.join(','), userIds: userIds && userIds.join(','), start, end}});\n },\n getVIPManagerInfo() {\n return http.get(API_URLS.VIP_MANAGER_EMAIL, {query: {}});\n },\n getVIPTradeSymbols({bizline, userIds, start, end}) {\n return http.get(API_URLS.VIP_TRADE_SYMBOLS, {query: {bizline, userIds, start, end}});\n },\n getVIPAssetDownloadData(userIds, start, end) {\n return http.get(API_URLS.VIP_ASSETS_DOWNLOAD_DATA, {query: {userIds, start, end}});\n },\n getVIPContractDownloadData({symbols, userIds, start, end}) {\n return http.get(API_URLS.VIP_CONTRACT_DOWNLOAD_DATA, {query: {symbols, userIds, start, end}});\n },\n isInstitutionalUser() {\n return http.get(API_URLS.VIP_QUERY_IS_INSTITUTIONAL_USER, {query: {}});\n },\n getInstitutionalLast30DaysData() {\n return http.get(API_URLS.VIP_INSTITUTIONAL_LAST_30_DAYS_DATA, {query: {}});\n },\n getInstitutionalSummary(startDate, endDate) {\n return http.get(API_URLS.VIP_INSTITUTIONAL_SUMMARY, {query: {startDate, endDate}});\n },\n getInstitutionalBaseInfo() {\n return http.get(API_URLS.VIP_INSTITUTIONAL_BASE_INFO, {query: {}});\n },\n getInstitutionalTradingData(tradeType, startDate, endDate) {\n return http.get(API_URLS.VIP_INSTITUTIONAL_DATA, {\n query: {\n tradeType,\n startDate,\n endDate,\n },\n });\n },\n};\n","import {SERVICES} from '@/const';\n\nexport const IMAGES = {\n PC_IMG_5: '/s/home/2.0/mBg.svg',\n PC_IMG_6: '/s/home/2.0/pcBg.svg',\n H5_ALL_STAR_BANNER_EN: '/pubimg/5cf9bc811eabfe2d1e030b48c8f0e7bf07cae7766abf58cd38de54829e8d94b7.jpg',\n H5_ALL_STAR_BANNER_FR: '/pubimg/94743b054a14261d92719f5b758b743a2a2d3e867b0bc41b6d10a0d9b1c61e9a.jpg',\n H5_ALL_STAR_BANNER_DE: '/pubimg/c6d8fffaad50580c5aeefe625bde508e5e284c1422bd10924ab2757d5b27be99.jpg',\n H5_ALL_STAR_BANNER_JA: '/pubimg/81fc2ff405e15316c314c80643575599dafa6b70b082a395cbfb14fb2c17adf9.jpg',\n H5_ALL_STAR_BANNER_KO: '/pubimg/c9fbee7f3b301a5a28556785d999ca1b13b11abd6ad80d9e43b2fe5daa7b0e0f.jpg',\n H5_ALL_STAR_BANNER_PT: '/pubimg/effd8c555adced7967f4103b4cf182ed88f2c291090c239efa031cff7f2b097b.jpg',\n H5_ALL_STAR_BANNER_RU: '/pubimg/28b2bd8a30daecc8d400b20e388218acba4c26bfa247ba266fe18a6291b9d974.jpg',\n H5_ALL_STAR_BANNER_ES: '/pubimg/d253e52b0a386f2370c429a785e713b874716f87b8d0d07548c1037474646048.jpg',\n H5_ALL_STAR_BANNER_TR: '/pubimg/eb89f06dfcbbb9cd6dd6a1fd6a68b2d7fd33b4a52e19e369cec8fb9eefee24b8.jpg',\n H5_ALL_STAR_BANNER_VI: '/pubimg/207f28f9bf47b5d8419171ade1cecb70d5f1aba0fa59589df8c5eeec77fdb44d.jpg',\n PC_ALL_STAR_BANNER_EN: '/pubimg/e8f2adaa69acda8836d1c0de0994e79908bf0ab3ec1adbeb37ce58c93b605cb9.jpg',\n PC_ALL_STAR_BANNER_FR: '/pubimg/dd826ba8a5d8e4d7aed224ac63bd9f3455bb9b80655ac10531f095e34fc6a15d.jpg',\n PC_ALL_STAR_BANNER_DE: '/pubimg/b04a9f63ce23b07ee3bcb70a3accb594bc2f683aa29577b7e2db73de596ba23c.jpg',\n PC_ALL_STAR_BANNER_JA: '/pubimg/1d06000d3f711b73bffdf118e38b4f42e70f227932f5568c29c5a0042dd7e36b.jpg',\n PC_ALL_STAR_BANNER_KO: '/pubimg/1e545cd7f8b701f9596636adfdae7d779bce2f8cb409bcf6c12f2a3911137d53.jpg',\n PC_ALL_STAR_BANNER_PT: '/pubimg/b01713c8467b3871c89a2b79a98aa81d1f1f4a786ec7787e15e3d8bf1f43b892.jpg',\n PC_ALL_STAR_BANNER_RU: '/pubimg/905e4a0e26bc50390f5d69592e4e377504c3fb7f431f60f3eea49be1ae285e0b.jpg',\n PC_ALL_STAR_BANNER_ES: '/pubimg/738a868ffa019f0cb4ba6d2499c9f380db3aac2562f6288d3c67dff084979d10.jpg',\n PC_ALL_STAR_BANNER_TR: '/pubimg/eaaff580d7a775480f13febf0c6e2a9ff46bab5d34e64373704eade38c9072a3.jpg',\n PC_ALL_STAR_BANNER_VI: '/pubimg/fd97340ce2e2c1be6d4f268875a4f814fa68d56fad03b8800099ef33acdb35ac.jpg',\n H5_30D_LV3_BANNER_EN: '/pubimg/23d49e6d121bf974f7a673644934518161826ca75457b55debf7350b6dc03ec3.jpg',\n H5_30D_LV3_BANNER_FR: '/pubimg/23d49e6d121bf974f7a673644934518161826ca75457b55debf7350b6dc03ec3.jpg',\n H5_30D_LV3_BANNER_DE: '/pubimg/d26834561f363f834a89af3ed2fb6ab088d46d9ef58f8356e3d0279d02af12d5.jpg',\n H5_30D_LV3_BANNER_JA: '/pubimg/23d49e6d121bf974f7a673644934518161826ca75457b55debf7350b6dc03ec3.jpg',\n H5_30D_LV3_BANNER_KO: '/pubimg/23d49e6d121bf974f7a673644934518161826ca75457b55debf7350b6dc03ec3.jpg',\n H5_30D_LV3_BANNER_PT: '/pubimg/6317ec11a49889405611bf7708a6266eaaab6256f99d0e8370b3573bf4084cfb.jpg',\n H5_30D_LV3_BANNER_RU: '/pubimg/34ffc1e4bc1b9bf16a2bc8f80a6f72123cee45028505f7a40878ad94e2c610ac.jpg',\n H5_30D_LV3_BANNER_ES: '/pubimg/87b638de1b74205756c925d509ccc26c48abbb422f92c656fbfe20464ba05609.jpg',\n H5_30D_LV3_BANNER_TR: '/pubimg/a7bc583612a7fdccdda8201e5fc5ad645fe620be49affa1e149b2a1f8be93436.jpg',\n PC_30D_LV3_BANNER_EN: '/pubimg/c69d748fd2b11d99034a86623c5f7e523e83bad4a7e8b024c3220164d419acf5.jpg',\n PC_30D_LV3_BANNER_FR: '/pubimg/c69d748fd2b11d99034a86623c5f7e523e83bad4a7e8b024c3220164d419acf5.jpg',\n PC_30D_LV3_BANNER_DE: '/pubimg/f5b6196a3598e5608209d46670c13df54f1749b1449de1aec249cc3858dd20aa.jpg',\n PC_30D_LV3_BANNER_JA: '/pubimg/c69d748fd2b11d99034a86623c5f7e523e83bad4a7e8b024c3220164d419acf5.jpg',\n PC_30D_LV3_BANNER_KO: '/pubimg/c69d748fd2b11d99034a86623c5f7e523e83bad4a7e8b024c3220164d419acf5.jpg',\n PC_30D_LV3_BANNER_PT: '/pubimg/5f233d0b9c31c9bfa0cdd0e21b4826b707a695eb382d91a06875547d608fdc1d.jpg',\n PC_30D_LV3_BANNER_RU: '/pubimg/ace114485a19737d363fdb0a4039e6c6afb24ac6a50e327a952cd31d563cdbca.jpg',\n PC_30D_LV3_BANNER_ES: '/pubimg/4c1653d1c0fd7c1b41c8380384e59b4dddabb64165d428522161a5166f79dcea.jpg',\n PC_30D_LV3_BANNER_TR: '/pubimg/c7dc571e0e6effb864931da2427de566113df5fef794ac0b15d2b37e238d9998.jpg',\n H5_30D_LV3_BANNER_VI: '/pubimg/23d49e6d121bf974f7a673644934518161826ca75457b55debf7350b6dc03ec3.jpg',\n RIGHT_ARROW: '/pubimg/072c0b72a127775598ced6ef074060850c425d9f073f0b29e0c9e0b268d1adbf.jpg',\n DIAMOND_PC: '/pubimg/32cdc77655a2a186449d09eea27335ebfff0004bbb704c84252f2762cd7e44fa.jpg',\n DIAMOND_H5: '/pubimg/2646810cceaafd3c7f8cb86b89dbbbaa9fbb368b4a77c0cc59ad23ec484e5821.jpg',\n LEVEL_DASHBOARD_DIAMON_PC: '/pubimg/1932f4fe27f2951f4592b0d4d183ecb2f4a389948fc62b0f36c77ee8edcdd2b3.png',\n SEARCH_H5: '/pubimg/26051ff2c0f3e5172dfd59b61e6c29ca6ccbeec7ef90059c445e6c4d546184dd.png',\n SEARCH_PC: '/pubimg/df0311663755adbe9938acd2470163f5391d54f1a4c39351c6cbfbef1839baa8.png',\n tipIcon: '/pubimg/4db1d687fd6b9d72b15f3d0bd85274b84d401926fafba3fa3e493eae859593fd.png',\n DIAMONICON: '/pubimg/a570c8fa46c1303816e995f3b942bd36fde49bd48b026d8be0d59c17d8957cf1.png',\n CHANGE_ICON: '/pubimg/76dbd56318f8e9aa8b479615544834b6558fcf6ac110075e39e90a69631e5136.png',\n ZERO_FEES_BG: '/pubimg/1c7b6d4208eff55ab593ef7f05b26348df9cee0e995a51a5132ec95fe34af1e6.png',\n LEVEL_V9: '/pubimg/8b3082ce26ba7d0b06427d6dd43bfff8db7f60b4cb7ecb51eeeb7471d22780ff.png',\n LEVEL_V8: '/pubimg/e4bb876ffcd8b755c57ab4c175a70bf0d42b65110e52f7759d4bf9fda491a105.png',\n};\n\nObject.keys(IMAGES).forEach((key) => (IMAGES[key] = [SERVICES.STATIC_URL, IMAGES[key]].join('')));\n","import {IMAGES_V2} from '@/const/images';\nimport {IMAGES} from '@/modules/fees-conditions/images';\n\nexport const WALLET = [\n {\n coin: 'BTC',\n minimum: '0.00000001',\n limit: '0.001',\n fee: '0.00057',\n chain: '',\n },\n {\n coin: 'USDT',\n minimum: '0.00000001',\n limit: '2',\n fee: '0',\n chain: '- TRC20',\n },\n {\n coin: 'USDT',\n minimum: '0.00000001',\n limit: '2',\n fee: '10',\n chain: '- ERC20',\n },\n {\n coin: 'ETH',\n minimum: '0.00000001',\n limit: '0.02',\n fee: '0.0036',\n chain: '',\n },\n {\n coin: 'XRP',\n minimum: '0.00000001',\n limit: '0.5',\n fee: '0.45',\n chain: '',\n },\n {\n coin: 'LINK',\n minimum: '0.00000001',\n limit: '0.5',\n fee: '0.25',\n chain: '',\n },\n {\n coin: 'XTZ',\n minimum: '0.00000001',\n limit: '1',\n fee: '0.65',\n chain: '',\n },\n {\n coin: 'LTC',\n minimum: '0.00000001',\n limit: '0.002',\n fee: '0.001',\n chain: '',\n },\n {\n coin: 'ADA',\n minimum: '0.00000001',\n limit: '2',\n fee: '1',\n chain: '',\n },\n {\n coin: 'TRX',\n minimum: '0.00000001',\n limit: '2',\n fee: '1',\n chain: '',\n },\n {\n coin: 'ONT',\n minimum: '0.00000001',\n limit: '2',\n fee: '1',\n chain: '',\n },\n {\n coin: 'BCH',\n minimum: '0.00000001',\n limit: '0.002',\n fee: '0.001',\n chain: '',\n },\n {\n coin: 'NEO',\n minimum: '0.00000001',\n limit: '1',\n fee: '0',\n chain: '',\n },\n {\n coin: 'EOS',\n minimum: '0.00000001',\n limit: '0.2',\n fee: '0.1',\n chain: '',\n },\n {\n coin: 'DOGE',\n minimum: '0.00000001',\n limit: '100',\n fee: '5',\n chain: '',\n },\n {\n coin: 'BAT',\n minimum: '0.00000001',\n limit: '32',\n fee: '24',\n chain: '',\n },\n {\n coin: 'CHZ',\n minimum: '0.00000001',\n limit: '92',\n fee: '71',\n chain: '',\n },\n {\n coin: 'MANA',\n minimum: '0.00000001',\n limit: '44',\n fee: '23',\n chain: '',\n },\n {\n coin: 'ENJ',\n minimum: '0.00000001',\n limit: '16',\n fee: '12',\n chain: '',\n },\n {\n coin: 'SUSHI',\n minimum: '0.00000001',\n limit: '2.8',\n fee: '1.58',\n chain: '',\n },\n {\n coin: 'SNX',\n minimum: '0.00000001',\n limit: '3.36',\n fee: '2.95',\n chain: '',\n },\n {\n coin: 'GRT',\n minimum: '0.00000001',\n limit: '22',\n fee: '25',\n chain: '',\n },\n {\n coin: 'UNI',\n minimum: '0.00000001',\n limit: '1.4',\n fee: '0.72',\n chain: '',\n },\n {\n coin: 'AAVE',\n minimum: '0.00000001',\n limit: '0.26',\n fee: '0.099',\n chain: '',\n },\n {\n coin: 'YFI',\n minimum: '0.00000001',\n limit: '0.001',\n fee: '0.00044',\n chain: '',\n },\n {\n coin: 'COMP',\n minimum: '0.00000001',\n limit: '0.09',\n fee: '0.046',\n chain: '',\n },\n {\n coin: 'MKR',\n minimum: '0.00000001',\n limit: '0.002',\n fee: '0.0055',\n chain: '',\n },\n {\n coin: 'ATOM',\n minimum: '0.000001',\n limit: '0.01',\n fee: '0.005',\n chain: '',\n },\n {\n coin: 'LUNA',\n minimum: '0.000001',\n limit: '5',\n fee: '0.02',\n chain: '',\n },\n {\n coin: 'FIL',\n minimum: '0.00000001',\n limit: '0.01',\n fee: '0.001',\n chain: '',\n },\n {\n coin: 'ZEC',\n minimum: '0.00000001',\n limit: '0.01',\n fee: '0.001',\n chain: '',\n },\n {\n coin: 'QTUM',\n minimum: '0.00000001',\n limit: '0.02',\n fee: '0.01',\n chain: '',\n },\n {\n coin: 'DOT',\n minimum: '2',\n limit: '3',\n fee: '0.1',\n chain: '',\n },\n {\n coin: 'KSM',\n minimum: '0.1',\n limit: '0.1',\n fee: '0.01',\n chain: '',\n },\n {\n coin: 'XLM',\n minimum: '0.00000001',\n limit: '40',\n fee: '0.02',\n chain: '',\n },\n {\n coin: 'ALGO',\n minimum: '0.00000001',\n limit: '10',\n fee: '0.01',\n chain: '',\n },\n {\n coin: 'SOL',\n minimum: '0.00000001',\n limit: '0.02',\n fee: '0.01',\n chain: '',\n },\n {\n coin: 'AXS',\n minimum: '0.00000001',\n limit: '0.98',\n fee: '0.49',\n chain: '',\n },\n {\n coin: 'MATIC',\n minimum: '0.00000001',\n limit: '36',\n fee: '18',\n chain: '',\n },\n];\n\nexport const TRADING_ACCOUNTS = [\n {\n coin: 'BTC',\n minimum: '0.00000001 BTC',\n max: 'No Limit',\n limit: '0.00000001 BTC',\n fee: 'Zero fees',\n },\n {\n coin: 'USD',\n minimum: '0.002 BTC / 1 USDT',\n max: '10 BTC / 100,000 USDT',\n limit: '1 USD',\n fee: 'Zero fees',\n },\n];\n\nexport const SPOT_TRADING = [\n {\n symbol: 'ETHUSDT',\n displaySymbol: 'ETH / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '10,000 ETH',\n },\n {\n symbol: 'XRPUSDT',\n displaySymbol: 'XRP / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '5,000,000 XRP',\n },\n {\n symbol: 'LINKUSDT',\n displaySymbol: 'LINK / USDT',\n Minimum_price_increment: '0.0001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '5,000,000 LINK',\n },\n {\n symbol: 'XTZUSDT',\n displaySymbol: 'XTZ / USDT',\n Minimum_price_increment: '0.0001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '2,000,000 XTZ',\n },\n {\n symbol: 'LTCUSDT',\n displaySymbol: 'LTC / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '100,000 LTC',\n },\n {\n symbol: 'ADAUSDT',\n displaySymbol: 'ADA / USDT',\n Minimum_price_increment: '0.00005 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '5,000,000 ADA',\n },\n {\n symbol: 'TRXUSDT',\n displaySymbol: 'TRX / USDT',\n Minimum_price_increment: '0.00005 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '5,000,000 TRX',\n },\n {\n symbol: 'ONTUSDT',\n displaySymbol: 'ONT / USDT',\n Minimum_price_increment: '0.0005 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '5,000,000 ONT',\n },\n {\n symbol: 'BCHUSDT',\n displaySymbol: 'BCH / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '10,000 BCH',\n },\n {\n symbol: 'NEOUSDT',\n displaySymbol: 'NEO / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '5,000,000 NEO',\n },\n {\n symbol: 'EOSUSDT',\n displaySymbol: 'EOS / USDT',\n Minimum_price_increment: '0.0001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '5,000,000 EOS',\n },\n {\n symbol: 'DOGEUSDT',\n displaySymbol: 'DOGE / USDT',\n Minimum_price_increment: '0.000001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '5,000,000 DOGE',\n },\n {\n symbol: 'MKRUSDT',\n displaySymbol: 'MKR / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '100 MKR',\n },\n {\n symbol: 'SNXUSDT',\n displaySymbol: 'SNX / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '30,000 SNX',\n },\n {\n symbol: 'SUSHIUSDT',\n displaySymbol: 'SUSHI / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '40,000 SUSHI',\n },\n {\n symbol: 'ENJUSDT',\n displaySymbol: 'ENJ / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '200,000 ENJ',\n },\n {\n symbol: 'GRTUSDT',\n displaySymbol: 'GRT / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '200,000 GRT',\n },\n {\n symbol: 'MANAUSDT',\n displaySymbol: 'MANA / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '400,000 MANA',\n },\n {\n symbol: 'BATUSDT',\n displaySymbol: 'BAT / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '300,000 BAT',\n },\n {\n symbol: 'CHZUSDT',\n displaySymbol: 'CHZ / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '700,000 CHZ',\n },\n {\n symbol: 'YFIUSDT',\n displaySymbol: 'YFI / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '10 YFI',\n },\n {\n symbol: 'COMPUSDT',\n displaySymbol: 'COMP / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '1,000 COMP',\n },\n {\n symbol: 'AAVEUSDT',\n displaySymbol: 'AAVE / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '1,000 AAVE',\n },\n {\n symbol: 'UNIUSDT',\n displaySymbol: 'UNI / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '15,000 UNI',\n },\n {\n symbol: 'ATOMUSDT',\n displaySymbol: 'ATOM / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '20,000 ATOM',\n },\n {\n symbol: 'LUNAUSDT',\n displaySymbol: 'LUNA / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '40,000 LUNA',\n },\n {\n symbol: 'FILUSDT',\n displaySymbol: 'FIL / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '3,000 FIL',\n },\n {\n symbol: 'ZECUSDT',\n displaySymbol: 'ZEC / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '2,000 ZEC',\n },\n {\n symbol: 'QTUMUSDT',\n displaySymbol: 'QTUM / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '30,000 QTUM',\n },\n {\n symbol: 'DOTUSDT',\n displaySymbol: 'DOT / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '10,000 DOT',\n },\n {\n symbol: 'KSMUSDT',\n displaySymbol: 'KSM / USDT',\n Minimum_price_increment: '0.01 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '1,000 KSM',\n },\n {\n symbol: 'XLMUSDT',\n displaySymbol: 'XLM / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '1,000,000 XLM',\n },\n {\n symbol: 'ALGOUSDT',\n displaySymbol: 'ALGO / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '300,000 ALGO',\n },\n {\n symbol: 'SOLUSDT',\n displaySymbol: 'SOL / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '10,000 SOL',\n },\n {\n symbol: 'AXSUSDT',\n displaySymbol: 'AXS / USDT',\n Minimum_price_increment: '0.001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '10,000 AXS',\n },\n {\n symbol: 'MATICUSDT',\n displaySymbol: 'MATIC / USDT',\n Minimum_price_increment: '0.00001 USDT',\n minimum_order_value: '10 USDT',\n max_order_amount: '300,000 MATIC',\n },\n];\n\nexport const CONTRACT_TRADING = [\n {\n symbol: 'BTCUSD',\n displaySymbol: 'BTC / USD',\n quotation_and_settlement: 'Settled in BTC, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-100x',\n initial_margin: 'Initial Margin:1%+',\n maint_margin: 'Maint. Margin:0.5%+',\n minimum_price_increment: '0.5 USD',\n },\n {\n symbol: 'ETHUSD',\n displaySymbol: 'ETH / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.05 USD',\n },\n {\n symbol: 'XRPUSD',\n displaySymbol: 'XRP / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001 USD',\n },\n {\n symbol: 'LINKUSD',\n displaySymbol: 'LINK / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001 USD',\n },\n {\n symbol: 'XTZUSD',\n displaySymbol: 'XTZ / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.01 USD',\n },\n {\n symbol: 'LTCUSD',\n displaySymbol: 'LTC / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.01 USD',\n },\n {\n symbol: 'GOLDUSD',\n displaySymbol: 'GOLD / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-100x',\n initial_margin: 'Initial Margin:1%+',\n maint_margin: 'Maint. Margin:0.5%+',\n minimum_price_increment: '0.05 USD',\n },\n {\n symbol: 'ADAUSD',\n displaySymbol: 'ADA / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001 USD',\n },\n {\n symbol: 'BCHUSD',\n displaySymbol: 'BCH / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.05 USD',\n },\n {\n symbol: 'COMPUSD',\n displaySymbol: 'COMP / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.05 USD',\n },\n {\n symbol: 'YFIUSD',\n displaySymbol: 'YFI / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.5 USD',\n },\n {\n symbol: 'ALGOUSD',\n displaySymbol: 'ALGO / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001 USD',\n },\n {\n symbol: 'DOTUSD',\n displaySymbol: 'DOT / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001 USD',\n },\n {\n symbol: 'UNIUSD',\n displaySymbol: 'UNI / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001 USD',\n },\n {\n symbol: 'DOGEUSD',\n displaySymbol: 'DOGE / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'AAVEUSD',\n displaySymbol: 'AAVE / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.01USD',\n },\n {\n symbol: 'BATUSD',\n displaySymbol: 'BAT / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'CHZUSD',\n displaySymbol: 'CHZ / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'MANAUSD',\n displaySymbol: 'MANA / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'ENJUSD',\n displaySymbol: 'ENJ / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'SUSHIUSD',\n displaySymbol: 'SUSHI / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001USD',\n },\n {\n symbol: 'SNXUSD',\n displaySymbol: 'SNX / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001USD',\n },\n {\n symbol: 'GRTUSD',\n displaySymbol: 'GRT / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'MKRUSD',\n displaySymbol: 'MKR / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.1USD',\n },\n {\n symbol: 'TRXUSD',\n displaySymbol: 'TRX / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'EOSUSD',\n displaySymbol: 'EOS / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001USD',\n },\n {\n symbol: 'ONTUSD',\n displaySymbol: 'ONT / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'NEOUSD',\n displaySymbol: 'NEO / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.01USD',\n },\n {\n symbol: 'ZECUSD',\n displaySymbol: 'ZEC / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.01USD',\n },\n {\n symbol: 'FILUSD',\n displaySymbol: 'FIL / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.01USD',\n },\n {\n symbol: 'KSMUSD',\n displaySymbol: 'KSM / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.01USD',\n },\n {\n symbol: 'XMRUSD',\n displaySymbol: 'XMR / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.01USD',\n },\n {\n symbol: 'QTUMUSD',\n displaySymbol: 'QTUM / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001USD',\n },\n {\n symbol: 'XLMUSD',\n displaySymbol: 'XLM / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.0001USD',\n },\n {\n symbol: 'ATOMUSD',\n displaySymbol: 'ATOM / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001USD',\n },\n {\n symbol: 'LUNA',\n displaySymbol: 'LUNA / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001USD',\n },\n {\n symbol: 'SOLUSD',\n displaySymbol: 'SOL / USD',\n quotation_and_settlement: 'Settled in USD, quoted in USD',\n taker_fee_rate: 'Taker:0.075%',\n maker_fee_rate: 'Maker:-0.025%',\n margin_and_leverage: 'Cross and 1-20x',\n initial_margin: 'Initial Margin:5%+',\n maint_margin: 'Maint. Margin:1%+',\n minimum_price_increment: '0.001USD',\n },\n];\n\nexport const currencyEnum = {\n USDT: 'USDT',\n TRY: 'TRY',\n};\n\nexport const IMAGE_ICON = {\n 0: IMAGES_V2.STANDARD,\n 1: IMAGES_V2.VIP_1,\n 2: IMAGES_V2.VIP_2,\n 3: IMAGES_V2.VIP_3,\n 4: IMAGES_V2.VIP_4,\n 5: IMAGES_V2.VIP_5,\n 6: IMAGES_V2.VIP_6,\n 7: IMAGES_V2.VIP_7,\n 8: IMAGES.LEVEL_V8,\n 9: IMAGES.LEVEL_V9,\n 10: IMAGES_V2.STAR_VIP,\n};\n\nexport const MM_ICON = {\n 1: IMAGES_V2.MM_GOLD_1,\n 2: IMAGES_V2.MM_GOLD_2,\n 3: IMAGES_V2.MM_GOLD_3,\n};\n\nexport const MAX_NOT_STAR_USER_LEVEL = 5;\n\nexport const SpecialContractLevels = [\n {\n // 自定义等级值写大,防止冲突\n level: 10000,\n levelName: 'SILVER',\n contTotalMakerVolRate: '0.08%',\n contMarkerVolRate: '75%',\n contMakerFeeEr: -2500,\n },\n {\n level: 10001,\n levelName: 'GOLD',\n contTotalMakerVolRate: '0.4%',\n contMarkerVolRate: '80%',\n contMakerFeeEr: -5000,\n },\n];\n","import {numUtil} from '@/helper/num';\n\nexport function genAmount(item) {\n if (!item) {\n return '0';\n }\n if (item === '-') {\n return '∞';\n }\n return numUtil.abbreviateNumber(item);\n}\n","import {BehaviorSubject, combineLatest, Subject} from 'rxjs';\nimport {filter, map, skipUntil, switchMap} from 'rxjs/operators';\nimport {mc} from '@/core';\nimport {LINKS} from '@/const/link';\nimport {configApi} from '@/api/config';\nimport {userApi} from '@/api/user';\nimport {vipProgramApi} from '@/api/vip';\nimport {browser$} from '@/streams/browser';\nimport {afterLogin$} from '@/streams/auth';\nimport {contracts$} from '@/streams/config/contract';\nimport {currencyEnum, MAX_NOT_STAR_USER_LEVEL, SpecialContractLevels} from './const';\nimport {genAmount} from './utils';\n\nexport const walletCfg$ = new BehaviorSubject([]);\nexport const accountCfg$ = new BehaviorSubject([]);\nexport const spotsCfg$ = new BehaviorSubject([]);\nexport const contractCfg$ = new BehaviorSubject([]);\nexport const btcCfg$ = new BehaviorSubject({displaySymbol: '', maxBaseOrderSize: '', minOrderValue: '', quoteTickSize: ''});\nexport const contractsConfig$ = new BehaviorSubject([]);\nexport const veptLevelConfig$ = new BehaviorSubject([]);\nexport const aumLevelConfig$ = new BehaviorSubject([]);\nexport const feeQuery$ = new Subject();\nexport const feeConfig$ = new BehaviorSubject([]);\nexport const spotProfile$ = new BehaviorSubject({});\nexport const query$ = new BehaviorSubject({currency: currencyEnum.USDT});\nexport const feeConditionsQuery$ = new BehaviorSubject({spotBlacklistCurrencies: currencyEnum.TRY});\nexport const mangerEmail$ = new BehaviorSubject('vip@phemex.com');\nexport const starLevel$ = new BehaviorSubject({});\nexport const userLevels$ = new BehaviorSubject([]);\nexport const instituteLevels$ = new BehaviorSubject([]);\nexport const displayLevelSpotCondition$ = new BehaviorSubject(() => '');\nexport const displayLevelContractCondition$ = new BehaviorSubject(() => '');\nexport const levelFeeConfig$ = new BehaviorSubject([]);\nexport const isUserInstituteLevel$ = combineLatest([instituteLevels$, spotProfile$]).pipe(map(([instituteLevels, {vipLevel}]) => !!instituteLevels.find(({level}) => level === vipLevel)));\nexport const maxLevel$ = combineLatest([isUserInstituteLevel$, userLevels$, instituteLevels$]).pipe(\n map(([isUserInstituteLevel, userLevels, instituteLevels]) => {\n if (isUserInstituteLevel) {\n return instituteLevels[instituteLevels.length - 1];\n }\n return userLevels[userLevels.length - 1];\n })\n);\n\nexport const userCurrentLevelDetails$ = combineLatest([userLevels$, instituteLevels$, veptLevelConfig$, aumLevelConfig$, spotProfile$, starLevel$]).pipe(\n filter(\n ([userLevels, instituteLevels, veptLevelConfig, aumLevelConfig, spotProfile]) =>\n userLevels.length && instituteLevels.length && veptLevelConfig.length && aumLevelConfig.length && spotProfile.vipLevel !== undefined\n ),\n map(([userLevels, instituteLevels, veptLevelConfig, aumLevelConfig, {vipLevel, veptLevel, aumLevel, contractLevel, contractShareLevel, spotLevel, spotShareLevel}, starLevel]) => {\n const {next, current} = getCurrentAndNextLevel(userLevels, instituteLevels, vipLevel);\n const {current: spotCurrent, next: spotNext} = getCurrentAndNextLevel(userLevels, instituteLevels, spotLevel);\n const {current: contractCurrent, next: contractNext} = getCurrentAndNextLevel(userLevels, instituteLevels, contractLevel);\n const veptLevelCurrent = veptLevelConfig.find(({level}) => level === veptLevel);\n const aumLevelCurrent = aumLevelConfig.find(({level}) => level === aumLevel);\n // 共享等级\n if (vipLevel <= MAX_NOT_STAR_USER_LEVEL) {\n return {\n shareLevel: true,\n next: {...next, contract: next, spot: next, aum: aumLevelConfig.find(({level}) => level === vipLevel + 1), vept: veptLevelConfig.find(({level}) => level === vipLevel + 1)},\n current: {...current, spot: spotCurrent, contract: contractCurrent, aum: aumLevelCurrent, vept: veptLevelCurrent},\n };\n }\n // 最大共享star等级\n if (vipLevel === starLevel.level) {\n const {next: spotNext} = getCurrentAndNextLevel(userLevels, instituteLevels, spotShareLevel);\n const {next: contractNext} = getCurrentAndNextLevel(userLevels, instituteLevels, contractShareLevel);\n return {\n shareLevel: true,\n next: {...next, contract: contractNext, spot: spotNext},\n current: {...current, spot: spotCurrent, contract: contractCurrent},\n };\n }\n return {\n shareLevel: false,\n next: {...next, contract: contractNext, spot: spotNext},\n current: {...current, spot: spotCurrent, contract: contractCurrent},\n };\n })\n);\n\nspotProfile$.subscribe(async ({effectiveLevel}) => {\n if (effectiveLevel) {\n const {data} = await vipProgramApi.getVIPManagerInfo();\n mangerEmail$.next(data.bdEmail || 'vip@phemex.com');\n }\n});\n\nquery$\n .pipe(\n skipUntil(browser$),\n switchMap((query) => configApi.getFeeConfig(query))\n )\n .subscribe((configRes) => setFeeConfig(configRes));\n\nfeeQuery$\n .pipe(\n skipUntil(browser$),\n switchMap((query) => configApi.getFeeConfigList(query))\n )\n .subscribe((configRes) => setFeeConfigList(configRes));\n\ncombineLatest([afterLogin$, query$])\n .pipe(\n skipUntil(browser$),\n skipUntil(afterLogin$),\n switchMap(([, query]) => userApi.userSpotProfile(query))\n )\n .subscribe((res) => setUserSpotProfile(res));\n\nfeeConditionsQuery$\n .pipe(\n skipUntil(browser$),\n switchMap((query) => configApi.getFeeCondition(query))\n )\n .subscribe((res) => setFeeCondition(res));\n\nasync function setFeeCondition(res) {\n const {data, error} = res;\n if (data) {\n const {wallets, tradingAccounts, spotTradings, contractTradings} = data;\n\n walletCfg$.next(wallets);\n\n const btcCfg = spotTradings.find((o) => o.symbol === 'sBTCUSDT');\n if (btcCfg) {\n btcCfg$.next(btcCfg);\n }\n accountCfg$.next(tradingAccounts);\n\n const spots = spotTradings.filter((o) => o.symbol !== 'sBTCUSDT');\n spotsCfg$.next(spots);\n\n contractCfg$.next(contractTradings);\n }\n\n if (error) {\n mc.send('toast', 'error', error);\n }\n}\n\ncombineLatest([contracts$, contractCfg$])\n .pipe(\n map(([contracts, contractCfg]) => convertContractConfig(contracts, contractCfg)),\n filter(Boolean)\n )\n .subscribe((o) => contractsConfig$.next(o));\n\nfunction convertContractConfig(contracts, contractCfg) {\n return contractCfg.map((item) => {\n const contract = contracts.find((o) => o.symbol === item.symbol);\n if (!contract) {\n return item;\n }\n const {contractSide, symbolV2, settleCurrencyDisplay} = contract;\n const path = LINKS[contractSide > 0 ? 'PHEMEX_CONTRACT_TRADE' : 'PHEMEX_CONTRACT_INVERSE_TRADE'];\n item.tradeLink = path + '/' + symbolV2;\n item.settleCurrencyDisplay = settleCurrencyDisplay;\n return item;\n });\n}\n\nfunction setFeeConfig(res) {\n const {data, error} = res;\n if (data) {\n const {rows} = data;\n feeConfig$.next([...rows]);\n rows.sort((i1, i2) => i1.level - i2.level);\n const vipLevel = rows.pop();\n const userLevels = rows.filter((o) => o.level <= MAX_NOT_STAR_USER_LEVEL);\n const instituteLevels = rows.filter((o) => o.level > MAX_NOT_STAR_USER_LEVEL);\n const allUserLevels = [...userLevels, vipLevel];\n levelFeeConfig$.next([...allUserLevels, ...instituteLevels]);\n displayLevelSpotCondition$.next(genDisplayLevelCondition(allUserLevels, instituteLevels, 'spot'));\n displayLevelContractCondition$.next(genDisplayLevelCondition(allUserLevels, instituteLevels, 'contract'));\n // 展示在2025-02-11新增\"SILVER\",\"GOLD\"等级,并且为固定交易费率\n instituteLevels$.next([...instituteLevels, ...SpecialContractLevels]);\n userLevels$.next(allUserLevels);\n starLevel$.next(vipLevel);\n }\n if (error) {\n mc.send('toast', 'error', error);\n }\n}\n\nfunction setFeeConfigList(res) {\n const {data, error} = res;\n if (data) {\n const {aum, vept} = data;\n veptLevelConfig$.next(vept);\n aumLevelConfig$.next(aum);\n }\n if (error) {\n mc.send('toast', 'error', error);\n }\n}\n\nfunction setUserSpotProfile(res) {\n const {data, error} = res;\n if (data) {\n spotProfile$.next(data);\n }\n if (error) {\n mc.send('toast', 'error', error);\n }\n}\n\nfunction genDisplayLevelCondition(userLevels, instituteLevels, type) {\n const attrsMap = {\n spot: {\n volume: 'lowerSpotTrdVol',\n api: 'upperSpotApiRatio',\n makerApi: 'lowerSpotMakerRatio',\n },\n contract: {\n volume: 'lowerContTrdVol',\n api: 'upperContApiRatio',\n makerApi: 'lowerContMakerRatio',\n },\n };\n return function (levelIndex, apiRatio) {\n const ret = [];\n const {current, next} = getCurrentAndNextLevel(userLevels, instituteLevels, levelIndex);\n ret.push('[');\n ret.push(genAmount(current[attrsMap[type].volume]));\n ret.push(',');\n next ? ret.push(genAmount(next[attrsMap[type].volume])) : ret.push('~∞');\n ret.push(')');\n const makerApiRatio = current[attrsMap[type].makerApi] * 100;\n if (current.level > 0) {\n if (userLevels.includes(current)) {\n ret.push(` & API ≤ ` + apiRatio * 100 + '%');\n } else {\n ret.push(` & API > ` + apiRatio * 100 + '%');\n }\n }\n if (makerApiRatio > 0) {\n ret.push(` & ${makerApiRatio}%Maker`);\n }\n return ret.join('');\n };\n}\n\nfunction getCurrentAndNextLevel(userLevels, instituteLevels, levelIndex) {\n let current = userLevels.find(({level}) => level === levelIndex);\n let next;\n if (current) {\n const index = userLevels.indexOf(current);\n next = userLevels[index + 1];\n } else {\n current = instituteLevels.find(({level}) => level === levelIndex);\n const index = instituteLevels.indexOf(current);\n next = instituteLevels[index + 1];\n }\n return {current, next};\n}\n","import {BehaviorSubject, combineLatest, from, map, Subject, filter} from 'rxjs';\nimport {startWith, switchMap, throttleTime} from 'rxjs/operators';\nimport {browser$} from '@/streams/browser';\nimport {isLogin$} from '@/streams/auth';\nimport {buyCryptoVeptAirdropApi} from '@/api/buy-crypto-vept-airdrop';\nimport {veptLevelConfig$, spotProfile$, feeQuery$} from '@/modules/fees-conditions/stream';\n\nexport const rewardQuery$ = new Subject();\nexport const rewardState$ = new BehaviorSubject({loading: false, data: initData()});\nrewardQuery$.pipe(switchMap(() => useLoading(buyCryptoVeptAirdropApi.getRewardInfo(), {loading: true, success: false, data: initData()}))).subscribe((res: any) => {\n rewardState$.next(res.isInit ? res : createRes(res?.data || initData()));\n});\n\nexport const configQuery$ = new Subject();\nexport const configState$ = new BehaviorSubject({loading: false, data: formatConfig([])});\nconfigQuery$.pipe(switchMap(() => useLoading(buyCryptoVeptAirdropApi.getConfig({pageNum: 1, pageSize: 1000}), {loading: true, success: false, data: formatConfig([])}))).subscribe((res: any) => {\n configState$.next(res.isInit ? res : createRes(formatConfig(res?.data?.rows || [])));\n});\n\ncombineLatest([browser$, isLogin$])\n .pipe(filter(([inBrowser, isLogin]) => inBrowser && isLogin))\n .subscribe(() => {\n feeQuery$.next(0);\n configQuery$.next(0);\n });\n\ncombineLatest([isLogin$, browser$])\n .pipe(filter(([isLogin, browser]) => isLogin && browser))\n .pipe(throttleTime(200))\n .subscribe(() => {\n rewardQuery$.next(0);\n });\n\nexport const config$ = combineLatest([veptLevelConfig$, configState$, spotProfile$]).pipe(\n map(([xptLevel, config, user]) => {\n const {numbers} = config?.data || {};\n return xptLevel?.map((x) => {\n const count = numbers[x.level]?.value ? Number(numbers[x.level].value) : 0;\n return {...x, count, isCurrent: user?.veptLevel === x.level};\n });\n })\n);\n\nfunction useLoading(request, initData: {loading: boolean; data?: any; success?: boolean; isInit?: boolean} = {loading: true, data: [], success: false, isInit: true}) {\n return from(request).pipe(startWith(initData));\n}\n\nfunction createRes(data: any) {\n return {loading: false, success: true, data: data || []};\n}\n\nfunction initData() {\n return {totalRewardAmount: 0, monthlyRewardCount: 0, usedRewardCount: 0};\n}\n\nfunction formatConfig(data: any[]) {\n const numList = data?.filter((d) => d.configType === 'VIP_NUM');\n const amtList = data?.filter((d) => d.configType === 'ORDER_AMT');\n const numbers = numList?.reduce((obj, o) => {\n obj[o.rangeStart] = o;\n return obj;\n }, {});\n const amounts = amtList?.reduce((list, o) => {\n return [...list, {max: o.rangeEnd, min: o.rangeStart, value: o.value}];\n }, []);\n return {numbers, amounts};\n}\n","\n\n\n\n\n
\n {#if showNumbers}\n
{LG(lang.MonthlyBalance, {VeStakeCurrency: veStakeCurrency})}
\n
\n \n \n \n \n \n \n {#each configs as row}\n \n \n \n \n \n {/each}\n
{LG(lang.UserLevel)}{veStakeCurrency} {LG(lang.Balance)}{LG(lang.MonthlyBuyCryptoAirdrops)}
{row.levelName}{numUtil.delimit(row.requiredBalance)}{row.count}
\n
\n {/if}\n
{LG(lang.DetailAirdropAmount)}
\n
\n \n \n \n \n \n {#each amounts as row}\n \n \n \n {/each}\n
{LG(lang.PurchaseAmounts)}{LG(lang.Airdrop)}
≥{row.min}{row.value} USDT
\n
\n
{LG(lang.DetailNotes)}
\n
\n
\n","\n\n\n\n
\n
\n
\n
\n
\n {LG(lang.BuyCryptoAirdropsPrivilegeT)}\n
\n
\n
\n {LG(lang.MonthlyBuyCryptoAirdrops)}: \n {$rewardState$?.data?.monthlyRewardCount};\n
\n
\n {LG(lang.RemainingAirdropsForTheMonth)}: \n {Math.max(0, $rewardState$?.data?.monthlyRewardCount - $rewardState$?.data?.usedRewardCount)}\n
\n {#if $isLogin$}\n
{LG(lang.Details)}
\n \n {/if}\n
\n
\n
\n
\n","import {BehaviorSubject, combineLatest} from 'rxjs';\nimport {filter, switchMap} from 'rxjs/operators';\nimport {mc} from '@/core';\nimport {web3Api} from '@/api/web3';\nimport {activeStakeProject$} from '@/modules/web3/stake/streams/stake';\n\nexport enum QueryDateType {\n '1W' = '1W',\n '1M' = '1M',\n '3M' = '3M',\n '1Y' = '1Y',\n}\n\nexport const queryDateType$ = new BehaviorSubject(QueryDateType['1W']);\nexport const historyList$ = new BehaviorSubject([]);\n\ncombineLatest({stakeProject: activeStakeProject$, dateType: queryDateType$})\n .pipe(\n filter(({stakeProject, dateType}) => !!dateType && !!stakeProject.projectKey),\n switchMap(({stakeProject, dateType}) => loadHistoryList(stakeProject.projectKey, dateType))\n )\n .subscribe((o) => historyList$.next(o));\n\nasync function loadHistoryList(projectKey, dateType): Promise {\n const {data, error} = await web3Api.getStakeRewardsAprHistory({\n dateType,\n projectKey,\n });\n if (error) {\n mc.send('toast', 'error', error);\n }\n return (data && data.rows) || [];\n}\n","\n\n\n\n\n
\n {LG(lang.PopupTitle)}\n
\n
\n
{chartTipApr || activeSummaryInfo.apy}%
\n
\n {#each QueryDateTypeArr as item}\n {item}\n {/each}\n
\n
\n
\n\n","\n\n\n\n\n
\n {LG(lang.PopupTitle)}\n
\n
\n
{LG(lang.ActionDesc, {StakeCurrency: stakeProject.stakeCurrency, Amount: formatDisplayValueStr(rewardInfo.unclaimedAmountRq)})}
\n
\n
\n \n \n
\n
\n","\n\n\n\n\n
\n {LG(lang.PopupTitle)}\n
\n
\n {LG(lang.OpenAutoCompoundDesc, {StakeCurrency: stakeProject.stakeCurrency, VeStakeCurrency: stakeProject.veCurrency})}\n
\n
\n \n \n
\n
\n","\n\n\n\n
\n
\n
\n
\n {LG(lang.HoldingRewards, {VeStakeCurrency: stakeProject.veCurrency})}\n \n \n {LG(lang.HoldingRewardsTip, {StakeCurrency: stakeProject.stakeCurrency, VeStakeCurrency: stakeProject.veCurrency})}\n \n
\n {#if isLogin}\n {LG(lang.NewStakingMechanism)}\n {/if}\n
\n
\n
\n
\n
\n
\n
\n {LG(lang.Apr)}\n \n \n {LG(lang.AprTip, {StakeCurrency: stakeProject.stakeCurrency, VeStakeCurrency: stakeProject.veCurrency})}\n \n
\n
\n \"Apr\"\n {($startStakeReward$ && summaryInfo.apy) || '--'} %\n
\n
\n
\n
{LG(lang.ClaimableRewards)}
\n
{formatDisplayValueStr(rewardInfo.unclaimedAmountRq)} {isLogin ? stakeInfo.stakeCurrency : ''}
\n
\n
\n
\n {LG(lang.AutoCompound)}\n \n \n {LG(rLang.OpenAutoCompoundDesc, {StakeCurrency: stakeProject.stakeCurrency})}\n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n \n
\n
{LG(lang.VipPrivilege)}
\n
\n
{LG(lang.CurrentPrivilege)} VIP {isLogin ? userMemberLevel : '--'}
\n
\n {#if accountNextLevelVipConfig || !isLogin}\n \n {@html LG(lang.GetNextPrivilegeTip, {\n StakeAmount:\n '' +\n (accountNextLevelVipConfig ? formatDisplayValueStr(accountNextLevelVipConfig.requiredBalance, stakeCurrencyConfig.valuePrecision) : '--') +\n '',\n VeStakeCurrency: stakeProject.veCurrency,\n NextPrivilege: '' + (accountNextLevelVipConfig ? accountNextLevelVipConfig.level : '--') + '',\n })}\n \n {/if}\n
\n
\n
\n {@html LG(lang.UpgradeLevelDesc, {StakeCurrency: stakeProject.stakeCurrency, MoreInformation: `${LG(lang.MoreInformation)}`})}\n
\n
\n \n
\n
\n
\n","\n\n\n\n
\n

{LG(lang.Title)}

\n
\n \n \n {#each Protocols as item}\n
\n
\n
{LG(lang[item.titleKey])}
\n
\n
{LG(lang[item.descKey], {VeStakeCurrency: stakeProject.veCurrency})}
\n {#each item.detailsKey as ite}\n
{LG(lang[ite])}
\n {/each}\n
\n \n
\n
\n {/each}\n {#each ComingSoonProtocols as item}\n
\n
\n
{LG(lang[item.titleKey])}
\n
{LG(lang.ComingSoon)}
\n
\n
{LG(lang[item.descKey], {VeStakeCurrency: stakeProject.veCurrency})}
\n
{LG(lang.ComingSoon)}…
\n
\n {/each}\n
\n
\n","\n\n\n\n\n {LG(lang.PageTitle)}\n \n \n \n \n \n \n \n \n\n\n\n {#if web3StakeState}\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n {@html LG(lang.PowerChain, {Chain: `${PowerChainName}`})}\n
\n
\n