{"version":3,"sources":["config/constants.ts","utils/stellar/poolDataHelper.ts","types/index.ts","theme/index.tsx","components/common/Button/index.tsx","components/common/Card/index.tsx","components/common/Input/index.tsx","components/common/Modal/index.tsx","assets/images/icn_arrow_down.svg","components/common/Divider/index.tsx","components/common/Select/index.tsx","components/common/Table/index.tsx","components/common/Toggle/index.tsx","assets/images/icn_ybx.svg","assets/images/loading_spinner.gif","utils/index.ts","components/modals/BuildingTransactionModal.tsx","assets/images/wallet_albedo.svg","assets/images/wallet_freighter.svg","components/modals/WalletConnectModal.tsx","hooks/index.tsx","utils/protocol/mathHelper.ts","utils/protocol/assetHelper.ts","utils/protocol/positionHelper.ts","utils/stellar/horizonApi.ts","utils/stellar/paymentPathDetail.ts","utils/stellar/stellarHelper.ts","utils/stellar/index.ts","utils/wallet/albedo.ts","utils/wallet/freighter.ts","contexts/yieldblox.tsx","contexts/wallet.tsx","utils/turret/index.ts","mocks/models/index.ts","contexts/settings.tsx","assets/images/ybx_logo_light_tn.svg","assets/images/ybx_logo_dark_tn.svg","assets/images/icn_scriptee.svg","assets/images/icn_nav_active.svg","assets/images/icn_copy.svg","assets/images/icn_light.svg","assets/images/icn_dark.svg","assets/images/faucetIcon.svg","contexts/price.tsx","contexts/user.tsx","contexts/turret.tsx","components/Header/index.tsx","assets/images/icn_question.png","assets/images/goodHF.png","components/AccountOverview/index.tsx","assets/images/badHF.png","assets/images/medHF.png","assets/images/icn_ybx1.svg","assets/images/escrow_background_leaf.svg","components/EscrowInfo/index.tsx","components/SectionTitle/index.tsx","components/modals/ConfirmActionModal.tsx","assets/images/icn_arrow_right.svg","components/common/Button/TooltipButton.tsx","components/modals/DepositModal.tsx","components/modals/WithdrawModal.tsx","components/modals/ConfirmTransactionModal.tsx","assets/images/icn_check_circle.svg","components/modals/TransactionSuccessModal.tsx","assets/images/icn_sprout_sad.svg","components/modals/TransactionFailModal.tsx","components/modals/ManageCollateralModal.tsx","components/modals/BorrowModal.tsx","components/modals/RepayModal.tsx","assets/images/icn_escrow1.svg","assets/images/icn_escrow2.svg","assets/images/icn_escrow3.svg","components/modals/EscrowModal.tsx","assets/images/icn_warning.png","components/modals/ClaimModal.tsx","components/modals/MenuModal.tsx","assets/images/icn_prop_alloc.png","assets/images/icn_link.svg","assets/images/icn_yes.svg","assets/images/icn_no.svg","assets/images/icn_edit.svg","components/modals/ProposalModal.tsx","components/modals/FaucetModal.tsx","components/AssetIcon/index.tsx","components/ProposalTag/index.tsx","pages/Market/LendingMarket.tsx","pages/Market/BorrowMarket.tsx","pages/Market/index.tsx","assets/images/icn_redo.svg","pages/Profile/BorrowTile.tsx","pages/Profile/LendTile.tsx","pages/Profile/MyPositions.tsx","pages/Profile/index.tsx","pages/Governance/GovernanceOverview.tsx","pages/Governance/ProposalItem.tsx","pages/Governance/AllocationItem.tsx","components/modals/AllocationModal.tsx","pages/Governance/index.tsx","assets/images/icn_turret.png","pages/Turret/TurretNetwork.tsx","assets/images/green_i_icn.svg","components/modals/TurretModal.tsx","pages/Turret/index.tsx","components/modals/TosModal.tsx","components/modals/RegionBlockModal.tsx","pages/index.tsx","App.tsx","index.tsx"],"names":["HORIZON_URL","HORIZON_NETWORK","POOL_ACCOUNT_ID","ISSUANCE_ACCOUNT_ID","ESCROW_ACCOUNT_ID","YBX_TOKEN","VEYBX_TOKEN","WalletType","PositionType","InterestType","TxText","TxType","MEDIA_WIDTHS","upToExtraSmall","upToSmall","upToMedium","upToLarge","upToExtraLarge","DARK_COLORS","white","black","green","green1","purple","red","red1","light_grey","light_grey1","light_grey2","light_grey3","grey1","grey2","yellow","yellow1","shadow","blue","pink","defaultTheme","colors","grids","sm","md","lg","shadow1","mediaWidth","Object","keys","reduce","accumulator","size","a","b","c","css","flexColumnNoWrap","flexRowNoWrap","darkTheme","lightTheme","ThemedGlobalStyle","createGlobalStyle","theme","GreenText","styled","span","PurpleText","StyledButton","button","variant","disable","Button","children","disabled","onClick","props","e","StyledCard","div","Card","InputWrapper","background","StyledInput","input","Input","React","forwardRef","ref","error","buttonText","onButtonClick","style","width","height","marginRight","fontSize","Container","open","ContentCard","ModalHeader","ModalFooter","Modal","onClose","stopPropagation","TopRightModal","alignContent","justifyContent","marginTop","StyledDivider","select","img","hr","Divider","StyledTable","table","Table","StyledToggle","ToggleValue","active","Toggle","value","texts","onUpdate","map","text","idx","length","handleUpdate","getShortenWalletAddress","address","substr","getAdjDisplayBalance","balance","rate","exchangeRate","console","log","getFormattedNumber","getAdjBalance","getDisplayBalance","assetCode","fullDisplay","undefined","toFixed","getDisplayRate","Math","abs","Infinity","getCollateralRate","position","posCBalance","parseFloat","posUCBalance","uncollateralizedBalance","loop","res","parts","split","Number","toLocaleString","join","getDisplayHealthFactor","MAX_SAFE_INTEGER","getTimeDifference","time","secs","Date","now","floor","mins","hours","days","Content","RowItem","DetailWrapper","IconWrapper","BuildingTransactionModal","wallet","src","loadingSpinner","alt","lineHeight","ybxIcon","WalletButton","LogoIconWrapper","Title","WalletIcon","WalletConnectModal","connect","handleWalletClick","type","toast","success","flexDirection","borderTop","Albedo","albedoIcon","Freighter","borderBottomLeftRadius","borderBottomRightRadius","freighterIcon","useLocalStorageState","key","defaultState","useState","storedState","localStorage","getItem","JSON","parse","state","setState","setLocalStorageState","useCallback","newState","removeItem","setItem","stringify","stellarMinTruncate","n","stellarMin","STELLAR_MIN","minMultiple","round","log10","CalculateLendYbxTokenEffect","outstandingYbx","poolTokenRecord","yTokenRate","assetConsts","CalculateYbxIssuanceForYear","lendingAllocation","claimable_balances_amount","CalculateBorrowYbxTokenEffect","outstandingLiabilities","borrowingAllocation","CalculateTokenYield","perTokenIssuance","tokenRate","underlyingPrice","ybxPrice","CalculateLendSpotRate","borrowRate","utilRate","CalculateSYBXSpotRate","outstandingSYBX","stakingPoolYbx","CalculateAvgUtilRateForBalance","Error","CalculatePoolTokenPresentValue","CalculateMaxPermittedBorrow","liabilityHealth","collateralHealth","dividedBy","minus","times","toNumber","CalculateNewHealthFactor","healthFactor","cDeltaUSD","lDeltaUSD","liabilities","BigNumber","liabilitiesUSD","plus","effectiveCollateral","borrowLimitUSD","safeMath","divideToNumber","CalculateVeYBXIssued","ybx","period","VerifyPoolAssetId","assetId","passRegex","RegExp","test","Borrow","GetAssetFromId","Asset","native","assetIdCodes","GetIdFromAsset","asset","isNative","code","issuer","CreateCollateralFromNone","publicKey","amount","horizonApi","GetAccountAsync","account","stellarHelper","CreateTransactionBuilder","txBuilder","assetHelper","addOperation","Operation","createClaimableBalance","claimants","Claimant","DIST_ACCOUNT_ID","predicateNot","predicateUnconditional","build","toXDR","horizon","Server","GetCurrentLedger","ledgers","order","limit","call","records","sequence","loadAccount","GetHoldersForAssetAsync","accounts","forAsset","GetAssetAsync","assetIssuer","assets","forCode","forIssuer","GetAccountTransactionsAsync","cursor","transactions","forAccount","GetTransactionOperationsAsync","txHash","operations","forTransaction","SubmitTransactionAsync","transaction","submitTransaction","GetClaimableBalancesByIdAsync","claimableBalanceId","claimableBalances","claimableBalance","GetClaimableBalancesForAccountAsync","accountId","claimant","GetDepositClaimableBalanceAsync","sponsor","page","GetTransactionForClaimableBalanceAsync","cBalanceId","forClaimableBalance","GetTradesAsync","sellAsset","buyAsset","trades","forAssetPair","GetFeeStatsAsync","feeStats","GetOrderbookAsync","selling","buying","orderbook","GetTradeAggregationAsync","baseId","counterId","timespan","base","counter","currentTime","oneDayAgo","tradeAggregation","result","GetPathStrictSendAsync","sendAssetId","destAssetId","sendAmount","sendAsset","destAsset","strictSendPaths","GetPathStrictReceiveAsync","receiveAmount","strictReceivePaths","PaymentPathDetail","destAmount","path","GetCurrentFee","fee","fee_charged","mode","sourceAccount","memo","maxTime","minTime","TransactionBuilder","Memo","networkPassphrase","timebounds","CreateUnsignedTokenXdr","walletAddress","hash","tempAcct","Account","manageData","name","setTimeout","SubmitTransaction","envelopeXdr","tx","fromXDR","Transaction","VerifyTrustline","balances","some","_b","asset_type","getAssetType","asset_code","getCode","asset_issuer","getIssuer","GetOutstandingTokens","assetIds","assetRecord","GetAssetRecordAsync","GetDEXPriceAsync","avg","VerifyUnconditionalClaimant","claimantId","destination","predicate","uncondictional","GetSendMarketQuoteAsync","inflatedSendAmount","pathPaymentRecord","destination_amount","source_amount","forEach","push","transformer","getAssetIdFromObject","GetReceiveMarketQuoteAsync","recieveAmount","token","uuid","albedoIntent","pubkey","sign","xdr","network","signed_envelope_xdr","freighterApi","isConnected","getPublicKey","signTransaction","signedTransaction","YieldBloxContext","createContext","YbxBase","Configure","TxStatus","ybxTurretHelper","YbxTurret","YieldBloxProvider","currentGov","setCurrentGov","currentPool","setCurrentPool","poolAssets","setPoolAssets","ybxAsset","setYbxAsset","contractHash","setContractHash","veYbxRate","setVeYbxRate","allocationProposal","setAllocationProposal","xdrProposals","setXdrProposals","turrets","setTurrets","ledgerTimer","useRef","updateLedger","current","clearTimeout","loadPool","loadGov","loadTurrets","governance","newGov","data","getContractHash","getVeYBXRate","veYbxValue","loadProposals","Turrets","newTurrets","pool","newPool","yearlyYbxToBeIssued","mathHelper","newPoolAssetData","newPoolAssets","getSupportedAssets","pAsset","underlyingId","loadPoolAsset","ybxToBeIssued","timestamp","getLiabilityTokensOutstanding","lTokensOutstanding","getLiabilityTokenRate","lTokenRate","getPoolTokensOutstanding","yTokensOutstanding","getPoolTokenRate","liabilitiesOutstanding","poolOutstanding","poolBalance","getBalance","CalcUtilizationRatio","interestRate","CalcFloatInterestRate","lendRate","CalcLendInterestRate","lTokenIssuance","yTokenIssuance","poolAsset","totalLiabilities","totalUnderlying","proposalAccountIds","getAllCustomProposalIds","newProposals","proposalId","getCustomProposal","xdrProp","getVotes","votes","yes","find","v","id","no","proposal","total","quorumPct","pctOfQuorum","getCouncilProposal","ProposalType","COUNCIL_LOCK_CONTRACT","councilLock","COUNCIL_SWAP_SIGNER","councilSwap","getAllocationProposal","newAllocationProposal","allcVotes","newAllocationData","getPoolAssetDataFromUnderlying","useEffect","Provider","horizonUrl","getPoolAssetDataFromToken","tokenId","getAssetFromToken","getProtocolPriceFetcher","prices","useYieldBlox","context","useContext","getTurretFeePaymentXdr","turret","stellar","userAccount","feeTxBuilder","Networks","TESTNET","payment","toString","WalletContext","WalletProvider","showModal","setShowModal","connected","setConnected","autoConnect","setAutoConnect","tokenExpire","setTokenExpire","setWalletAddress","walletType","setWalletType","setToken","acknowledge","setAcknowledge","None","txStatus","setTxStatus","setTxHash","setXdr","errorMessage","setErrorMessage","horizonResponseData","setHorizonResponseData","Default","txText","setTxText","_walletType","freighter","albedo","disconnect","fetchToken","_token","unsignedToken","Token","Success","Fail","request","Contract","Build","contractError","runContract","contractResponse","processYbxError","signedXdr","processHorizonError","err","message","resp","response","extras","result_codes","feeXdr","feeHash","sendFeesToTurret","turretId","Submitted","Confirm","runTurretFeePayment","horizonData","defaultError","ybxError","responseError","turretRunResponse","ProposalStatus","ProtocolEventTypes","useWallet","SettingsContext","SettingsProvider","setTheme","lastFaucet","setLastFaucet","geoCheck","useSettings","PriceContext","PriceProvider","setTimestamp","setPrices","priceTimer","updatePriceTimestamp","newTimestamp","getAllPrices","Promise","resolve","priceFetcher","supportedAssets","newPrices","getProtocolPrice","priceToUsd","priceAsNum","reverseRate","usePrices","UserContext","UserProvider","currentUser","setCurrentUser","setHealthFactor","toClaim","setToClaim","escrowedYbx","setEscrowedYbx","votePower","setVotePower","activeVotes","setActiveVotes","netIR","setNetIr","totalLend","setTotalLent","forceUpdate","user","newUser","getHealthFactorForPool","newHealthFactor","borrows","positions","getBorrowedPositionsForPool","lends","getLentPositionsForPool","newToClaim","weightedLendingRate","totalValueLent","getAccruedYBX","accruedYbx","poolAssetData","positionValue","ybxIssuanceRate","netLendingRate","weightedBorrowingRate","newNetIr","newEscrowedYbx","escrowed","prev","newVotePower","getVotePower","getCurrentVotes","newActiveVotes","maxVote","max","loadUser","totalLentUSD","votingPower","useUser","TurretContext","TurretProvider","loadedFees","setLoadedFees","feeBalances","setFeeBalances","loadBalances","userToken","feePromises","t","getFeeForTurret","all","results","newFeeBalances","i","payFees","useTurret","LogoImg","LinkContainer","LinkItem","Link","DetailContainer","ArrowIcon","NavActiveIcon","ChangeWalletWrapper","ThemeButton","FaucetButton","NavItem","to","title","location","useLocation","pathname","navActiveIcon","Header","showMenu","setShowMenu","showClaim","setShowClaim","showFaucet","setShowFaucet","window","innerWidth","setWidth","walletButtonRef","handleResizeWindow","addEventListener","removeEventListener","handleClickOutside","event","contains","target","setShowChangeWallet","document","showChangeWallet","logoImg","logoImgDark","display","alignItems","faucetIcon","lightIcon","darkIcon","copy","scripteeIcon","getWalletLogo","copyIcon","arrowIcon","transform","onClaim","onFaucet","NoConnectedCard","NoConnectedDetail","DetailCard","HDiv","HealthCard","HelpIcon","GridDiv","ToolText","AccountOverview","borrow","profileView","healthFactorIs","goodHF","Grid","container","spacing","item","xs","backgroundImage","flexWrap","minWidth","Tooltip","color","arrow","questionIcon","HeroWrapper","FilterDiv","Flex","EscrowDiv","EscrowInfo","useTheme","ybxBalance","veYbx","paddingBottom","padding","marginLeft","fontWeight","marginBottom","border","ybxIcon1","TitleWrapper","SectionTitle","AssetNameWrapper","ConfirmActionModal","onConfirm","onBack","left","TooltipButton","placement","RowDetail","DepositModal","pAssetData","showConfirm","setShowConfirm","depositAmount","setDepositAmount","collateralAmount","setCollateralAmount","collateralHealthDelta","setCollateralHealthDelta","getLentPosition","poolTokenId","posUnderlyingValue","posUncollateralValue","userBalance","assetPrice","tokenYield","loanToValue","marketSize","price","tvl","handleClose","handleSetCollateral","collateralEffect","handleConfirm","processTransaction","depositBalLine","inputCollateral","adjCollateralAmount","ROUND_DOWN","collateralBalLine","depositEvent","MintEvent","POOL_ACCOUNT_1_ID","overflowX","textAlign","min","placeholder","onChange","effectiveBalance","NATIVE","borderBottom","margin","isNaN","WithdrawModal","positionCollateral","posTotalValue","setAmount","collateralYTokenDelta","setCollateralYTokenDelta","handleSetAmount","withdrawal","yAmount","withdrawalBLine","burnBalLine","burnEvent","BurnEvent","ConfirmTransactionModal","header","footer","DepositCollateral","TransactionSuccessModal","successText","checkIcon","TransactionFailModal","failText","sadSprout","wordWrap","ManageCollateralModal","lend","yBalance","yUncollatBalance","uncollatBalance","totalValue","pricePair","collateralDif","setCollateralDif","finalCBalance","symbolsArr","positionHelper","collateralXdr","signedCollatXdr","isFinite","onKeyDown","evt","includes","preventDefault","AssetContainer","BorrowModal","allowAdditional","setAllowAdditional","borrowAmount","setBorrowAmount","liabilityHealthDelta","setLiabilityHealthDelta","depositAmounts","setDepositsAmounts","depositUsdTotal","setDepositUsdTotal","depositBorrowPowerTotal","setDepositBorrowPowerTotal","depositBorrowUsdTotal","setDepositBorrowUsdTotal","collateralizablePositions","lent","filter","l","getBorrowedPosition","posUnderlying","maxBorrowUSD","handleSetBorrow","collateralizations","dAssetId","deposit","collateralData","borrowBalLine","borrowEvent","handleDepositWithCollateral","valueAssetId","ltv","usdVal","borrowUsd","borrowVal","deltaUsdTotal","deltaBorrowUsd","deltaUnderlyingUsed","usd","borrowPower","depositBorrowUsd","currentBorrowPower","handleSetBorrowUsdTotal","opacity","handleSetAllowAdditional","maxB","isValid","itemAssetCode","substring","AssetItem","uncollatUnderlying","handleChange","RepayModal","loadingPaths","setLoadingPaths","repayCollateral","setRepayCollateral","liabilityFullDisplay","setLiabilityFullDisplay","repayAmount","setRepayAmount","acceptableSlippage","setAcceptableSlippage","collatWithdrawals","setCollatWithdrawals","repaymentTotal","setRepaymentTotal","walletBalance","collateralizedPositions","handleSetRepayAmount","handleSetRepaymentTotal","maxLiabilityReduction","handleMaxRepayFromCollateral","collateralBalance","repaymentWithoutAsset","underlying","leftToRepayUnderlying","requiredCollateral","priceQuote","underlyingVal","updateRepayFromCollateral","handleRepayFromCollateral","baseAssetId","baseAssetData","deltaUnderlyingTotal","wAssetId","withdrawals","ROUND_UP","repaymentBalLine","liabilityTokenId","repayEvent","RepayEvent","handleToggleRepayType","collateralWithdrawals","onMax","oldSlippage","newSlippage","newTotalRepayment","newUnderlying","handleSetAcceptableSlippage","maxRepayAmount","lendAssetData","collatWithdrawal","handleMax","maxValue","String","Stack","ButtonWrapper","APRButton","selected","EscrowModal","status","setStatus","setType","escrowAmount","setEscrowAmount","unlockedEscrows","setUnlockedEscrows","ybxUnlocked","setYbxUnlocked","ybxUnlockedEarly","setYbxUnlockedEarly","veYbxBurnt","setVeYbxBurnt","veYbxLost","setVeYbxLost","collatEscrow","setCollatEscrow","orderedEscrows","sort","unlockTime","getTime","lockPools","multiple","lockPeriod","lockDescription","icon","escrowIcon1","escrowIcon2","escrowIcon3","handleUnlock","unlockEscrow","newUnlockedEscrows","matchIndex","findIndex","ue","balanceId","splice","newYbxUnlocked","newYbxUnlockedEarly","newVeYbxBurnt","newVeYbxLost","newLostCollateral","isEarly","isCollateral","newCollateralHealthDelta","handleSetEscrow","healthDelta","escrowEvent","unlockedEarly","unlocked","EscrowUnlockEvent","EscrowLockEvent","handleToggle","backgroundColor","paddingTop","textTransform","asCollat","handleSetCollatEscrow","setUnlocked","YBX","veYBX","escrowLocked","newUnlockEscrow","collateral","veYBXUnlocked","toLocaleDateString","paddingRight","paddingLeft","borderRadius","GridCont","ClaimModal","claimEvent","ClaimEvent","MenuModal","PropIcon","XdrDiv","Column","VoteWrapper","VoteButton","VerticalDivider","ContentWrapper","ProposalModal","proposalData","PROP_YES_ASSET","PROP_NO_ASSET","userYes","setYesVotes","userNo","setNoVotes","newVoteCount","setNewVoteCount","editing","setEditing","currentVoteYes","setCurrentVoteYes","voteYes","setVoteYes","remainingVotes","handleSetVoteYes","voteType","handleSetEditing","isEditing","newVotes","voteEvent","VoteEvent","loadVotes","getVotesForAccount","catch","proposalStatus","PropAllocIcon","LinkIcon","yesIcon","noIcon","description","xdrs","toCopy","editIcon","FaucetCircle","KeyDiv","FaucetModal","canFaucet","loading","setLoading","setResult","setSuccess","handleFaucet","axios","post","handleCopy","startsWith","overflow","maxWidth","overflowWrap","float","secret","href","AssetIcon","toLowerCase","Status","ProposalTag","body","ACCEPTED","IMPLEMENTING","IMPLEMENTED","REJECTED","VOTING","TableDiv","LendingMarket","onDeposit","onManageCollateral","sortedRows","positionCValue","positionUCValue","totalValueLocked","hasPosition","row","getRow","x","BorrowMarket","onBorrow","Market","setBorrow","showDepositModal","setShowDepositModal","showManageCollateralModal","setShowManageCollateralModal","showBorrowModal","setShowBorrowModal","setAssetData","setPosition","Row","Block","RedoImg","BorrowTile","underlyingBalance","Principal","principal","showRepayModal","setShowRepayModal","redoIcon","LendTile","showWithdrawModal","setShowWithdrawModal","showCollateralModal","setShowCollateralModal","MyPositions","lentPositions","borrowPositions","Lend","poolPositions","lastModifiedTime","Profile","GovernanceOverview","Description","p","ProposalItem","propData","setProposal","AllocationItem","allocationData","secondary","AllocationModal","isBorrow","setIsBorrow","userVotes","setUserVotes","totalVotes","setTotalVotes","loadingVotes","setLoadingVotes","ybxVotes","ybxAmount","setYbxAmount","handleVote","vote","asNumber","newUserVotes","STELLAR_ZERO","newTotalVotes","ALLOCATION","loadAllocationVotes","currentYbxVotes","currentTotalVotes","handleYbx","values","yTokenId","yTokenPercentage","yTokenAllocation","lTokenId","lTokenPercentage","lTokenAllocation","amountBorrow","setAmountBorrow","amountLend","setAmountLend","lTokenCurrentVotes","yTokenCurrentVotes","Governance","showAllocationModal","setShowAllocationModal","showProposalModal","setShowProposalModal","handleSetProposal","TurretIcon","TurretNetwork","rows","feeBalance","turretIcon","rootUrl","replace","TurretModal","availableXlm","xlmPricePair","xlmFee","info","divisor","run","processFeePayment","amountXlm","version","signerId","BalanceCard","TurretPage","selectedTurret","setSelectedTurret","showTurretModal","setShowTurretModal","xlmBalance","borderLeft","greenIIcon","Conditions","TosModal","acknowledgeLocal","setAcknowledgeLocal","close","RegionBlockModal","Banner","Main","showTosModal","setShowTosModal","textDecoration","exact","component","App","autoClose","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.403d6dcf.chunk.js","sourcesContent":["import { Asset } from 'stellar-sdk';\n\n// TESTNET\n/***** Horizon *****/\nexport const HORIZON_URL = 'https://horizon-testnet.stellar.org';\nexport const HORIZON_NETWORK = 'TESTNET';\nexport const STELLAR_NETWORK_KEY = 'Test SDF Network ; September 2015';\n\n/***** YBX Accounts *****/\nexport const POOL_ACCOUNT_ID = 'GDGHQTCJ3SGFBWBHJGVRUFBRLZGS5VS52HEDH4GVPX5GZRJQAOW7ZM37';\nexport const ISSUANCE_ACCOUNT_ID = 'GCIWMQHPST7LQ7V4LHAF2UP6ZSDCFRYYP7IM4BBAFSBZMVTR3BB4OQZ5';\nexport const DIST_ACCOUNT_ID = 'GATBAGTTQLQ4VKZMXLINLS6M4F2PEXMAZCK5ZE5ES4B6A2DXNGCFRX54';\nexport const ESCROW_ACCOUNT_ID = 'GANC25ARTWI2XFLZYFKFIDMXC3CFSNC6LBTHLHBQDMLZCRAJ4ISDCOHR';\nexport const DAO_TREASURY_ID = 'GDMZKMXXIU6HKKQLEK7RFB7CJJZJ7QJ5E6DWOSYHVYHGOGPONGSJMSY6';\nexport const CONTROLLED_ACCOUNTS: string[] = [\n\tPOOL_ACCOUNT_ID,\n\tISSUANCE_ACCOUNT_ID,\n\tDIST_ACCOUNT_ID,\n\tESCROW_ACCOUNT_ID,\n\tDAO_TREASURY_ID,\n];\n\n/***** YBX Assets *****/\nexport const YBX_TOKEN = `YBX:${ISSUANCE_ACCOUNT_ID}`;\nexport const VEYBX_TOKEN = `veYBX:${ESCROW_ACCOUNT_ID}`;\nexport const NATIVE = 'XLM:native';\nexport const DEX_USDC = 'USDC:GAEB3HSAWRVILER6T5NMX5VAPTK4PPO2BAL37HR2EOUIK567GJFEO437';\n\n// PUBNET\n// /***** Horizon *****/\n// export const HORIZON_URL = 'https://horizon.stellar.org/'\n// export const HORIZON_NETWORK = 'PUBLIC';\n// export const STELLAR_NETWORK_KEY = 'Public Global Stellar Network ; September 2015';\n","import { POOL_ACCOUNT_ID, YBX_TOKEN } from 'config/constants';\nimport { AssetConstants } from 'types';\n\n/**\n * Pool Data Helper\n * Helper functions to work with Account Data Fields of the Pool Account in Stellar\n */\n\n/*****************\n * Pool Data Keys *\n *****************/\n\nconst issuerKeyTemplate = (issuerKey: string, overlapKey: string, underlyingKey: string) =>\n\t`${issuerKey}_${overlapKey}_${underlyingKey}_Issuer`;\n\nconst assetInfoKeyTemplate = (issuerKey: string, overlapKey: string, underlyingKey: string) =>\n\t`${issuerKey}_${overlapKey}_${underlyingKey}_Data`;\n\n/********************\n * Pool Data Getters *\n ********************/\n\n/**\n * Get the underlying asset issuer from a encoded pool token asset code\n * @param data - Pool account data\n * @param poolAssetCode - The Pool Asset code\n * @returns The underlying asset issuer\n */\nexport function GetAssetIssuer(data: Record, poolAssetCode: string): string {\n\tlet key = issuerKeyTemplate(poolAssetCode.charAt(1), poolAssetCode.charAt(2), poolAssetCode.slice(3));\n\treturn validateAndDecode(data[key]);\n}\n\n/**\n * Get the contract hash from the pool\n * @param data - pool account data\n * @returns The current contract hash\n */\nexport function GetContractHash(data: Record): string {\n\treturn validateAndDecode(data['YieldBlox_Contract_Hash']);\n}\n\n/******************\n * General Helpers *\n ******************/\n\n/**\n * Get the relevant data for supported assets\n * @param data - The pool account data to find the supported assets of\n * @returns - An array of AssetData\n */\nexport function GetSupportedAssets(data: Record): AssetConstants[] {\n\tconst regexAssetKey = /^\\w\\w[a-zA-Z0-9]{1,9}_Underlying$/;\n\n\tlet supportedAssetKeys: string[] = [];\n\tfor (let key in data) {\n\t\tif (regexAssetKey.test(key)) {\n\t\t\tlet trimmedKey = key.slice(0, -11);\n\t\t\tsupportedAssetKeys.push(trimmedKey);\n\t\t}\n\t}\n\n\tlet supportedAssets: AssetConstants[] = [];\n\tfor (let key of supportedAssetKeys) {\n\t\tlet underlyingDataValue = validateAndDecode(data[`${key}_Underlying`]);\n\t\tlet assetDataValue = validateAndDecode(data[`${key}_Data`]);\n\t\tif (underlyingDataValue === undefined || assetDataValue === undefined) {\n\t\t\tthrow new Error('Broken key while fetching current assets');\n\t\t}\n\t\tlet assetData = buildAssetData(assetDataValue, underlyingDataValue, key);\n\n\t\t// fetch other asset constants\n\t\tassetData.trackingAccountId = validateAndDecode(data[`${key}_Utilization_Tracker`]);\n\t\tsupportedAssets.push(assetData);\n\t}\n\n\treturn supportedAssets;\n}\n\nexport function GetYbxConstantsData(data: Record): AssetConstants {\n\tlet ybxDataValue = validateAndDecode(data[`YBX_Data`]);\n\tif (ybxDataValue === undefined) {\n\t\tthrow new Error('Broken key while fetching current assets');\n\t}\n\tlet ybxData = buildData(ybxDataValue, YBX_TOKEN, 'YBX');\n\treturn ybxData;\n}\n\n/******************\n * Private Helpers *\n ******************/\n\nfunction validateAndDecode(encodedData: string): string {\n\tif (encodedData === undefined) {\n\t\t//@ts-ignore\n\t\treturn undefined;\n\t}\n\treturn Buffer.from(encodedData, 'base64').toString();\n}\n\nfunction buildAssetData(assetDataValue: string, underlyingDataValue: string, key: string): AssetConstants {\n\tlet assetUnderlyingEntries = underlyingDataValue.split('_');\n\t/*\n underlyingEntries:\n issuer_last3OfAssetCode\n\n NOTE: last3OfAssetCode is only entered if the asset code is longer than 9 chars\n */\n\tlet assetCode = key.slice(2) + assetUnderlyingEntries[1];\n\tlet issuer = assetUnderlyingEntries[0];\n\tlet assetId = `${assetCode}:${issuer}`;\n\treturn buildData(assetDataValue, assetId, key);\n}\n\nfunction buildData(assetDataValue: string, assetId: string, key: string): AssetConstants {\n\tlet assetDataEntries = assetDataValue.split('_');\n\tassetDataEntries.shift(); // remove leading underscore\n\t/*\n _: empty, underscore to avoid precursor problem\n assetId: string;\n\tassetKey: string;\n\tbaseRateConstant: number; // 2 digit, divide by 100\n\tslope0: number; // 3 digits, div 10\n\tslope1: number; // 3 digits, div 10\n\tslope2: number; // 3 digits, div 10\n\tslope3: number; // 3 digits, div 10\n\trateThreshold1: number; // 2 digit, divide by 100\n\trateThreshold2: number; // 2 digit, divide by 100\n\trateThreshold3: number; // 2 digit, divide by 100\n\tliquidationFactor: number; // 2 digit, divide by 100\n\tliquidationIncentive: number; // 2 digit, divide by 100\n\tlendingAllocation: number; // 2 digit, divide by 100\n\tborrowingAllocation: number; // 2 digit, divide by 100\n\tybxFeeAllocation: number; // 2 digit, divide by 100\n */\n\treturn {\n\t\tassetId: assetId,\n\t\tassetKey: key, // set above\n\t\ttrackingAccountId: '', //set later\n\t\tbaseRateConstant: parseFloat(assetDataEntries[0]) / 100,\n\t\tslope0: parseFloat(assetDataEntries[1]) / 10,\n\t\tslope1: parseFloat(assetDataEntries[2]) / 10,\n\t\tslope2: parseFloat(assetDataEntries[3]) / 10,\n\t\tslope3: parseFloat(assetDataEntries[4]) / 10,\n\t\trateThreshold1: parseFloat(assetDataEntries[5]) / 100,\n\t\trateThreshold2: parseFloat(assetDataEntries[6]) / 100,\n\t\trateThreshold3: parseFloat(assetDataEntries[7]) / 100,\n\t\tliquidationFactor: parseFloat(assetDataEntries[8]) / 100,\n\t\tliquidationIncentive: parseFloat(assetDataEntries[9]) / 100,\n\t\tlendingAllocation: parseFloat(assetDataEntries[10]) / 100,\n\t\tborrowingAllocation: parseFloat(assetDataEntries[11]) / 100,\n\t\tybxFeeAllocation: parseFloat(assetDataEntries[12]) / 100,\n\t};\n}\n","import BigNumber from 'bignumber.js';\nimport {\n PoolAsset,\n XdrProposal,\n BalanceLine,\n AllocationProposal\n} from 'yieldblox-js';\n\nexport interface SortableRow {\n\trow: JSX.Element;\n\ttotalValueLocked: number;\n\thasPosition: boolean;\n}\n\nexport interface ScripteeTransaction {\n\txdr: string;\n\tsigned_xdr?: string;\n\toperationUid: string;\n\tpublicKey: string;\n}\n\nexport interface ShippingInformation {\n\tsize: string;\n\tcountry: string;\n\tname: string;\n\taddressLn1: string;\n\taddressLn2?: string;\n\tcity: string;\n\tstateProvinceRegion: string;\n\tzipCode: string;\n\tphoneNumber: string;\n}\n\nexport enum WalletType {\n\tFreighter = 'Freighter',\n\tAlbedo = 'Albedo',\n}\n\n// Market Types\nexport interface LendAssetData {\n\tassetId: string;\n\tinterestRate: number;\n\ttokenYield: number;\n\tmaxDeposit: Maybe;\n\tcurrentDeposit: Maybe;\n\tcollateral: Maybe;\n}\n\nexport interface PoolAssetData {\n\tpoolAsset: PoolAsset;\n\tborrowRate: number;\n\tlendRate: number;\n\tutilRate: number;\n\ttotalLiabilities: number;\n\ttotalUnderlying: number;\n\tpoolBalance: number;\n\tyTokenIssuance: number;\n\tlTokenIssuance: number;\n\tyTokenRate: number;\n\tlTokenRate: number;\n}\n\nexport interface XdrProposalData {\n\tproposal: XdrProposal;\n\tyes: number;\n\tno: number;\n\ttotal: number;\n\tquorumPct: number;\n}\n\nexport interface AllocationProposalData {\n\tproposal: AllocationProposal;\n\tvotes: BalanceLine[];\n\ttotal: number;\n}\n\nexport interface AssetConstants {\n\tassetId: string;\n\tassetKey: string;\n\ttrackingAccountId: string;\n\tbaseRateConstant: number; // 2 digit, divide by 100\n\tslope0: number; // 3 digits, div 10\n\tslope1: number; // 3 digits, div 10\n\tslope2: number; // 3 digits, div 10\n\tslope3: number; // 3 digits, div 10\n\trateThreshold1: number; // 2 digit, divide by 100\n\trateThreshold2: number; // 2 digit, divide by 100\n\trateThreshold3: number; // 2 digit, divide by 100\n\tliquidationFactor: number; // 2 digit, divide by 100\n\tliquidationIncentive: number; // 2 digit, divide by 100\n\tlendingAllocation: number; // 2 digit, divide by 100\n\tborrowingAllocation: number; // 2 digit, divide by 100\n\tybxFeeAllocation: number; // 2 digit, divide by 100\n}\n\n// Profile Types\nexport enum PositionType {\n\tBorrow = 'borrow',\n\tLend = 'lend',\n}\n\nexport enum InterestType {\n\tFixed = 'FIXED',\n\tFloat = 'VARIABLE',\n}\n\n// NOTE - All balances are represented by the underlying\nexport interface Position {\n\tbalanceId: string;\n\tassetId: string;\n\tprotocolAssetId: string;\n\ttype: PositionType;\n\tinterestType: InterestType;\n\tinterestSpotRate: number;\n\tbalance: number;\n\tcollateralBalance: number;\n\thealthEffect: number;\n\tlastModifiedTime: Date;\n}\n\nexport interface Escrow {\n\tbalanceId: string;\n\tlockedYbx: boolean;\n\tbalance: number;\n\tunlockTimestamp: number;\n}\n\nexport interface UnlockResult {\n\tybxReturned: number;\n\tfeesEarned: number;\n\tunlockedEarly: boolean;\n\tybxReturnedEarly?: number;\n}\n\nexport interface UnlockEscrow {\n\tbalanceId: string;\n\tamount: string;\n\tveYbx: number;\n\tisCollateral: boolean;\n\tisEarly: boolean;\n}\n\nexport interface CollateralDeposit {\n\tbase: number;\n\tusd: number;\n\tborrowPower: number;\n\tborrowUsd: number;\n}\n\nexport interface CollateralRepayment {\n\tbase: number;\n\tusd: number;\n\tunderlying: number;\n\tpath: string[];\n}\n\nexport enum TxText {\n\tDefault,\n\tDepositCollateral,\n\tContract,\n\tToken,\n}\n\nexport enum TxType {\n\tBurn,\n\tClaim,\n\tGovManageProposal,\n\tGovCustomProposal,\n\tGovSwapProposal,\n\tGovLockProposal,\n\tGovAllocationProposal,\n\tLiquidate,\n\tMint,\n\tRate,\n\tRepay,\n\tEscrow,\n\tVote,\n}\n","import styled, { createGlobalStyle, DefaultTheme, css } from 'styled-components';\nimport { Colors } from './styled';\n\nconst MEDIA_WIDTHS = {\n\tupToExtraSmall: 500,\n\tupToSmall: 720,\n\tupToMedium: 960,\n\tupToLarge: 1280,\n\tupToExtraLarge: 1400,\n};\n\nconst mediaWidthTemplates: {\n\t[width in keyof typeof MEDIA_WIDTHS]: typeof css;\n} = Object.keys(MEDIA_WIDTHS).reduce((accumulator, size) => {\n\t(accumulator as any)[size] = (a: any, b: any, c: any) => css`\n\t\t@media (max-width: ${(MEDIA_WIDTHS as any)[size]}px) {\n\t\t\t${css(a, b, c)}\n\t\t}\n\t`;\n\treturn accumulator;\n}, {}) as any;\n\nexport const LIGHT_COLORS: Colors = {\n\twhite: '#FFFFFF',\n\tblack: '#051B35',\n\tgreen: '#37B24A',\n\tgreen1: '#37B24A26',\n\tpurple: '#6D6FFF',\n\tred: '#FE4040',\n\tred1: '#FE404040',\n\tlight_grey: '#F1F1F1',\n\tlight_grey1: '#F0F0F0',\n\tlight_grey2: '#E3E3E3',\n\tlight_grey3: '#DEDEDE',\n\tgrey1: '#949494',\n\tgrey2: '#8A959C',\n\tyellow: '#FFCB00',\n\tyellow1: '#FFCB0026',\n\tshadow: '#00000003',\n\tblue: '#4472FF',\n\tpink: '#A56DFF',\n};\n\nexport const DARK_COLORS: Colors = {\n\twhite: '#2C2F36',\n\tblack: '#FFFFFF',\n\tgreen: '#37B24A',\n\tgreen1: '#37B24A26',\n\tpurple: '#8983FF',\n\tred: '#FE4040',\n\tred1: '#FE404040',\n\tlight_grey: '#191B1F',\n\tlight_grey1: '#565A68',\n\tlight_grey2: '#E3E3E3',\n\tlight_grey3: '#DEDEDE',\n\tgrey1: '#949494',\n\tgrey2: '#8A959C',\n\tyellow: '#FFCB00',\n\tyellow1: '#FFCB0026',\n\tshadow: '#00000003',\n\tblue: '#4472FF',\n\tpink: '#A56DFF',\n};\n\nexport const defaultTheme: DefaultTheme = {\n\tcolors: DARK_COLORS,\n\n\tgrids: {\n\t\tsm: 8,\n\t\tmd: 12,\n\t\tlg: 24,\n\t},\n\n\t//shadows\n\tshadow1: '#2F80ED',\n\n\t// media queries\n\tmediaWidth: mediaWidthTemplates,\n\n\t// css snippets\n\tflexColumnNoWrap: css`\n\t\tdisplay: flex;\n\t\tflex-flow: column nowrap;\n\t`,\n\tflexRowNoWrap: css`\n\t\tdisplay: flex;\n\t\tflex-flow: row nowrap;\n\t`,\n};\n\nexport const darkTheme: DefaultTheme = {\n\t...defaultTheme,\n\tcolors: DARK_COLORS,\n};\n\nexport const lightTheme: DefaultTheme = {\n\t...defaultTheme,\n\tcolors: LIGHT_COLORS,\n};\n\nexport const ThemedGlobalStyle = createGlobalStyle`\n html {\n }\n\n body {\n margin: 0;\n padding: 0;\n font-family: 'DM Sans', sans-serif;\n\t\tfont-size: 16px;\n\t\tline-height: 21px;\n\t\tcolor: ${({ theme }) => theme.colors.black};\n\t\ttransition: all 0.5s linear;\n }\n\n\th1 {\n\t\tfont-size: 80px;\n\t}\n\n\th2 {\n\t\tfont-size: 64px;\n\t}\n\n\th3 {\n\t\tfont-size: 48px;\n\t}\n\n\th4 {\n\t\tfont-size: 40px;\n\t}\n\n\th5 {\n\t\tfont-size: 30px;\n font-weight: 500;\n\t}\n\n\th6 {\n\t\tfont-size: 22px;\n\t\tmargin: 0;\n\t\tline-height: 29px;\n\t\tfont-weight: 500;\n\t}\n\n\th1, h2, h3, h4, h5, p, span {\n\t\tline-height: 120%;\n\t\tmargin: 0;\n\t}\n\n select, button {\n font-family: 'DM Sans', sans-serif;\n outline: none;\n cursor: pointer;\n }\n\t\n\tinput::-webkit-outer-spin-button,\n\tinput::-webkit-inner-spin-button {\n\t\t-webkit-appearance: none;\n\t\tmargin: 0;\n\t}\n\t\n\tinput[type=number] {\n\t\t-moz-appearance: textfield;\n\t}\n\n select::-ms-expand {\n display: none;\n }\n\n select {\n -webkit-appearance: none;\n -moz-appearance: none;\n text-indent: 1px;\n text-overflow: '';\n }\n\n * {\n box-sizing: border-box;\n }\n`;\n\nexport const GreenText = styled.span`\n\tcolor: ${({ theme }) => theme.colors.green};\n`;\n\nexport const PurpleText = styled.span`\n\tcolor: ${({ theme }) => theme.colors.purple};\n`;\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledButton = styled.button<{\n\tvariant?: 'primary' | 'secondary';\n\tdisable?: boolean;\n}>`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 40px;\n\tcolor: ${({ theme, variant }) =>\n\t\tvariant === 'primary' ? theme.colors.white : variant === 'secondary' ? theme.colors.green : theme.colors.black};\n\tbackground: ${({ theme, variant }) =>\n\t\tvariant === 'primary'\n\t\t\t? theme.colors.green\n\t\t\t: variant === 'secondary'\n\t\t\t? theme.colors.green1\n\t\t\t: theme.colors.light_grey2};\n\tpadding: 0.5rem 2rem;\n\tfont-size: 16px;\n\tline-height: 21px;\n\tfont-weight: 500;\n\tborder: none;\n\toutline: none;\n\n\t&:hover {\n\t\topacity: 0.85;\n\t}\n\n\t${({ disable }) =>\n\t\tdisable &&\n\t\t`\n\t\topacity: 0.15 !important;\n\t\tcursor: not-allowed;\n\t`}\n\n\t&:focus {\n\t\tbox-shadow: 0 0 0 2px ${({ theme }) => theme.colors.blue};\n\t}\n`;\n\nexport interface IButtonProps extends React.ButtonHTMLAttributes {\n\tvariant?: 'primary' | 'secondary'; // primary as default\n}\n\nexport const Button: React.FC = ({ children, disabled, onClick, ...props }) => {\n\treturn (\n\t\t onClick && !disabled && onClick(e)} {...props}>\n\t\t\t{children}\n\t\t\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledCard = styled.div`\n\tposition: relative;\n\tbackground: ${({ theme }) => theme.colors.white};\n\tbox-shadow: 0 7px 13px ${({ theme }) => theme.colors.shadow};\n\tborder-radius: 18px;\n\tpadding: 20px;\n\tbox-sizing: border-box;\n`;\n\nexport const Card: React.FC> = ({ children, ...props }) => {\n\treturn {children};\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Button } from '../Button';\n\nconst InputWrapper = styled.div<{ background?: string }>`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tborder-radius: 40px;\n\tbackground: ${({ theme, background }) => (background ? background : theme.colors.light_grey1)};\n`;\n\nconst StyledInput = styled.input<{ error?: boolean }>`\n\tpadding: 6px 16px;\n\tfont-size: 16px;\n\tline-height: 21px;\n\tmax-width: 100%;\n\tcolor: ${({ theme }) => theme.colors.black};\n\tbackground: transparent;\n\toutline: none;\n\tborder: none;\n\n\t&:placeholder {\n\t\tcolor: ${({ theme }) => theme.colors.light_grey};\n\t}\n`;\n\ninterface IProps extends React.InputHTMLAttributes {\n\terror?: boolean;\n\tbuttonText?: string;\n\tonButtonClick?: () => void;\n\tbackground?: string;\n}\n\nexport const Input: React.ForwardRefExoticComponent = React.forwardRef(\n\t({ children, error, buttonText, background, onButtonClick, ...props }, ref: React.LegacyRef) => {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{children}\n\t\t\t\t\n\n\t\t\t\t{buttonText && (\n\t\t\t\t\t onButtonClick && onButtonClick()}\n\t\t\t\t\t>\n\t\t\t\t\t\t{buttonText}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t);\n\t}\n);\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Card } from '../Card';\n\nconst Container = styled.div<{ open: boolean }>`\n\tposition: fixed;\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: ${({ open }) => (open ? 'flex' : 'none')};\n\tjustify-content: center;\n\talign-items: center;\n\tbackground: rgba(0, 0, 0, 0.5);\n\tz-index: 10;\n\toverflow-y: auto;\n\tflex-wrap: wrap;\n`;\n\nconst ContentCard = styled(Card)<{ width?: number; height?: number }>`\n\tpadding: 0;\n\tmin-width: 330px;\n\t${({ width }) => (width ? `width: ${width}px;` : '')}\n\t${({ height }) => (height ? `height: ${height}px;` : '')}\n`;\n\nexport const ModalHeader = styled.div`\n\tfont-size: 22px;\n\tline-height: 29px;\n\tfont-weight: 500;\n\tpadding: 14px 40px;\n\tborder-bottom: 2px solid ${({ theme }) => theme.colors.light_grey3};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\nexport const ModalFooter = styled.div`\n\tpadding: 14px 40px;\n\tborder-top: 2px solid ${({ theme }) => theme.colors.light_grey3};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-evenly;\n\tright: 0;\n`;\n\nexport interface IModalProps extends React.HTMLAttributes {\n\topen: boolean;\n\tonClose?: () => void;\n\twidth?: number;\n\theight?: number;\n}\n\nexport const Modal: React.FC = ({ open, onClose, width, height, children }) => {\n\treturn (\n\t\t onClose && onClose()} open={open}>\n\t\t\t e.stopPropagation()} width={width} height={height}>\n\t\t\t\t{children}\n\t\t\t\n\t\t\n\t);\n};\n\nexport const TopRightModal: React.FC = ({ open, onClose, width, height, children }) => {\n\treturn (\n\t\t onClose && onClose()} open={open} style={{alignContent: 'flex-start', justifyContent: 'flex-end'}}>\n\t\t\t e.stopPropagation()} width={width} height={height} style={{marginTop: '4.5rem', marginRight: '0.5rem'}}>\n\t\t\t\t{children}\n\t\t\t\n\t\t\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/icn_arrow_down.f550b1e4.svg\";","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledDivider = styled.hr`\n\tmargin: 2rem;\n`;\n\nexport const Divider = () => {\n\treturn ;\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport ArrowImg from 'assets/images/icn_arrow_down.svg';\n\nconst Container = styled.div`\n\tposition: relative;\n\tborder-radius: 40px;\n`;\n\nconst StyledSelect = styled.select`\n\tpadding: 8px 40px 8px 24px;\n\twidth: 100%;\n\tbox-sizing: border-box;\n\tfont-size: 20px;\n\tline-height: 26px;\n\tcolor: ${({ theme }) => theme.colors.black};\n\tborder: none;\n\tborder-radius: 40px;\n`;\n\nconst ArrowIcon = styled.img`\n\tposition: absolute;\n\ttop: calc(50% - 7px);\n\theight: 14px;\n\tright: 10px;\n\tcursor: pointer;\n`;\n\ninterface IProps extends React.SelectHTMLAttributes {\n\toptions: Array;\n}\n\nexport const Select: React.FC = ({ options, className, ...props }) => {\n\treturn (\n\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t{options.map((value, idx) => (\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t\t\n\t\t\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledTable = styled.table`\n\tposition: relative;\n\twidth: 100%;\n\toverflow-x: scroll;\n\tborder-radius: 18px;\n\tbackground: ${({ theme }) => theme.colors.white};\n\tfont-size: 16px;\n\tline-height: 21px;\n\tborder-spacing: 0;\n\n\tthead {\n\t\ttr {\n\t\t\theight: 70px;\n\n\t\t\tth {\n\t\t\t\ttext-align: center;\n\t\t\t\tpadding: 0 1rem;\n\t\t\t\tborder-bottom: 2px solid ${({ theme }) => theme.colors.light_grey1};\n\t\t\t}\n\t\t}\n\t}\n\n\ttbody {\n\t\ttr {\n\t\t\theight: 60px;\n\n\t\t\ttd {\n\t\t\t\ttext-align: center;\n\t\t\t\tpadding: 0 1rem;\n\t\t\t\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey1};\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground: rgba(54, 176, 74, 0.1);\n\t\t\t}\n\n\t\t\t&:last-child {\n\t\t\t\ttd {\n\t\t\t\t\tborder-bottom: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n`;\n\nexport const Table: React.FC> = ({ children, ...props }) => {\n\treturn {children};\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst StyledToggle = styled.div`\n\tposition: relative;\n\twidth: 150px;\n\theight: 34px;\n\tborder-radius: 17px;\n\tbackground: linear-gradient(\n\t\t90deg,\n\t\t${({ theme }) => theme.colors.white} 0%,\n\t\t${({ theme }) => theme.colors.green1} 50%,\n\t\t${({ theme }) => theme.colors.white} 100%\n\t);\n\tbox-sizing: border-box;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0;\n`;\n\nconst ToggleValue = styled.button<{ active: boolean }>`\n\theight: 100%;\n\tborder-radius: 17px;\n\tcolor: ${({ theme, active }) => (active ? theme.colors.white : theme.colors.black)};\n\tbackground: ${({ theme, active }) => (active ? theme.colors.green : 'transparent')};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: 16px;\n\tline-height: 21px;\n\tfont-weight: 500;\n\tborder: none;\n\toutline: none;\n`;\n\ninterface IProps extends React.HTMLAttributes {\n\tvalue: number;\n\ttexts: string[];\n\tonUpdate?: (newValue: number) => void;\n}\n\nexport const Toggle: React.FC = ({ value, texts, onUpdate, ...props }) => {\n\tconst handleUpdate = (idx: number) => {\n\t\tif (onUpdate) {\n\t\t\tif (texts.length === 2 && value === idx) {\n\t\t\t\tonUpdate(1 - idx);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonUpdate(idx);\n\t\t}\n\t};\n\n\treturn (\n\t\t\n\t\t\t{texts.map((text, idx) => (\n\t\t\t\t handleUpdate(idx)}\n\t\t\t\t\tstyle={{ width: `${100 / texts.length}%` }}\n\t\t\t\t\tkey={idx}\n\t\t\t\t>\n\t\t\t\t\t{text}\n\t\t\t\t\n\t\t\t))}\n\t\t\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/icn_ybx.be0b0e39.svg\";","export default __webpack_public_path__ + \"static/media/loading_spinner.c8e6d403.gif\";","/**\n * Util functions to help the UI display information\n */\n\nimport BigNumber from 'bignumber.js';\nimport { PricePair } from 'contexts/price';\nimport { Position } from 'types';\nimport { parse } from 'uuid';\nimport { Lend } from 'yieldblox-js';\n\n/**\n * Returns a consistent, shorten wallet address\n * @param address\n * @returns\n */\nexport const getShortenWalletAddress = (address: Maybe): string => {\n\tif (!address) {\n\t\treturn '';\n\t}\n\n\treturn `${address.substr(0, 4)}...${address.substr(address.length - 4, address.length)}`;\n};\n\nexport const getAdjDisplayBalance = (balance: Maybe, rate: Maybe): string => {\n\tif (!balance) {\n\t\treturn '--';\n\t}\n\n\tlet exchangeRate: number;\n\tif (!rate) {\n\t\tconsole.log('Rate undefined');\n\t\texchangeRate = 1;\n\t} else {\n\t\texchangeRate = rate;\n\t}\n\n\treturn `${getFormattedNumber(exchangeRate * balance)}`;\n};\n\nexport const getAdjBalance = (balance: Maybe, rate: Maybe): number => {\n\tif (!balance) {\n\t\treturn 0;\n\t}\n\n\tlet exchangeRate: number;\n\tif (!rate) {\n\t\tconsole.log('Rate undefined');\n\t\texchangeRate = 1;\n\t} else {\n\t\texchangeRate = rate;\n\t}\n\n\treturn exchangeRate * balance;\n};\n\nexport const getDisplayBalance = (balance: Maybe, assetCode: string, fullDisplay: boolean = false): string => {\n\tif (balance == undefined) {\n\t\treturn '--';\n\t} else if (balance === 0) {\n\t\treturn `0 ${assetCode}`;\n\t}\n\n\tif (fullDisplay) {\n\t\treturn `${balance.toFixed(7)} ${assetCode}`;\n\t} else {\n\t\treturn `${getFormattedNumber(balance)} ${assetCode}`;\n\t}\n};\n\nexport const getDisplayRate = (rate: Maybe): string => {\n\tif (!rate || Math.abs(rate) === Infinity) {\n\t\treturn '0';\n\t}\n\n\treturn `${(rate * 100).toFixed(2)}`;\n};\n\nexport const getCollateralRate = (position: Maybe): string => {\n\tif (!position) {\n\t\treturn '0';\n\t}\n\n\tconst posCBalance = parseFloat(position.balance);\n\tconst posUCBalance = parseFloat(position.uncollateralizedBalance);\n\tconst posTotalBalance = posCBalance + posUCBalance;\n\tif (posCBalance === 0) {\n\t\treturn '0';\n\t}\n\n\treturn ((posCBalance / posTotalBalance) * 100).toFixed(1);\n};\n\nexport const getFormattedNumber = (value: number, loop: boolean = true): string => {\n\tif (loop) {\n\t\tif (value >= 1e9) {\n\t\t\treturn `${getFormattedNumber(value * 1e-9, false)}b`;\n\t\t}\n\t\tif (value >= 1e6) {\n\t\t\treturn `${getFormattedNumber(value * 1e-6, false)}M`;\n\t\t}\n\t\tif (value >= 1e3) {\n\t\t\treturn `${getFormattedNumber(value * 1e-3, false)}k`;\n\t\t}\n\t\tif (value >= 1e-6) {\n\t\t\tif (value < 1e-4) {\n\t\t\t\treturn `${getFormattedNumber(value * 1e6, false)}μ`;\n\t\t\t}\n\t\t\tif (value < 1e-1) {\n\t\t\t\treturn `${getFormattedNumber(value * 1e3, false)}m`;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst res = value.toFixed(2);\n\tlet parts = res.split('.');\n\tparts[0] = Number(parts[0]).toLocaleString('en-US');\n\n\treturn parts.join('.');\n};\n\nexport const getDisplayHealthFactor = (value: Maybe): string => {\n\tif (value !== undefined && value !== Number.MAX_SAFE_INTEGER) {\n\t\tif (value > 1000) {\n\t\t\treturn 'Good';\n\t\t}\n\t\treturn value.toFixed(3);\n\t}\n\treturn 'N/A';\n};\n\nexport const getTimeDifference = (time: Maybe) => {\n\tif (time == undefined) {\n\t\treturn 'none';\n\t}\n\tconst diff = Math.abs(time - Date.now());\n\n\tconst secs = diff / 1000;\n\tif (secs < 60) {\n\t\treturn `${Math.floor(secs)} secs`;\n\t}\n\tconst mins = secs / 60;\n\tif (mins < 60) {\n\t\treturn `${Math.floor(mins)} mins`;\n\t}\n\tconst hours = mins / 60;\n\tif (hours < 24) {\n\t\treturn `${Math.floor(hours)} hours`;\n\t}\n\tconst days = hours / 24;\n\treturn `${Math.floor(days)} days`;\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { IModalProps, Modal } from 'components';\nimport { GreenText } from 'theme';\nimport { WalletType } from 'types';\n\nimport scripteeIcon from 'assets/images/icn_scriptee.svg';\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport loadingSpinner from 'assets/images/loading_spinner.gif';\nimport { useWallet } from 'contexts';\nimport { getShortenWalletAddress } from 'utils';\nimport albedoIcon from 'assets/images/wallet_albedo.svg';\nimport freighterIcon from 'assets/images/wallet_freighter.svg';\n\nconst Content = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\tpadding: 48px;\n`;\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 10px 0;\n`;\n\nconst DetailWrapper = styled.div`\n\theight: 34px;\n\tborder-radius: 17px;\n\tmargin-left: 16px;\n\tpadding: 2px;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\n\timg {\n\t\twidth: 30px;\n\t}\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n`;\n\nconst IconWrapper = styled.div`\n\twidth: 100px;\n\theight: 100px;\n\tborder-radius: 50%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n`;\n\ninterface IProps extends IModalProps {\n\twallet: string;\n}\n\nexport const BuildingTransactionModal: React.FC = ({ open, onClose, wallet }) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tBuilding your transaction...\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tWallet Name\n\t\t\t\t\t\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t

{getShortenWalletAddress(wallet)}

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/wallet_albedo.17c071b2.svg\";","export default __webpack_public_path__ + \"static/media/wallet_freighter.c4ac078f.svg\";","import React from 'react';\nimport styled from 'styled-components';\nimport { IModalProps, Modal } from 'components';\nimport { WalletType } from 'types';\nimport { toast } from 'react-toastify';\n\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport albedoIcon from 'assets/images/wallet_albedo.svg';\nimport freighterIcon from 'assets/images/wallet_freighter.svg';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 20px;\n\tborder-bottom: 2px solid ${({ theme }) => theme.colors.light_grey3};\n\tborder-top: 2px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst WalletButton = styled.button`\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 20px;\n\tborder: none;\n\toutline: none;\n\tbackground: ${({ theme }) => theme.colors.white};\n\tborder-top: 1px solid ${({ theme }) => theme.colors.light_grey3};\n\tcursor: pointer;\n\tcolor: ${({ theme }) => theme.colors.black};\n\n\t&:hover {\n\t\tbackground: ${({ theme }) => theme.colors.light_grey};\n\t}\n\n\t&:first-child {\n\t\tborder-top: none;\n\t}\n`;\n\nconst LogoIconWrapper = styled.div`\n\twidth: 80px;\n\theight: 80px;\n\tborder-radius: 50%;\n\tbackground: ${({ theme }) => theme.colors.green1};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\twidth: 100%;\n\t}\n`;\n\nconst Title = styled.div`\n\tfont-size: 26px;\n\tfont-weight: 500;\n\tline-height: 34px;\n\ttext-align: center;\n\tmargin-top: 10px;\n\tcolor: ${({ theme }) => theme.colors.black};\n`;\n\nconst WalletIcon = styled.img`\n\theight: 40px;\n\tmargin-right: 10px;\n`;\n\nconst QRIcon = styled.img`\n\theight: 80px;\n\tmargin-right: 20px;\n`;\n\ninterface IProps extends IModalProps {\n\tconnect: (_walletType: WalletType) => void;\n}\n\nexport const WalletConnectModal: React.FC = ({ open, onClose, connect }) => {\n\tconst handleWalletClick = async (type: WalletType) => {\n\t\ttry {\n\t\t\tawait connect(type);\n\t\t\tif (onClose) {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t\ttoast.success(`Wallet connected!`);\n\t\t} catch (e: any) {\n\t\t\ttoast.error(`Unable to connect to wallet.`);\n\t\t}\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n\n\t\t\t\tConnect your wallet\n\t\t\t\n\n\t\t\t
\n\t\t\t\t toast.warning('This wallet is current not supported.')\n\t\t\t\t\t\tasync () => await handleWalletClick(WalletType.Albedo)\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\t
Albedo
\n\t\t\t\t\n\n\t\t\t\t await handleWalletClick(WalletType.Freighter)}\n\t\t\t\tstyle={{borderBottomLeftRadius: 20, borderBottomRightRadius: 20}}\n\t\t\t\t>\n\t\t\t\t\t\n\t\t\t\t\t
Freighter
\n\t\t\t\t
\n\n\t\t\t
\n\t\t
\n\t);\n};\n","import { useState, useCallback } from 'react';\n\nexport const useLocalStorageState = (key: string, defaultState?: string) => {\n\tconst [state, setState] = useState(() => {\n\t\tconst storedState = localStorage.getItem(key);\n\t\tif (storedState) {\n\t\t\treturn JSON.parse(storedState);\n\t\t}\n\t\treturn defaultState;\n\t});\n\n\tconst setLocalStorageState = useCallback(\n\t\tnewState => {\n\t\t\tconst changed = state !== newState;\n\t\t\tif (!changed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetState(newState);\n\t\t\tif (newState === undefined) {\n\t\t\t\tlocalStorage.removeItem(key);\n\t\t\t} else {\n\t\t\t\tlocalStorage.setItem(key, JSON.stringify(newState));\n\t\t\t}\n\t\t},\n\t\t[state, key]\n\t);\n\n\treturn [state, setLocalStorageState];\n};\n","import BigNumber from 'bignumber.js';\nimport { AssetRecord } from 'stellar-sdk/lib/types/assets';\nimport { AssetConstants } from 'types';\nimport { HealthFactor, safeMath, STELLAR_MIN } from 'yieldblox-js';\n\nexport function stellarMinTruncate(n: number): string {\n let stellarMin: number = parseFloat(STELLAR_MIN);\n let minMultiple: number = 1 / stellarMin;\n let stellarValue: number = (\n Math.round(minMultiple * n) *\n stellarMin\n );\n return stellarValue.toFixed(\n Math.abs(Math.log10(stellarMin))\n );\n}\n\n//========== Rate Math ==========\n\nexport function CalculateLendYbxTokenEffect(\n\toutstandingYbx: number,\n\tpoolTokenRecord: AssetRecord,\n\tyTokenRate: number,\n\tassetConsts: AssetConstants\n): number {\n\tlet issuanceForYear = CalculateYbxIssuanceForYear(outstandingYbx);\n\tlet dailyIssuanceLend = issuanceForYear * assetConsts.lendingAllocation;\n\tlet marketUnderlying = parseFloat(poolTokenRecord.claimable_balances_amount) * yTokenRate;\n\treturn dailyIssuanceLend / marketUnderlying;\n}\n\nexport function CalculateBorrowYbxTokenEffect(\n\toutstandingYbx: number,\n\toutstandingLiabilities: number,\n\tassetConsts: AssetConstants\n): number {\n\tlet issuanceForYear = CalculateYbxIssuanceForYear(outstandingYbx);\n\tlet yearlyIssuanceBorrow = issuanceForYear * assetConsts.borrowingAllocation;\n\tlet marketUnderlying = outstandingLiabilities;\n\treturn yearlyIssuanceBorrow / marketUnderlying;\n}\n\nexport function CalculateTokenYield(\n\tperTokenIssuance: number,\n\ttokenRate: number,\n\tunderlyingPrice: Maybe,\n\tybxPrice: number\n): number {\n\t// NOTE - assume prices are of the same denomination\n\treturn perTokenIssuance * (ybxPrice / (underlyingPrice ?? 1));\n}\n\nexport function CalculateYbxIssuanceForYear(outstandingYbx: number): number {\n\tconst ybxTotal = 1_500_000_000;\n\t// TODO: Update - this value represents the yearly issuance percentage based on 1 year of 0.1% daily issuance #math\n\tconst ybxIssuanceYearly = 0.238985164;\n\tconst toBeIssued = ybxTotal - outstandingYbx;\n\treturn ybxIssuanceYearly * toBeIssued;\n}\n\n/**\n * Calculate the Lending Spot Rate for an asset\n * @param borrowRate - The current borrow spot rate for the asset\n * @param utilRate - The current utilization rate for the asset\n * @returns\n */\nexport function CalculateLendSpotRate(borrowRate: number, utilRate: number): number {\n\treturn borrowRate * utilRate;\n}\n\n//===== Avg Interest Rate Calcs =====\n// NOTE: These are a bit intensive, and shouldn't be calculated unless necessary\nexport function CalculateSYBXSpotRate(outstandingSYBX: number, stakingPoolYbx: number): number {\n\treturn stakingPoolYbx / outstandingSYBX;\n}\n\nexport function CalculateAvgUtilRateForBalance(): number {\n\tthrow new Error();\n}\n\nexport function CalculatePoolTokenPresentValue(): number {\n\treturn 100;\n}\n\n//========== Health Factors and Things ==========\n\nexport function CalculateMaxPermittedBorrow(liabilityHealth: BigNumber, collateralHealth: BigNumber): number {\n\treturn collateralHealth.dividedBy(1.1).minus(liabilityHealth).times(0.99).toNumber();\n}\n\n/**\n * Calculate the new health factor for a user given some delta\n * @param healthFactor - thg\n * @param cDeltaUSD - The change in borrowing power in USD\n * @param lDeltaUSD - The change in liabilities in\n * @returns The new health factor\n */\nexport function CalculateNewHealthFactor(\n\thealthFactor: HealthFactor,\n\tcDeltaUSD: string | BigNumber,\n\tlDeltaUSD: string | BigNumber\n): number {\n\tlet liabilities = new BigNumber(healthFactor.liabilitiesUSD).plus(lDeltaUSD);\n\tlet effectiveCollateral = new BigNumber(healthFactor.borrowLimitUSD).plus(cDeltaUSD);\n\treturn safeMath.divideToNumber(effectiveCollateral, liabilities).toNumber();\n}\n\n/**\n * Calculate the amount of veYBX for a given escrow setup\n * @param ybx - The amount of ybx in escrow\n * @param period - How long the ybx will be in escrow\n */\nexport function CalculateVeYBXIssued(ybx: number, period: number): number {\n\tif (period >= 12) {\n\t\treturn ybx * 4;\n\t} else if (period >= 6) {\n\t\treturn ybx * 1.5;\n\t} else {\n\t\treturn ybx;\n\t}\n}\n","/**\n * Utility functions to help build, manage, and display asset data\n */\nimport { POOL_ACCOUNT_ID } from 'config/constants';\nimport { Asset } from 'stellar-sdk';\nimport { PositionType } from 'types';\n\n/**\n * Verify a given AssetId is a pool asset\n * @param assetId - The assetId to check\n * @param type - (OPTIONAL) The type of Pool Asset to match\n * @returns\n */\nexport function VerifyPoolAssetId(assetId: string, type?: PositionType): boolean {\n\tlet poolAssetRegex = new RegExp(`^(y|l)[a-zA-Z0-9]{3,11}:${POOL_ACCOUNT_ID}$`);\n\tlet passRegex = poolAssetRegex.test(assetId);\n\tif (type !== undefined) {\n\t\treturn passRegex && (type === PositionType.Borrow ? assetId[0] === 'l' : assetId[0] === 'y');\n\t}\n\treturn passRegex;\n}\n\nexport function GetAssetFromId(assetId: string): Asset {\n\tif (assetId === 'XLM:native') {\n\t\treturn Asset.native();\n\t}\n\tlet assetIdCodes = assetId.split(':');\n\treturn new Asset(assetIdCodes[0], assetIdCodes[1]);\n}\n\nexport function GetIdFromAsset(asset: Asset): string {\n\tif (asset.isNative()) {\n\t\treturn 'XLM:native';\n\t}\n\treturn `${asset.code}:${asset.issuer}`;\n}\n","/**\n * Utility functions to help manage user positions\n */\nimport { DIST_ACCOUNT_ID } from 'yieldblox-js';\nimport { Operation, Claimant } from 'stellar-sdk';\nimport { assetHelper } from '.';\nimport { stellarHelper, horizonApi } from '../stellar';\n\nexport async function CreateCollateralFromNone(publicKey: string, assetId: string, amount: string): Promise {\n\tlet account = await horizonApi.GetAccountAsync(publicKey);\n\tlet txBuilder = await stellarHelper.CreateTransactionBuilder(account, 'ybxCollateralize');\n\tlet asset = assetHelper.GetAssetFromId(assetId);\n\ttxBuilder.addOperation(\n\t\tOperation.createClaimableBalance({\n\t\t\tasset: asset,\n\t\t\tamount: amount,\n\t\t\tclaimants: [new Claimant(DIST_ACCOUNT_ID, Claimant.predicateNot(Claimant.predicateUnconditional()))],\n\t\t})\n\t);\n\treturn txBuilder.build().toXDR();\n}\n","import { Server, AccountResponse, Asset, ServerApi, Horizon, Transaction } from 'stellar-sdk';\nimport { HORIZON_URL } from 'config/constants';\nimport { assetHelper } from 'utils/protocol';\n\n/**\n * Horizon Api\n * Methods to fetch data from Horizon\n */\n\nconst horizon = new Server(HORIZON_URL);\n\n/**************\n * Public API *\n **************/\n\n//========== Ledger ==========\n\n/**\n * Get current ledger number\n * @returns ledger number\n */\nexport async function GetCurrentLedger(): Promise {\n\ttry {\n\t\treturn (await horizon.ledgers().order('desc').limit(1).call()).records[0].sequence;\n\t} catch (error) {\n\t\tconsole.log('Error attempting to Get current ledger number');\n\t\tthrow error;\n\t}\n}\n\n//========== Account ==========\n\n/**\n * Get the account from the public key.\n * @param publicKey - The public key (address) for a Stellar Account\n * @return Account Object - https://developers.stellar.org/api/resources/accounts/object/\n */\nexport async function GetAccountAsync(publicKey: string): Promise {\n\ttry {\n\t\treturn await horizon.loadAccount(publicKey);\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to GetAccountAsync: ${publicKey}`);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Get the accounts who have trustlines for a specific asset\n * This method is paged. Paging is complete when there are no records returned.\n * @param asset - The Asset to find holders for\n * @return List of accounts that have trustlines to an asset - https://developers.stellar.org/api/resources/accounts/list/\n */\nexport async function GetHoldersForAssetAsync(\n\tasset: Asset\n): Promise> {\n\ttry {\n\t\treturn await horizon.accounts().forAsset(asset).limit(200).call();\n\t} catch (error) {\n\t\tconsole.log(`Error attempting to GetHoldersForAssetPageAsync: ${JSON.stringify(asset)}`);\n\t\tthrow error;\n\t}\n}\n\n//========== Assets ==========\n\n/**\n * Get the asset object based on the Code / Issuer\n * @param assetCode - The Asset Code for the requested asset\n * @param assetIssuer - The public key for the issuer of the asset\n * @return Asset Object - https://developers.stellar.org/api/resources/assets/object/\n */\nexport async function GetAssetAsync(assetCode: string, assetIssuer: string): Promise {\n\ttry {\n\t\tlet records = (await horizon.assets().forCode(assetCode).forIssuer(assetIssuer).call()).records;\n\t\tif (records.length !== 1) {\n\t\t\tthrow new Error('Uable to find unique asset');\n\t\t}\n\t\treturn records[0];\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to GetAssetAsync for ${assetCode} with issuer ${assetIssuer}`);\n\t\tthrow error;\n\t}\n}\n\n//========== Transactions ==========\n\n/**\n * Get an accounts transactions.\n * This method is paged. Paging is complete when there are no records returned.\n * @param publicKey - The Public Key of the account\n * @return Transaction List - https://developers.stellar.org/api/resources/accounts/transactions/\n */\nexport async function GetAccountTransactionsAsync(\n\tpublicKey: string,\n\torder: 'asc' | 'desc',\n\tcursor?: string\n): Promise> {\n\ttry {\n\t\tif (cursor) {\n\t\t\treturn horizon.transactions().forAccount(publicKey).order(order).cursor(cursor).limit(200).call();\n\t\t} else {\n\t\t\treturn horizon.transactions().forAccount(publicKey).order(order).limit(200).call();\n\t\t}\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to GetTransactions for account: ${publicKey}`);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Get a transaction's operations from it's hash\n * @param txHash - The transaction hash we want the operations of\n * @return Operations List - https://developers.stellar.org/api/resources/transactions/operations/\n */\nexport async function GetTransactionOperationsAsync(\n\ttxHash: string\n): Promise> {\n\ttry {\n\t\treturn await horizon.operations().forTransaction(txHash).limit(101).call();\n\t} catch (error) {\n\t\tconsole.log(`Error attempting to GetOperations for ${txHash}`);\n\t\tthrow error;\n\t}\n}\n\nexport async function SubmitTransactionAsync(transaction: Transaction): Promise {\n\ttry {\n\t\tconsole.log('Transaction was made successfully!');\n\t\treturn await horizon.submitTransaction(transaction);\n\t} catch (error) {\n\t\tconsole.log(`Error attempting to submit transaction.`);\n\t\tconsole.error(error);\n\t\tthrow error;\n\t}\n}\n\n//========== Claimable Balances ==========\n\n/**\n * Get the claimable balances for an asset object\n * @param claimableBalanceId - The ID of the claimable balance\n * @return {Promise} Claimable Balances List - https://developers.stellar.org/api/resources/claimablebalances/list/\n */\nexport async function GetClaimableBalancesByIdAsync(\n\tclaimableBalanceId: string\n): Promise {\n\ttry {\n\t\treturn await horizon.claimableBalances().claimableBalance(claimableBalanceId).call();\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to GetClaimableBalance for ${claimableBalanceId}`);\n\t\tthrow error;\n\t}\n}\n\nexport async function GetClaimableBalancesForAccountAsync(\n\taccountId: string\n): Promise> {\n\ttry {\n\t\treturn await horizon.claimableBalances().claimant(accountId).limit(200).call();\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to Get Pool Claimable Balances for account: ${accountId}`);\n\t\tthrow error;\n\t}\n}\n\nexport async function GetDepositClaimableBalanceAsync(\n\taccountId: string,\n\tassetId: string\n): Promise {\n\ttry {\n\t\tlet asset = assetHelper.GetAssetFromId(assetId);\n\t\tlet page = await horizon\n\t\t\t.claimableBalances()\n\t\t\t.sponsor(accountId)\n\t\t\t.asset(asset)\n\t\t\t.claimant(accountId)\n\t\t\t.order('desc')\n\t\t\t.limit(1)\n\t\t\t.call();\n\t\treturn page.records[0];\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to Get Pool Claimable Balances for account: ${accountId}`);\n\t\tthrow error;\n\t}\n}\n\nexport async function GetTransactionForClaimableBalanceAsync(cBalanceId: string): Promise {\n\ttry {\n\t\treturn (await horizon.transactions().forClaimableBalance(cBalanceId).limit(1).order('asc').call()).records[0];\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to transaction for claimable balance${cBalanceId}`);\n\t\tthrow error;\n\t}\n}\n\n//========== Trades ==========\n\n/**\n * Gets trades for an asset pair\n * @param {Asset} sellAsset Asset being sold\n * @param {Asset} buyAsset asset being bought\n */\nexport async function GetTradesAsync(sellAsset: Asset, buyAsset: Asset) {\n\ttry {\n\t\treturn await horizon.trades().forAssetPair(sellAsset, buyAsset).limit(200).order('desc').call();\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to trades for${sellAsset.code}:${buyAsset.code}`);\n\t\tthrow error;\n\t}\n}\n\n// ====================\n// = Aggregations =\n// ====================\n\n//========== Fee Stats ==========\n\n/**\n * Get the current fees.\n * @return The Fee Stats Object https://developers.stellar.org/api/aggregations/fee-stats/object/\n */\nexport async function GetFeeStatsAsync(): Promise {\n\ttry {\n\t\treturn await horizon.feeStats();\n\t} catch (error) {\n\t\tconsole.error(`Error attempting to GetFeeStats: ${JSON.stringify(error)}`);\n\t\tthrow error;\n\t}\n}\n\n//========== Order Books ==========\n\n/**\n * Get the current Stellar orderbook\n * @param selling - The asset being sold\n * @param buying - The asset being bought\n * @return Order Book Object - https://developers.stellar.org/api/aggregations/order-books/single/\n */\nexport async function GetOrderbookAsync(selling: Asset, buying: Asset): Promise {\n\ttry {\n\t\treturn await horizon.orderbook(selling, buying).call();\n\t} catch (error) {\n\t\tconsole.error(\n\t\t\t`Error attempting to GetOrderbook. Selling: ${JSON.stringify(selling)}, Buying: ${JSON.stringify(buying)}`\n\t\t);\n\t\tthrow error;\n\t}\n}\n\n/**\n * Get the current TWAM for the asset.\n * @param baseId - The assetId being sold\n * @param counterId - The asset being bought\n * @return Trade Aggregation Object (NOTE - SDK DOES NOT SUPPORT TYPING) - https://developers.stellar.org/api/aggregations/trade-aggregations/object/\n */\nexport async function GetTradeAggregationAsync(baseId: string, counterId: string, timespan?: number): Promise {\n\ttry {\n\t\tlet base = assetHelper.GetAssetFromId(baseId);\n\t\tlet counter = assetHelper.GetAssetFromId(counterId);\n\t\tlet currentTime = Date.now();\n\t\tlet oneDayAgo = currentTime - 86400000;\n\t\tlet result = await horizon\n\t\t\t.tradeAggregation(base, counter, oneDayAgo, currentTime, 900000, 0)\n\t\t\t.limit(1)\n\t\t\t.order('desc')\n\t\t\t.call();\n\t\tif (result.records.length !== 1) throw new Error('Not traded');\n\t\treturn result.records[0];\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\tthrow error;\n\t}\n}\n\nexport async function GetPathStrictSendAsync(\n\tsendAssetId: string,\n\tdestAssetId: string,\n\tsendAmount: string\n): Promise> {\n\ttry {\n\t\tlet sendAsset = assetHelper.GetAssetFromId(sendAssetId);\n\t\tlet destAsset = assetHelper.GetAssetFromId(destAssetId);\n\t\tlet result = await horizon.strictSendPaths(sendAsset, sendAmount, [destAsset]).limit(1).call();\n\t\tif (result.records.length < 1) {\n\t\t\tconsole.log(`No path found for ${sendAssetId} -> ${destAssetId}`);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn result.records[0];\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\tthrow error;\n\t}\n}\n\nexport async function GetPathStrictReceiveAsync(\n\tsendAssetId: string,\n\tdestAssetId: string,\n\treceiveAmount: string\n): Promise> {\n\ttry {\n\t\tlet sendAsset = assetHelper.GetAssetFromId(sendAssetId);\n\t\tlet destAsset = assetHelper.GetAssetFromId(destAssetId);\n\t\tlet result = await horizon.strictReceivePaths([sendAsset], destAsset, receiveAmount).limit(1).call();\n\t\tif (result.records.length < 1) {\n\t\t\tconsole.log(`No path found for ${sendAssetId} -> ${destAssetId}`);\n\t\t\treturn undefined;\n\t\t}\n\t\treturn result.records[0];\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\tthrow error;\n\t}\n}\n","import { PaymentPath } from 'yieldblox-js';\n\nexport class PaymentPathDetail implements PaymentPath {\n sendAssetId: string = '';\n sendAmount: string = '';\n destAssetId: string = '';\n destAmount: string = '';\n value: number = 0;\n\n path: string[] = [];\n}\n","import * as horizonApi from './horizonApi';\nimport {\n\tTransactionBuilder,\n\tAccountResponse,\n\tMemo,\n\tAsset,\n\tServerApi,\n\tTransaction,\n\tAccount,\n\tOperation,\n} from 'stellar-sdk';\nimport { HORIZON_NETWORK } from 'config/constants';\nimport { AssetRecord } from 'stellar-sdk/lib/types/assets';\nimport { PaymentPathDetail } from './paymentPathDetail';\nimport { assetHelper } from 'utils/protocol';\nimport { transformer } from 'yieldblox-js';\n\n/**\n * Stellar Helper\n * Helper functions to work with Stellar\n */\n\n//========== TransactionBuilder ==========\n\n/**\n * Fetches the current suggested fee\n * @returns A valid fee\n */\nexport async function GetCurrentFee(): Promise {\n\ttry {\n\t\tlet feeStats = await horizonApi.GetFeeStatsAsync();\n\t\tlet fee = parseFloat(feeStats.fee_charged.mode) * 2;\n\t\treturn fee.toFixed(7);\n\t} catch (error) {\n\t\tthrow error;\n\t}\n}\n\n/**\n * Creats a TransactionBuilder object\n * @param sourceAccount - The source account for the Transaction\n * @param memo - The memo for the Transaction\n * @param maxTime - The UNIX timestamp where the Transaction will be invalid after\n * @param minTime - The UNIX timestamp where the Transaction will be invalid before\n * @returns A TransactionBuilder object\n */\nexport async function CreateTransactionBuilder(\n\tsourceAccount: AccountResponse,\n\tmemo: string,\n\tmaxTime?: number,\n\tminTime?: number\n): Promise {\n\tlet fee = await GetCurrentFee();\n\tif (!maxTime) {\n\t\t// set to 5 min in the future by default\n\t\t// TransactionBuilder takes UNIX (by the second) timestamp\n\t\tmaxTime = Math.floor(Date.now() / 1000) + 5 * 60;\n\t}\n\t// set minTime to immediately if not provided\n\tif (!minTime) minTime = 0;\n\n\treturn new TransactionBuilder(sourceAccount, {\n\t\tmemo: Memo.text(memo),\n\t\tfee: fee,\n\t\tnetworkPassphrase: HORIZON_NETWORK,\n\t\ttimebounds: {\n\t\t\tmaxTime: maxTime,\n\t\t\tminTime: minTime,\n\t\t},\n\t});\n}\n\n/**\n *\n * @param walletAddress The wallet address to generate a token for\n * @returns\n */\nexport function CreateUnsignedTokenXdr(walletAddress: string, hash: string): string {\n\tconst tempAcct = new Account(walletAddress, '-1');\n\tconst txBuilder = new TransactionBuilder(tempAcct, { fee: '100', networkPassphrase: HORIZON_NETWORK });\n\n\ttxBuilder.addOperation(\n\t\tOperation.manageData({\n\t\t\tname: 'txFunctionHash',\n\t\t\tvalue: hash,\n\t\t})\n\t);\n\n\t// set TTL on the token for 1 hour\n\treturn txBuilder\n\t\t.setTimeout(31 * 60)\n\t\t.build()\n\t\t.toXDR();\n}\n\nexport async function SubmitTransaction(envelopeXdr: string): Promise {\n\tlet tx = TransactionBuilder.fromXDR(envelopeXdr, HORIZON_NETWORK);\n\tif (tx instanceof Transaction) {\n\t\ttry {\n\t\t\tlet result = await horizonApi.SubmitTransactionAsync(tx);\n\t\t\treturn result.hash;\n\t\t} catch (e: any) {\n\t\t\tthrow e;\n\t\t}\n\t} else {\n\t\tthrow new Error('XDR can not be for a FeeBumpTransaction');\n\t}\n}\n\n//========== Trustlines ==========\n\n/**\n * Verify a trustline for an account\n * @param account - The account response to verify the trustline for\n * @param asset - The asset to verify the trustline for\n * @returns {boolean}\n */\nexport function VerifyTrustline(account: AccountResponse, asset: Asset): boolean {\n\tif (asset.isNative()) {\n\t\treturn true;\n\t}\n\treturn account.balances.some(b => {\n\t\tlet _b: any = b;\n\t\treturn (\n\t\t\t_b.asset_type === asset.getAssetType() &&\n\t\t\t_b.asset_code === asset.getCode() &&\n\t\t\t_b.asset_issuer === asset.getIssuer()\n\t\t);\n\t});\n}\n\n//========== Assets ==========\n\n/**\n * Find the outstanding token amount for a given asset\n * @param assetId - The assetId of the asset\n */\nexport async function GetOutstandingTokens(assetId: string): Promise {\n\ttry {\n\t\tlet assetIds = assetId.split(':');\n\t\tlet assetRecord = await horizonApi.GetAssetAsync(assetIds[0], assetIds[1]);\n\t\treturn parseFloat(assetRecord.amount) + parseFloat(assetRecord.claimable_balances_amount);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\treturn 0;\n\t}\n}\n\n/**\n * Find the asset record for a given asset\n * @param assetId - The assetId of the asset\n */\nexport async function GetAssetRecordAsync(assetId: string): Promise {\n\ttry {\n\t\tlet assetIds = assetId.split(':');\n\t\treturn await horizonApi.GetAssetAsync(assetIds[0], assetIds[1]);\n\t} catch (e) {\n\t\tconsole.error(e);\n\t\tthrow e;\n\t}\n}\n\n/**\n * Find DEX price for asset\n * @param baseId - The id of the asset to be the base\n * @param counterId - The id of the asset to be the counter\n * @returns\n */\nexport async function GetDEXPriceAsync(baseId: string, counterId: string): Promise {\n\ttry {\n\t\tlet tradeAggregation = await horizonApi.GetTradeAggregationAsync(baseId, counterId);\n\t\treturn parseFloat(tradeAggregation.avg);\n\t} catch (e) {\n\t\treturn 0.1; // TODO - Just don't want to deal with this during testing.\n\t}\n}\n\n//========== Claimable Balances ==========\n\n/**\n * Verify an account is an unconditional claimant of a claimable balance\n * @param claimableBalance - The Claimable Balance to check the claimants of\n * @param claimantId - The public key of the claimant\n */\nexport function VerifyUnconditionalClaimant(\n\tclaimableBalance: ServerApi.ClaimableBalanceRecord,\n\tclaimantId: string\n): boolean {\n\tfor (let claimant of claimableBalance.claimants) {\n\t\tif (claimant.destination !== claimantId) continue;\n\t\t//@ts-ignore - Typing is odd here - TODO: Submit issue\n\t\treturn claimant.predicate.uncondictional;\n\t}\n\treturn false;\n}\n\n//========== Order Book ==========\n\n/**\n * Get the market rate for a given asset transfer\n * @param sendAssetId - The assetId for the asset to sell / send\n * @param destAssetId - The assetId for the asset to buy / send\n * @param sendAmount - The amount to sell / send\n * @returns The market quote price, or zero if no price was found\n */\nexport async function GetSendMarketQuoteAsync(\n\tsendAssetId: string,\n\tdestAssetId: string,\n\tsendAmount: number\n): Promise {\n\t// inflate send amount to avoid weak paths\n\tlet inflation = 1.1;\n\tlet inflatedSendAmount = sendAmount * inflation;\n\tlet pathPaymentRecord = await horizonApi.GetPathStrictSendAsync(\n\t\tsendAssetId,\n\t\tdestAssetId,\n\t\tinflatedSendAmount.toFixed(7)\n\t);\n\tlet path: PaymentPathDetail = new PaymentPathDetail();\n\tpath.value = 0;\n\tif (pathPaymentRecord) {\n\t\tpath.value = Number(pathPaymentRecord.destination_amount) / Number(pathPaymentRecord.source_amount);\n\t\tpath.sendAssetId = sendAssetId;\n\t\tpath.sendAmount = pathPaymentRecord.source_amount;\n\t\tpath.destAssetId = destAssetId;\n\t\tpath.destAmount = pathPaymentRecord.destination_amount;\n\t\tpathPaymentRecord.path.forEach(e => {\n\t\t\tpath.path.push(transformer.getAssetIdFromObject(e.asset_type, e.asset_issuer, e.asset_code));\n\t\t});\n\t}\n\treturn path;\n}\n\n/**\n * Get the market rate for a given asset transfer\n * @param sendAssetId - The assetId for the asset to sell / send\n * @param destAssetId - The assetId for the asset to buy / send\n * @param sendAmount - The amount to sell / send\n * @returns The market quote price, or zero if no price was found\n */\nexport async function GetReceiveMarketQuoteAsync(\n\tsendAssetId: string,\n\tdestAssetId: string,\n\trecieveAmount: number\n): Promise {\n\tlet path: PaymentPathDetail = new PaymentPathDetail();\n\t// inflate send amount to avoid weak paths\n\tlet inflatedSendAmount = recieveAmount * 1.1;\n\tlet pathPaymentRecord = await horizonApi.GetPathStrictReceiveAsync(\n\t\tsendAssetId,\n\t\tdestAssetId,\n\t\tinflatedSendAmount.toFixed(7)\n\t);\n\tif (pathPaymentRecord) {\n\t\tpath.value = Number(pathPaymentRecord.destination_amount) / Number(pathPaymentRecord.source_amount);\n\t\tpath.sendAssetId = sendAssetId;\n\t\tpath.sendAmount = pathPaymentRecord.source_amount;\n\t\tpath.destAssetId = destAssetId;\n\t\tpath.destAmount = pathPaymentRecord.destination_amount;\n\t\tpathPaymentRecord.path.forEach(e => {\n\t\t\tpath.path.push(transformer.getAssetIdFromObject(e.asset_type, e.asset_issuer, e.asset_code));\n\t\t});\n\t}\n\treturn path;\n}\n","import BigNumber from 'bignumber.js';\n\nexport * as horizonApi from './horizonApi';\nexport * as stellarHelper from './stellarHelper';\nexport * as poolDataHelper from './poolDataHelper';\nexport * as priceHelper from './priceHelper';\n\n/**\n * Stellar Min Amount\n */\nexport const stellarMin = 0.0000001;","import albedoIntent from '@albedo-link/intent';\nimport { v4 as uuid } from 'uuid';\nimport { HORIZON_NETWORK } from 'config/constants';\n\nexport async function connect(): Promise {\n\tlet token = uuid();\n\tlet result = await albedoIntent.publicKey({ token: token });\n\treturn result.pubkey;\n}\n\nexport async function sign(xdr: string): Promise {\n\tlet result = await albedoIntent.tx({ xdr: xdr, network: HORIZON_NETWORK });\n\treturn result.signed_envelope_xdr;\n}\n","import freighterApi from '@stellar/freighter-api';\nimport { HORIZON_NETWORK } from 'config/constants';\n\nexport async function connect(): Promise {\n\tlet active = freighterApi.isConnected();\n\tif (!active) throw new Error('Freighter is not installed');\n\n\treturn await freighterApi.getPublicKey();\n}\n\nexport async function sign(xdr: string): Promise {\n\tlet signedTransaction = await freighterApi.signTransaction(xdr, HORIZON_NETWORK);\n\treturn signedTransaction;\n}\n","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport { Networks } from 'stellar-sdk';\nimport { Governance, Pool, PoolAsset, Prices, ProposalType, safeMath, Turret, YbxBase, YbxTurret } from 'yieldblox-js';\nimport { HORIZON_URL, POOL_ACCOUNT_ID, YBX_TOKEN } from 'config/constants';\nimport { AllocationProposalData, PoolAssetData, XdrProposalData } from 'types';\nimport { mathHelper } from 'utils/protocol';\nimport BigNumber from 'bignumber.js';\n\nexport interface IYieldBloxContext {\n\tbase: YbxBase;\n\tybxTurretHelper: YbxTurret;\n\tturrets: Turret[];\n\thorizonUrl: string;\n\tnetwork: Networks;\n\tgovernance: Governance;\n\tallocationProposal: AllocationProposalData;\n\txdrProposals: XdrProposalData[];\n\tveYbxRate: number;\n\tpool: Pool;\n\tpoolAssets: Record;\n\tybxAsset: PoolAsset;\n\tcontractHash: string;\n\tgetPoolAssetDataFromUnderlying: (underlyingId: string) => PoolAssetData;\n\tgetPoolAssetDataFromToken: (tokenId: string) => PoolAssetData;\n\tupdateLedger: () => void;\n\tgetProtocolPriceFetcher: (timestamp: number) => Prices;\n}\n\nconst YieldBloxContext = React.createContext>(undefined);\n\nYbxBase.Configure(HORIZON_URL);\nconst base = new YbxBase();\nconst ybxTurretHelper = new YbxTurret();\n\nexport const YieldBloxProvider = ({ children = null as any }) => {\n\t// cache local instances to keep webapi data in sync with each other\n\tconst [currentGov, setCurrentGov] = useState({} as Governance);\n\tconst [currentPool, setCurrentPool] = useState({} as Pool);\n\tconst [poolAssets, setPoolAssets] = useState>({});\n\tconst [ybxAsset, setYbxAsset] = useState({} as PoolAsset);\n\tconst [contractHash, setContractHash] = useState('');\n\tconst [veYbxRate, setVeYbxRate] = useState(0);\n\tconst [allocationProposal, setAllocationProposal] = useState({} as AllocationProposalData);\n\tconst [xdrProposals, setXdrProposals] = useState([]);\n\tconst [turrets, setTurrets] = useState([]);\n\n\tconst ledgerTimer = useRef(null);\n\n\tconst updateLedger = async () => {\n\t\tif (ledgerTimer.current) {\n\t\t\tclearTimeout(ledgerTimer.current);\n\t\t}\n\n\t\tloadPool();\n\t\tloadGov();\n\t\tloadTurrets();\n\n\t\tledgerTimer.current = setTimeout(() => {\n\t\t\tupdateLedger();\n\t\t}, 30 * 60 * 1000);\n\t};\n\n\t// load ledger for first time on mount\n\tuseEffect(() => {\n\t\tupdateLedger();\n\t}, []);\n\n\tasync function loadGov() {\n\t\ttry {\n\t\t\tlet newGov = await base.governance();\n\t\t\t// TODO: Make function for this\n\t\t\tlet contractHash = newGov.data.getContractHash();\n\t\t\tlet veYbxValue = await newGov.getVeYBXRate();\n\t\t\tawait loadProposals(newGov);\n\t\t\tsetCurrentGov(newGov);\n\t\t\tsetContractHash(contractHash);\n\t\t\tsetVeYbxRate(veYbxValue.toNumber());\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to load governance account.');\n\t\t}\n\t}\n\n\tasync function loadTurrets() {\n\t\ttry {\n\t\t\tlet newTurrets = await ybxTurretHelper.Turrets();\n\t\t\tsetTurrets(newTurrets);\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to load turrets.');\n\t\t}\n\t}\n\n\tasync function loadPool() {\n\t\ttry {\n\t\t\tconsole.log('Setting pool...');\n\t\t\tlet newPool = await base.pool(POOL_ACCOUNT_ID);\n\t\t\tsetCurrentPool(newPool);\n\n\t\t\tlet assetRecord = await base.horizon.GetAssetAsync(YBX_TOKEN);\n\t\t\tlet outstandingYbx = parseFloat(assetRecord.amount) + parseFloat(assetRecord.claimable_balances_amount);\n\t\t\tlet yearlyYbxToBeIssued = mathHelper.CalculateYbxIssuanceForYear(outstandingYbx);\n\t\t\tlet newPoolAssetData: Record = {};\n\t\t\tlet newPoolAssets = newPool.getSupportedAssets();\n\t\t\tfor (const pAsset of newPoolAssets) {\n\t\t\t\tif (pAsset.underlyingId === YBX_TOKEN) {\n\t\t\t\t\tsetYbxAsset(pAsset);\n\t\t\t\t} else {\n\t\t\t\t\tlet data = await loadPoolAsset(newPool, pAsset, yearlyYbxToBeIssued);\n\t\t\t\t\tif (data) {\n\t\t\t\t\t\tnewPoolAssetData[pAsset.underlyingId] = data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetPoolAssets(newPoolAssetData);\n\t\t\tconsole.log('Pool set');\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to load pool account.');\n\t\t}\n\t}\n\n\tasync function loadPoolAsset(newPool: Pool, pAsset: PoolAsset, ybxToBeIssued: number): Promise> {\n\t\ttry {\n\t\t\t// TODO: Update base to return util rate\n\t\t\tlet timestamp = Date.now();\n\t\t\tlet lTokensOutstanding = await pAsset.getLiabilityTokensOutstanding();\n\t\t\tlet lTokenRate = await pAsset.getLiabilityTokenRate(timestamp);\n\t\t\tlet yTokensOutstanding = await pAsset.getPoolTokensOutstanding();\n\t\t\tlet yTokenRate = await pAsset.getPoolTokenRate(timestamp);\n\n\t\t\tlet liabilitiesOutstanding = lTokensOutstanding.times(lTokenRate);\n\t\t\tlet poolOutstanding = yTokensOutstanding.times(yTokenRate);\n\t\t\tlet poolBalance = newPool.getBalance(pAsset.underlyingId) ?? '0';\n\n\t\t\tlet utilRate = safeMath.CalcUtilizationRatio(liabilitiesOutstanding, new BigNumber(poolBalance));\n\t\t\tlet interestRate = safeMath.CalcFloatInterestRate(pAsset.data, utilRate);\n\t\t\tlet lendRate = safeMath.CalcLendInterestRate(interestRate, utilRate);\n\n\t\t\tlet lTokenIssuance = (pAsset.data.borrowingAllocation * ybxToBeIssued) / lTokensOutstanding.toNumber();\n\t\t\tlet yTokenIssuance = (pAsset.data.lendingAllocation * ybxToBeIssued) / yTokensOutstanding.toNumber();\n\n\t\t\t// frontend does not need bignumber precision\n\t\t\treturn {\n\t\t\t\tpoolAsset: pAsset,\n\t\t\t\tborrowRate: interestRate.toNumber(),\n\t\t\t\tlendRate: lendRate.toNumber(),\n\t\t\t\tutilRate: utilRate.toNumber(),\n\t\t\t\tlTokenIssuance: lTokenIssuance,\n\t\t\t\tyTokenIssuance: yTokenIssuance,\n\t\t\t\ttotalLiabilities: liabilitiesOutstanding.toNumber(),\n\t\t\t\ttotalUnderlying: poolOutstanding.toNumber(),\n\t\t\t\tyTokenRate: yTokenRate.toNumber(),\n\t\t\t\tlTokenRate: lTokenRate.toNumber(),\n\t\t\t\tpoolBalance: parseFloat(poolBalance),\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to load pool asset data for ', pAsset.underlyingId);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tasync function loadProposals(newGov: Governance) {\n\t\ttry {\n\t\t\t// TODO: Enable proposal loading after vote modals are tested\n\t\t\tlet proposalAccountIds = newGov.data.getAllCustomProposalIds();\n\t\t\tlet newProposals: XdrProposalData[] = [];\n\t\t\tfor (const proposalId of proposalAccountIds) {\n\t\t\t\tlet xdrProp = await newGov.getCustomProposal(proposalId);\n\t\t\t\tlet votes = await xdrProp.getVotes();\n\t\t\t\tlet yes = votes.votes.find(v => v.assetId === `YES:${xdrProp.id}`);\n\t\t\t\tlet no = votes.votes.find(v => v.assetId === `NO:${xdrProp.id}`);\n\t\t\t\tnewProposals.push({\n\t\t\t\t\tproposal: xdrProp,\n\t\t\t\t\tyes: parseFloat(yes?.amount ?? '0'),\n\t\t\t\t\tno: parseFloat(no?.amount ?? '0'),\n\t\t\t\t\ttotal: parseFloat(votes.total),\n\t\t\t\t\tquorumPct: parseFloat(votes.pctOfQuorum),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// fetch council proposals\n\t\t\tlet councilLock = await newGov.getCouncilProposal(ProposalType.COUNCIL_LOCK_CONTRACT);\n\t\t\tif (councilLock) {\n\t\t\t\tconsole.log('councilLock', councilLock);\n\t\t\t\tlet votes = await councilLock.getVotes();\n\t\t\t\t// @ts-ignore\n\t\t\t\tlet yes = votes.votes.find(v => v.assetId === `YES:${councilLock.id}`);\n\t\t\t\t// @ts-ignore\n\t\t\t\tlet no = votes.votes.find(v => v.assetId === `NO:${councilLock.id}`);\n\t\t\t\tnewProposals.push({\n\t\t\t\t\tproposal: councilLock,\n\t\t\t\t\tyes: parseFloat(yes?.amount ?? '0'),\n\t\t\t\t\tno: parseFloat(no?.amount ?? '0'),\n\t\t\t\t\ttotal: parseFloat(votes.total),\n\t\t\t\t\tquorumPct: parseFloat(votes.pctOfQuorum),\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet councilSwap = await newGov.getCouncilProposal(ProposalType.COUNCIL_SWAP_SIGNER);\n\t\t\tif (councilSwap) {\n\t\t\t\tconsole.log('councilSwap', councilSwap);\n\t\t\t\tlet votes = await councilSwap.getVotes();\n\t\t\t\t// @ts-ignore\n\t\t\t\tlet yes = votes.votes.find(v => v.assetId === `YES:${councilSwap.id}`);\n\t\t\t\t// @ts-ignore\n\t\t\t\tlet no = votes.votes.find(v => v.assetId === `NO:${councilSwap.id}`);\n\t\t\t\tnewProposals.push({\n\t\t\t\t\tproposal: councilSwap,\n\t\t\t\t\tyes: parseFloat(yes?.amount ?? '0'),\n\t\t\t\t\tno: parseFloat(no?.amount ?? '0'),\n\t\t\t\t\ttotal: parseFloat(votes.total),\n\t\t\t\t\tquorumPct: parseFloat(votes.pctOfQuorum),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsetXdrProposals(newProposals);\n\t\t\tconsole.log('newProposals', newProposals);\n\t\t\tlet newAllocationProposal = await newGov.getAllocationProposal();\n\t\t\tif (newAllocationProposal) {\n\t\t\t\tlet allcVotes = await newAllocationProposal.getVotes();\n\t\t\t\tconsole.log('allocVotes', allcVotes);\n\t\t\t\tlet newAllocationData: AllocationProposalData = {\n\t\t\t\t\tproposal: newAllocationProposal,\n\t\t\t\t\tvotes: allcVotes.votes,\n\t\t\t\t\ttotal: parseFloat(allcVotes.total),\n\t\t\t\t};\n\t\t\t\tsetAllocationProposal(newAllocationData);\n\t\t\t\tconsole.log('newAllocationData', newAllocationData);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to load proposals');\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\tfunction getPoolAssetDataFromUnderlying(underlyingId: string): PoolAssetData {\n\t\treturn poolAssets[underlyingId];\n\t}\n\n\tfunction getPoolAssetDataFromToken(tokenId: string): PoolAssetData {\n\t\tlet poolAsset = currentPool.getAssetFromToken(tokenId);\n\t\treturn getPoolAssetDataFromUnderlying(poolAsset?.underlyingId ?? '');\n\t}\n\n\tfunction getProtocolPriceFetcher(timestamp?: number): Prices {\n\t\ttry {\n\t\t\tlet priceObj = base.prices(timestamp ?? Date.now());\n\t\t\treturn priceObj;\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to load price fetcher.');\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n\nexport const useYieldBlox = () => {\n\tconst context = useContext(YieldBloxContext);\n\n\tif (!context) {\n\t\tthrow new Error('Component rendered outside the provider tree');\n\t}\n\n\treturn context;\n};\n","import {\n\tProtocolEvent,\n\tTurret,\n\tYbxError\n} from 'yieldblox-js';\nimport { ConfirmTransactionModal, TransactionFailModal, TransactionSuccessModal } from 'components';\nimport { BuildingTransactionModal } from 'components/modals/BuildingTransactionModal';\nimport { WalletConnectModal } from 'components/modals/WalletConnectModal';\nimport { useLocalStorageState } from 'hooks';\nimport React, { useContext, useEffect, useState } from 'react';\nimport { TxText, WalletType } from 'types';\nimport { stellarHelper } from 'utils/stellar';\nimport { albedo, freighter,} from 'utils/wallet';\nimport { useYieldBlox } from './yieldblox';\nimport { getTurretFeePaymentXdr } from 'utils/turret';\n\nexport interface IWalletContext {\n\tconnected: boolean;\n\twalletAddress: Maybe;\n\twalletType: Maybe;\n\ttoken: string;\n\ttxStatus: TxStatus;\n\tacknowledge: boolean;\n\tsetAcknowledge: (agree: boolean) => void;\n\tconnect: () => void;\n\tdisconnect: () => void;\n\tsignTransaction: (xdr: string, txText: TxText) => Promise>;\n\trunContract: (request: ProtocolEvent, token?: string) => Promise;\n\tsubmitTransaction: (xdr: string) => Promise;\n\tfetchToken: () => Promise>;\n\trunTurretFeePayment: (amount: string, turret: Turret) => Promise>;\n}\n\nexport enum TxStatus {\n\tNone,\n\tBuild,\n\tConfirm,\n\tSuccess,\n\tSubmitted,\n\tFail,\n}\n\nconst WalletContext = React.createContext>(undefined);\n\nexport const WalletProvider = ({ children = null as any }) => {\n\tconst { contractHash, updateLedger, ybxTurretHelper } = useYieldBlox();\n\tconst [showModal, setShowModal] = useState(false);\n\tconst [connected, setConnected] = useState(false);\n\tconst [autoConnect, setAutoConnect] = useState(true);\n\tconst [tokenExpire, setTokenExpire] = useState>(undefined);\n\n\t// wallet state\n\tconst [walletAddress, setWalletAddress] = useState>(undefined);\n\tconst [walletType, setWalletType] = useLocalStorageState('walletType');\n\tconst [token, setToken] = useState('');\n\tconst [acknowledge, setAcknowledge] = useLocalStorageState('acknowledgeTos');\n\n\t// internal state\n\tconst [txStatus, setTxStatus] = useState(TxStatus.None);\n\tconst [txHash, setTxHash] = useState>(undefined);\n\tconst [xdr, setXdr] = useState>(undefined);\n\tconst [errorMessage, setErrorMessage] = useState>(undefined);\n\tconst [horizonResponseData, setHorizonResponseData] = useState(undefined);\n\tconst [txText, setTxText] = useState(TxText.Default);\n\n\tuseEffect(() => {\n\t\tif (autoConnect) {\n\t\t\tif (acknowledge && walletType) {\n\t\t\t\tconnect(walletType as WalletType);\n\t\t\t}\n\t\t\tsetAutoConnect(false);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [walletType, autoConnect]);\n\n\tuseEffect(() => {\n\t\tif (txStatus === TxStatus.Submitted) {\n\t\t\tupdateLedger();\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [txStatus]);\n\n\t/**\n\t * Connects a browser wallet by fetching the public key from the wallet.\n\t * @param _walletType - The wallet we are trying to connect\n\t * @returns The public key of the wallet\n\t */\n\tasync function connect(_walletType: WalletType) {\n\t\ttry {\n\t\t\tif (!acknowledge) {\n\t\t\t\tthrow new Error('Unable to connect wallet if terms and conditions were not set');\n\t\t\t}\n\t\t\tlet address = undefined;\n\t\t\tswitch (_walletType) {\n\t\t\t\tcase WalletType.Freighter:\n\t\t\t\t\taddress = await freighter.connect();\n\t\t\t\t\tbreak;\n\t\t\t\tcase WalletType.Albedo:\n\t\t\t\t\taddress = await albedo.connect();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error('Invalid walletType');\n\t\t\t}\n\t\t\tupdateLedger();\n\t\t\tsetWalletAddress(address);\n\t\t\tsetWalletType(_walletType);\n\t\t\tsetConnected(true);\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tdisconnect();\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tfunction disconnect() {\n\t\tsetWalletAddress(undefined);\n\t\tsetWalletType(undefined);\n\t\tsetConnected(false);\n\t}\n\n\tasync function fetchToken(): Promise> {\n\t\ttry {\n\t\t\tif (walletAddress) {\n\t\t\t\tconsole.log('Fetching token...');\n\t\t\t\tlet _token = undefined;\n\t\t\t\tif (tokenExpire === undefined || tokenExpire < Date.now()) {\n\t\t\t\t\tlet unsignedToken = stellarHelper.CreateUnsignedTokenXdr(walletAddress, contractHash);\n\t\t\t\t\t_token = await signTransaction(unsignedToken, TxText.Token);\n\t\t\t\t\tif (_token) {\n\t\t\t\t\t\tsetToken(_token); // cache token\n\t\t\t\t\t\tsetTokenExpire(Date.now() + (30 * 60 * 1000));\n\t\t\t\t\t\tsetTxStatus(TxStatus.Success);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetTxStatus(TxStatus.Fail);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t_token = token;\n\t\t\t\t}\n\t\t\t\treturn _token;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tasync function runContract(request: ProtocolEvent, token?: string) {\n\t\ttry {\n\t\t\tlet _token: Maybe;\n\t\t\tif (token) {\n\t\t\t\t_token = token;\n\t\t\t} else {\n\t\t\t\t_token = await fetchToken();\n\t\t\t}\n\n\t\t\t// if no token was found, stop\n\t\t\tif (_token === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tsetTxText(TxText.Contract);\n\t\t\tsetTxStatus(TxStatus.Build);\n\t\t\tsetHorizonResponseData(undefined);\n\n\t\t\tlet contractResponse: Maybe;\n\t\t\tlet contractError: string = '';\n\t\t\ttry {\n\t\t\t\tcontractResponse = await ybxTurretHelper.runContract(request, _token);\n\t\t\t} catch (err: unknown) {\n\t\t\t\tcontractError = processYbxError(err, 'Failed to execute transaction.');\n\t\t\t\tcontractResponse = undefined;\n\t\t\t}\n\n\t\t\tif (contractResponse === undefined || contractResponse === '') {\n\t\t\t\t// no good! Fail!\n\t\t\t\tsetXdr(undefined);\n\t\t\t\tsetErrorMessage(contractError);\n\t\t\t\tsetTxStatus(TxStatus.Fail);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetErrorMessage('');\n\n\t\t\tlet signedXdr = await signTransaction(contractResponse, TxText.Contract);\n\t\t\tif (signedXdr) {\n\t\t\t\tawait submitTransaction(signedXdr);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tfunction processHorizonError(err: any) {\n\t\tif (err instanceof Error) {\n\t\t\tsetErrorMessage(err.message);\n\t\t\tif ('response' in err) {\n\t\t\t\tlet resp = (err as any).response;\n\t\t\t\tconsole.log(resp);\n\t\t\t\tif (resp?.data?.extras?.result_codes) {\n\t\t\t\t\tsetHorizonResponseData(resp?.data?.extras?.result_codes);\n\t\t\t\t} else {\n\t\t\t\t\tsetHorizonResponseData(resp?.data);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync function runTurretFeePayment(amount: string, turret: Turret): Promise> {\n\t\ttry {\n\t\t\tif (walletAddress) {\n\t\t\t\tlet { xdr: feeXdr, hash: feeHash } = await getTurretFeePaymentXdr(amount, turret, walletAddress);\n\t\t\t\tlet signedXdr = await signTransaction(feeXdr, TxText.Default);\n\t\t\t\tsetTxText(TxText.Default);\n\t\t\t\tsetTxStatus(TxStatus.Build);\n\t\t\t\tsetHorizonResponseData(undefined);\n\t\t\t\tlet result: Maybe;\n\t\t\t\tif (signedXdr) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresult = await ybxTurretHelper.sendFeesToTurret(turret.turretId, walletAddress, signedXdr);\n\t\t\t\t\t\tsetTxHash(feeHash);\n\t\t\t\t\t\tsetTxStatus(TxStatus.Submitted);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tsetErrorMessage(processYbxError(e, 'Failed to submit fees.'));\n\t\t\t\t\t\tsetXdr(feeXdr);\n\t\t\t\t\t\tsetTxStatus(TxStatus.Fail);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsetTxStatus(TxStatus.Fail);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tsetTxStatus(TxStatus.Fail);\n\t\t\tprocessHorizonError(e);\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tasync function submitTransaction(xdr: string) {\n\t\ttry {\n\t\t\tlet hash = await stellarHelper.SubmitTransaction(xdr);\n\t\t\tsetTxHash(hash);\n\t\t\tsetTxStatus(TxStatus.Submitted);\n\t\t} catch (e: unknown) {\n\t\t\tsetXdr(xdr);\n\t\t\tsetTxStatus(TxStatus.Fail);\n\t\t\tprocessHorizonError(e);\n\t\t}\n\t}\n\n\t/**\n\t * Signs a transaction with a connected wallet.\n\t * @param xdr = The xdr-encoded transaction envelope to sign.\n\t * @returns The signed_xdr of the transaction\n\t */\n\tasync function signTransaction(xdr: string, txText: TxText): Promise> {\n\t\ttry {\n\t\t\tsetTxText(txText);\n\t\t\tsetTxStatus(TxStatus.Confirm);\n\t\t\tlet res = '';\n\t\t\tswitch (walletType) {\n\t\t\t\tcase WalletType.Freighter:\n\t\t\t\t\tres = await freighter.sign(xdr);\n\t\t\t\t\tbreak;\n\t\t\t\tcase WalletType.Albedo:\n\t\t\t\t\tres = await albedo.sign(xdr);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconsole.log('Fetched signature');\n\t\t\treturn res;\n\t\t} catch (e: any) {\n\t\t\tconsole.error(e);\n\t\t\tsetXdr(xdr);\n\t\t\tsetTxStatus(TxStatus.Fail);\n\t\t\tsetErrorMessage(e.message);\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn (\n\t\t setShowModal(true),\n\t\t\t\tdisconnect,\n\t\t\t\tsignTransaction,\n\t\t\t\trunContract,\n\t\t\t\tsubmitTransaction,\n\t\t\t\tfetchToken,\n\t\t\t\trunTurretFeePayment,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t\t setShowModal(false)} connect={connect} />\n\t\t\t\n\t\t\t setTxStatus(TxStatus.None)}\n\t\t\t/>\n\t\t\t setTxStatus(TxStatus.None)}\n\t\t\t/>\n\t\t\t setTxStatus(TxStatus.None)}\n\t\t\t/>\n\t\t\n\t);\n};\n\nfunction processYbxError(err: any, defaultError: string): string {\n\tlet contractError: string = defaultError || '';\n\tif (err instanceof Error) {\n\t\tif ('isYbxError' in err) {\n\t\t\tconst ybxError: YbxError = (err as YbxError);\n\t\t\tcontractError = 'ERROR: ';\n\t\t\tif (ybxError.responseError) {\n\t\t\t\tcontractError += ybxError.responseError;\n\t\t\t}\n\t\t\tif (ybxError.turretRunResponse?.error) {\n\t\t\t\tcontractError += ' | ' +\n\t\t\t\t\tybxError.turretRunResponse.error;\n\t\t\t}\n\t\t} else {\n\t\t\tcontractError = err.message;\n\t\t}\n\t}\n\treturn contractError;\n}\n\nexport const useWallet = () => {\n\tconst context = useContext(WalletContext);\n\n\tif (!context) {\n\t\tthrow new Error('Component rendered outside the provider tree');\n\t}\n\n\treturn context;\n};\n","import { Account, Asset, Networks, Operation, Server, Transaction, TransactionBuilder } from 'stellar-sdk';\nimport { Turret, YbxUser } from 'yieldblox-js';\n\n/**\n *\n * @param turret\n * @param user\n */\nexport async function getTurretFeePaymentXdr(\n\tamount: string,\n\tturret: Turret,\n\tpublicKey: string\n): Promise<{ xdr: string; hash: string }> {\n\tlet stellar = new Server('https://horizon-testnet.stellar.org');\n\tlet userAccount = await stellar.loadAccount(publicKey);\n\tlet feeTxBuilder = new TransactionBuilder(userAccount, {\n\t\tfee: '10000',\n\t\tnetworkPassphrase: Networks.TESTNET,\n\t});\n\n\tfeeTxBuilder.addOperation(\n\t\tOperation.payment({\n\t\t\tasset: Asset.native(),\n\t\t\tamount: amount,\n\t\t\tdestination: turret.accountId,\n\t\t})\n\t);\n\n\tlet tx = feeTxBuilder.setTimeout(30).build();\n\tlet hash = tx.hash().toString('hex');\n\tlet xdr = tx.toXDR();\n\treturn { xdr, hash };\n}\n","import { Asset } from 'stellar-sdk';\n\n// Some General API Things\nexport interface PagedList {\n\titems: T[];\n\tpageNumber: number;\n\ttotalPages: number;\n\tnext?: string;\n}\n\nexport interface Balance {\n\tassetId: string; // in the form assetCode:assetIssuer\n\tamount: number;\n}\n\n// Account Resource\n\nexport interface Account {\n\taccountId: string;\n}\n\nexport enum PositionType {\n\tBorrow = 'borrow',\n\tLend = 'lend',\n}\n\nexport enum InterestType {\n\tFixed = 'fixed',\n\tFloat = 'float',\n}\n\nexport interface Position {\n\tbalanceId: string;\n\tassetId: string;\n\ttype: PositionType;\n\tinterestType: InterestType;\n\tinitialBalance: number;\n\taccruedBalance: number;\n\tcollateralBalance: number;\n\ttimestamp: Date;\n}\n\nexport interface AccountPositions {\n\tblockNumber: string;\n\taccountId: string;\n\ttotalLent: number;\n\ttotalBorrowed: number;\n\ttotalCollateral: number;\n\thealthFactor: number;\n\tnetApy: number;\n\tpositions: PagedList;\n}\n\nexport interface AccountGovernance {\n\taccountId: string;\n\tgovernanceTokens: Balance;\n\tavailableVotes: number;\n}\n\nexport interface ProposalVote {\n\taccountId: string;\n\tvoted: boolean;\n\tamount: number;\n\tproposalId: string;\n}\n\nexport interface AccountVotes {\n\taccountId: string;\n\tproposalVotes: PagedList;\n}\n\nexport interface AccountFees {\n\taccountId: string;\n\tbalance: Balance;\n\tlastUpdatedUtc?: Date;\n\tlastDepositAmount?: Balance;\n\tminDeposit: number;\n}\n\n// Governance\n\nexport enum ProposalType {\n\tSwapSigner = 'swap_signer',\n\tFreezeContract = 'freeze_contract',\n\tXdr = 'governance',\n}\n\nexport enum ProposalStatus {\n\tActive = 'active',\n\tAccepted = 'accepted',\n\tRejected = 'rejected',\n}\n\nexport interface Votes {\n\tfor: number;\n\tagainst: number;\n\ttotal: number;\n}\n\nexport interface Proposal {\n\tid: string;\n\ttype: ProposalType;\n\txdr: string;\n\ttitle: string;\n\tdescription: string;\n\texternalUrl: string;\n\tstatus: string;\n\tvotes: Votes;\n}\n\nexport interface Proposals {\n\tproposals: PagedList;\n}\n\nexport interface ProposalUpdate {\n\tsignedTx: string;\n}\n\nexport interface ProposalPostBody extends ProposalUpdate {\n\tid: string;\n\ttype: ProposalType;\n\txdr: string;\n\ttitle: string;\n\tdescription: string;\n\texternalUrl: string;\n}\n\nexport interface ProposalPutBody extends ProposalUpdate {\n\ttitle: string;\n\tdescription: string;\n\texternalUrl: string;\n}\n\n// Turrets\n\nexport interface Turret {\n\tendpoint: string;\n\torg: string;\n\taccount: string;\n\ttier: number;\n}\n\nexport interface Turrets {\n\tturrets: PagedList;\n}\n\n// Contracts\n\nexport interface Contract {\n\tversion: string;\n\tgithub: string;\n\thash: string;\n}\n\n// Protocol Events\nexport interface ProtocolEvent {\n\ttimestamp: Date;\n\tuserPublicKey: string;\n\ttype: ProtocolEventTypes;\n}\n\nexport enum ProtocolEventTypes {\n\tBurn = 'TX_BURN',\n\tGovernance = 'TX_GOVERNANCE',\n\tLiquidate = 'TX_LIQUIDATE',\n\tMint = 'TX_MINT',\n\tRate = 'TX_RATE',\n\tRepay = 'TX_REPAY',\n\tClaim = 'TX_CLAIM',\n}\n\nexport interface BurnEvent extends ProtocolEvent {\n\tamount: string;\n\tpoolTokenCode: string;\n}\n\nexport interface GovernanceEvent extends ProtocolEvent {\n\toperationType: string;\n\t//newProposalAccountKeypair?: Keypair;\n\tproposalSequenceNum?: string;\n\tproposalXDR?: string;\n\tproposalAccount?: string;\n\taddSigner?: string;\n\tremoveSigner?: string;\n\tLock_Unlock_txFunction?: string;\n}\n\nexport interface MintEvent extends ProtocolEvent {\n\tdeposit?: Deposit;\n\tcollateralizations?: Collateralization[]; //needs to come from parsing\n\tborrow?: Borrow; //needs to come from parsing\n}\n\nexport interface Collateralization {\n\tpoolAsset: Asset;\n\tamount: string;\n}\n\nexport interface Borrow {\n\tasset: Asset;\n\tamount: string;\n\tinterestType: InterestType;\n}\n\nexport interface Deposit {\n\tclaimableBalanceId: string;\n\tamountCollateral: string;\n}\n\nexport interface RepayEvent extends ProtocolEvent {\n\trepayments: Repayment[];\n\twithdrawals: Withdrawal[];\n\trepayWithCollateral: boolean;\n\tacceptableSlippage: string;\n}\n\nexport interface Repayment {\n\tasset: Asset;\n\tamount: string;\n}\n\nexport interface Withdrawal {\n\tpoolToken: Asset;\n\tamount: string;\n}\n\nexport interface ContractResponse {\n\taccountId: string;\n\tcontract: Contract;\n\ttype: ProtocolEventTypes;\n\txdr: string;\n\tcost: number;\n\tremainingfeeBalance: Balance;\n}\n\n// Market\n\nexport interface LendAsset {\n\tassetId: string;\n\tinterestRate: number;\n\ttokenYield: number;\n}\n\nexport interface LendMarket {\n\tlendAssets: PagedList;\n\tblockNumber: string;\n}\n\nexport interface AssetDetails {\n\tsupply: number;\n\tborrowed: number;\n\tutilizationRate: number;\n}\n\nexport interface LendAssetResponse extends LendAsset {\n\tdetails: AssetDetails;\n\tblockNumber: string;\n}\n\nexport interface BorrowAsset {\n\tassetId: string;\n\tfloatInterestRate: number;\n\tfixedInterestRate: number;\n\ttokenYield: number;\n}\n\nexport interface BorrowMarket {\n\tborrowAssets: PagedList;\n\tblockNumber: string;\n}\n\nexport interface BorrowAssetResponse extends BorrowAsset {\n\tdetails: AssetDetails;\n\tblockNumber: string;\n}\n","import { useLocalStorageState } from 'hooks';\nimport React, { useContext, useState } from 'react';\n\nexport interface ISettingsContext {\n\ttheme: string;\n\tgeoCheck: boolean;\n\tlastFaucet: string;\n\tsetLastFaucet: (timestamp: any) => void;\n\tsetTheme: (newTheme: any) => void;\n}\n\nconst SettingsContext = React.createContext>(undefined);\n\nexport const SettingsProvider = ({ children = null as any }) => {\n\tconst [theme, setTheme] = useLocalStorageState('theme', 'light');\n\tconst [lastFaucet, setLastFaucet] = useLocalStorageState('faucetTimestamp', '0');\n\n\t// TODO: Add geo check\n\tconst [geoCheck, setGeoCheck] = useState(true);\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n\nexport const useSettings = () => {\n\tconst context = useContext(SettingsContext);\n\n\tif (!context) {\n\t\tthrow new Error('Component rendered outside the provider tree');\n\t}\n\n\treturn context;\n};\n","export default __webpack_public_path__ + \"static/media/ybx_logo_light_tn.b3b75777.svg\";","export default __webpack_public_path__ + \"static/media/ybx_logo_dark_tn.dff743f9.svg\";","export default __webpack_public_path__ + \"static/media/icn_scriptee.2b702903.svg\";","export default __webpack_public_path__ + \"static/media/icn_nav_active.05fe7906.svg\";","export default __webpack_public_path__ + \"static/media/icn_copy.e9c85412.svg\";","export default __webpack_public_path__ + \"static/media/icn_light.ca985f2f.svg\";","export default __webpack_public_path__ + \"static/media/icn_dark.8f6309b8.svg\";","export default __webpack_public_path__ + \"static/media/faucetIcon.7c43ff65.svg\";","import React, { useContext, useEffect, useRef, useState } from 'react';\nimport { YBX_TOKEN } from 'config/constants';\nimport { useYieldBlox } from './yieldblox';\n\nexport interface IPriceContext {\n\tprices: Record;\n\ttimestamp: number;\n\tgetAllPrices: (timestamp: number) => Promise;\n}\n\nexport interface PricePair {\n\tbase: string; // ASSETID FORMAT\n\tcounter: string; // FOREX FORMAT\n\trate: number;\n\treverseRate: number;\n}\n\nconst PriceContext = React.createContext>(undefined);\n\nexport const PriceProvider = ({ children = null as any }) => {\n\tconst { pool, getProtocolPriceFetcher } = useYieldBlox();\n\tconst [timestamp, setTimestamp] = useState(Date.now());\n\tconst [prices, setPrices] = useState>({});\n\n\tconst priceTimer = useRef(null);\n\n\tconst updatePriceTimestamp = () => {\n\t\tlet newTimestamp = Date.now() - 30 * 1000;\n\t\tgetAllPrices(newTimestamp);\n\t\tsetTimestamp(newTimestamp);\n\n\t\tif (priceTimer.current) {\n\t\t\tclearTimeout(priceTimer.current);\n\t\t}\n\t\tpriceTimer.current = setTimeout(() => {\n\t\t\tupdatePriceTimestamp();\n\t\t}, 5 * 60 * 1000);\n\t};\n\n\tuseEffect(() => {\n\t\tupdatePriceTimestamp();\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [pool]);\n\n\t/**\n\t * Fetch the exchange rates from USD for all supported counter AssetIds.\n\t * Sets the prices in the Prices context.\n\t * @param timestamp - The timestamp to fetch the TWAPs from\n\t * @returns Promise\n\t */\n\tasync function getAllPrices(timestamp: number): Promise {\n\t\tif (pool.id === undefined) {\n\t\t\t// pool is not yet loaded, skip this round.\n\t\t\tconsole.log('Attempted to find prices before pool loaded.');\n\t\t\treturn Promise.resolve();\n\t\t}\n\t\tconsole.log('Fetching prices...');\n\t\tlet priceFetcher = getProtocolPriceFetcher(timestamp);\n\t\tlet supportedAssets = pool.getSupportedAssets();\n\t\tlet newPrices: Record = {};\n\t\tfor (let poolAsset of supportedAssets) {\n\t\t\tlet priceToUsd = await priceFetcher.getProtocolPrice(poolAsset);\n\t\t\tlet priceAsNum = priceToUsd.toNumber();\n\t\t\tif (poolAsset.underlyingId === YBX_TOKEN) {\n\t\t\t}\n\t\t\tnewPrices[poolAsset.underlyingId] = {\n\t\t\t\tbase: poolAsset.underlyingId,\n\t\t\t\tcounter: 'USD',\n\t\t\t\trate: priceAsNum,\n\t\t\t\treverseRate: 1 / priceAsNum,\n\t\t\t};\n\t\t}\n\t\tsetPrices(newPrices);\n\t\tconsole.log('Prices set.');\n\t\treturn Promise.resolve();\n\t}\n\n\treturn {children};\n};\n\nexport const usePrices = () => {\n\tconst context = useContext(PriceContext);\n\n\tif (!context) {\n\t\tthrow new Error('Component rendered outside the provider tree');\n\t}\n\n\treturn context;\n};\n","import React, { useContext, useEffect, useState } from 'react';\nimport { Escrow, HealthFactor, YbxUser } from 'yieldblox-js';\nimport { useYieldBlox } from './yieldblox';\nimport { useWallet } from './wallet';\nimport { usePrices } from './price';\nimport { YBX_TOKEN } from 'config/constants';\nimport { mathHelper } from 'utils/protocol';\n\nexport interface IUserContext {\n\tuser: YbxUser;\n\thealthFactor: HealthFactor;\n\ttotalLentUSD: number;\n\tnetIR: number;\n\ttoClaim: number;\n\tescrowedYbx: number;\n\tactiveVotes: number;\n\tvotingPower: number;\n\n\tgetBalance: (assetId: string) => Maybe;\n}\n\nconst UserContext = React.createContext>(undefined);\n\nexport const UserProvider = ({ children = null as any }) => {\n\tconst { base, pool, poolAssets, getPoolAssetDataFromToken } = useYieldBlox();\n\tconst { timestamp, prices } = usePrices();\n\tconst { walletAddress } = useWallet();\n\n\t// cache local instances to keep webapi data in sync with each other\n\tconst [currentUser, setCurrentUser] = useState({} as YbxUser);\n\tconst [healthFactor, setHealthFactor] = useState({\n\t\tvalue: 0,\n\t\tliabilitiesUSD: '0',\n\t\tborrowLimitUSD: '0',\n\t});\n\tconst [toClaim, setToClaim] = useState(0);\n\tconst [escrowedYbx, setEscrowedYbx] = useState(0);\n\tconst [votePower, setVotePower] = useState(0);\n\tconst [activeVotes, setActiveVotes] = useState(0);\n\tconst [netIR, setNetIr] = useState(0);\n\tconst [totalLend, setTotalLent] = useState(0);\n\n\tuseEffect(() => {\n\t\tif (walletAddress && Object.keys(poolAssets).length > 0) {\n\t\t\tloadUser(walletAddress, true);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [walletAddress, poolAssets]);\n\n\tasync function loadUser(walletAddress: string, forceUpdate: boolean = false) {\n\t\ttry {\n\t\t\tif (forceUpdate || currentUser.id !== walletAddress) {\n\t\t\t\tlet newUser = await base.user(walletAddress);\n\t\t\t\tsetCurrentUser(newUser);\n\n\t\t\t\t// calculate health factor\n\t\t\t\tlet newHealthFactor = await newUser.getHealthFactorForPool(pool.id, timestamp);\n\t\t\t\tsetHealthFactor(newHealthFactor);\n\n\t\t\t\t// determine new issuance\n\t\t\t\tlet borrows = newUser.positions.getBorrowedPositionsForPool(pool.id);\n\t\t\t\tlet lends = newUser.positions.getLentPositionsForPool(pool.id);\n\t\t\t\tlet newToClaim = 0;\n\n\t\t\t\tlet weightedLendingRate = 0;\n\t\t\t\tlet totalValueLent = 0;\n\t\t\t\tlet ybxPrice = prices[YBX_TOKEN];\n\t\t\t\tfor (const position of lends) {\n\t\t\t\t\tlet accruedYbx = await position.getAccruedYBX(timestamp, pool);\n\t\t\t\t\tnewToClaim += parseFloat(accruedYbx);\n\t\t\t\t\t//get position USD value\n\t\t\t\t\tlet poolAssetData = getPoolAssetDataFromToken(position.assetId);\n\t\t\t\t\tlet yTokenRate = poolAssetData.yTokenRate;\n\t\t\t\t\tlet underlyingPrice = prices[poolAssetData.poolAsset.underlyingId];\n\t\t\t\t\tlet positionValue = Number(position.balance) * yTokenRate * Number(underlyingPrice.rate);\n\n\t\t\t\t\t//get net rate\n\t\t\t\t\tlet ybxIssuanceRate = mathHelper.CalculateTokenYield(\n\t\t\t\t\t\tpoolAssetData.yTokenIssuance,\n\t\t\t\t\t\tpoolAssetData.yTokenRate,\n\t\t\t\t\t\tunderlyingPrice?.rate,\n\t\t\t\t\t\tybxPrice?.rate ?? 1\n\t\t\t\t\t);\n\t\t\t\t\tlet netLendingRate = poolAssetData.lendRate + ybxIssuanceRate;\n\t\t\t\t\t//weight interest rate\n\t\t\t\t\tweightedLendingRate += netLendingRate * positionValue;\n\n\t\t\t\t\t//add totalValue\n\t\t\t\t\ttotalValueLent += positionValue;\n\t\t\t\t}\n\t\t\t\tlet weightedBorrowingRate = 0;\n\t\t\t\tfor (const position of borrows) {\n\t\t\t\t\tlet accruedYbx = await position.getAccruedYBX(timestamp, pool);\n\t\t\t\t\tnewToClaim += parseFloat(accruedYbx);\n\t\t\t\t\t//get position USD value\n\t\t\t\t\tlet poolAssetData = getPoolAssetDataFromToken(position.assetId);\n\t\t\t\t\tlet lTokenRate = poolAssetData.lTokenRate;\n\t\t\t\t\tlet underlyingPrice = prices[poolAssetData.poolAsset.underlyingId];\n\t\t\t\t\tlet positionValue = Number(position.balance) * lTokenRate * Number(underlyingPrice.rate);\n\n\t\t\t\t\t//get net rate\n\t\t\t\t\tlet ybxIssuanceRate = mathHelper.CalculateTokenYield(\n\t\t\t\t\t\tpoolAssetData.lTokenIssuance,\n\t\t\t\t\t\tpoolAssetData.lTokenRate,\n\t\t\t\t\t\tunderlyingPrice?.rate,\n\t\t\t\t\t\tybxPrice?.rate ?? 1\n\t\t\t\t\t);\n\n\t\t\t\t\tlet netLendingRate = poolAssetData.borrowRate - ybxIssuanceRate;\n\t\t\t\t\t//weight interest rate\n\t\t\t\t\tweightedBorrowingRate += netLendingRate * positionValue;\n\t\t\t\t}\n\t\t\t\tlet newNetIr =\n\t\t\t\t\t((weightedLendingRate - weightedBorrowingRate) / (totalValueLent + Number(newHealthFactor.liabilitiesUSD))) *\n\t\t\t\t\t100;\n\t\t\t\tsetNetIr(newNetIr);\n\t\t\t\tsetTotalLent(totalValueLent);\n\t\t\t\tsetToClaim(newToClaim);\n\n\t\t\t\t// determine escrowed YBX\n\t\t\t\tlet newEscrowedYbx = newUser.positions.escrowed.reduce(\n\t\t\t\t\t(prev: number, e: Escrow) => prev + parseFloat(e.balance),\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tsetEscrowedYbx(newEscrowedYbx);\n\n\t\t\t\t// determine active votes\n\t\t\t\tlet newVotePower = newUser.getVotePower();\n\t\t\t\tlet newActiveVotes = await newUser.getCurrentVotes();\n\t\t\t\tlet maxVote = Math.max(...newActiveVotes.map(v => parseFloat(v.amount)));\n\t\t\t\tsetVotePower(parseFloat(newVotePower));\n\t\t\t\tsetActiveVotes(maxVote);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to load user.', JSON.stringify(e));\n\t\t}\n\t}\n\n\tfunction getBalance(assetId: string): Maybe {\n\t\t// check if user is currently loaded\n\t\tif (currentUser.id) {\n\t\t\treturn currentUser.getBalance(assetId);\n\t\t}\n\t\treturn undefined;\n\t}\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n\nexport const useUser = () => {\n\tconst context = useContext(UserContext);\n\n\tif (!context) {\n\t\tthrow new Error('Component rendered outside the provider tree');\n\t}\n\n\treturn context;\n};\n","import React, { useContext, useEffect, useState } from 'react';\nimport { useYieldBlox } from './yieldblox';\nimport { useWallet } from './wallet';\nimport { useUser } from './user';\n\nexport interface ITurretContext {\n\tloadedFees: boolean;\n\tfeeBalances: Record;\n\tloadBalances: () => Promise;\n\tpayFees: (turretId: string, amount: string) => Promise;\n}\n\nconst TurretContext = React.createContext>(undefined);\n\nexport const TurretProvider = ({ children = null as any }) => {\n\tconst { ybxTurretHelper, turrets } = useYieldBlox();\n\tconst { walletAddress, fetchToken, token, runTurretFeePayment } = useWallet();\n\n\t// cache local instances to keep webapi data in sync with each other\n\tconst [loadedFees, setLoadedFees] = useState(false);\n\tconst [feeBalances, setFeeBalances] = useState>({});\n\n\tuseEffect(() => {\n\t\tif (walletAddress && token) {\n\t\t\tloadBalances();\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [walletAddress]);\n\n\tasync function loadBalances() {\n\t\ttry {\n\t\t\tlet userToken = await fetchToken();\n\t\t\tif (userToken !== undefined) {\n\t\t\t\tlet feePromises = turrets.map(t => ybxTurretHelper.getFeeForTurret(t.turretId, userToken ?? ''));\n\t\t\t\tlet results = await Promise.all(feePromises);\n\t\t\t\tlet newFeeBalances: Record = {};\n\t\t\t\tfor (let i = 0; i < turrets.length; i++) {\n\t\t\t\t\tnewFeeBalances[turrets[i].turretId] = results[i];\n\t\t\t\t}\n\t\t\t\tsetFeeBalances(newFeeBalances);\n\t\t\t\tsetLoadedFees(true);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to load user.', JSON.stringify(e));\n\t\t}\n\t}\n\n\tasync function payFees(turretId: string, amount: string) {\n\t\ttry {\n\t\t\tlet turret = turrets.find(t => t.turretId === turretId);\n\t\t\tif (turret) {\n\t\t\t\tlet result = await runTurretFeePayment(amount, turret);\n\t\t\t\tif (result) {\n\t\t\t\t\tlet newFeeBalances: Record = { ...feeBalances };\n\t\t\t\t\tnewFeeBalances[turretId] = result;\n\t\t\t\t\tsetFeeBalances(newFeeBalances);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tconsole.log('Unable to pay fees', JSON.stringify(e));\n\t\t}\n\t}\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n};\n\nexport const useTurret = () => {\n\tconst context = useContext(TurretContext);\n\n\tif (!context) {\n\t\tthrow new Error('Component rendered outside the provider tree');\n\t}\n\n\treturn context;\n};\n","import React, { useRef, useState } from 'react';\nimport styled from 'styled-components';\nimport { Button, ClaimModal, MenuModal, FaucetModal } from 'components';\nimport { Link, useLocation } from 'react-router-dom';\nimport { useWallet } from 'contexts/wallet';\nimport { WalletType } from 'types';\nimport { getFormattedNumber, getShortenWalletAddress } from 'utils';\nimport { GreenText } from 'theme';\nimport copy from 'copy-to-clipboard';\nimport { useSettings } from 'contexts/settings';\nimport { toast } from 'react-toastify';\n\nimport logoImg from 'assets/images/ybx_logo_light_tn.svg';\nimport logoImgDark from 'assets/images/ybx_logo_dark_tn.svg';\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport scripteeIcon from 'assets/images/icn_scriptee.svg';\nimport arrowIcon from 'assets/images/icn_arrow_down.svg';\nimport navActiveIcon from 'assets/images/icn_nav_active.svg';\nimport copyIcon from 'assets/images/icn_copy.svg';\nimport albedoIcon from 'assets/images/wallet_albedo.svg';\nimport freighterIcon from 'assets/images/wallet_freighter.svg';\nimport lightIcon from 'assets/images/icn_light.svg';\nimport darkIcon from 'assets/images/icn_dark.svg';\nimport faucetIcon from 'assets/images/faucetIcon.svg';\nimport { useUser } from 'contexts';\n\nconst Container = styled.div`\n\tposition: relative;\n\twidth: 100%;\n\theight: 70px;\n\tbackground: ${({ theme }) => theme.colors.white};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 0 2.5rem;\n\tbox-sizing: border-box;\n`;\n\nconst LogoImg = styled.img`\n\twidth: 180px;\n`;\n\nconst LinkContainer = styled.div`\n\tposition: absolute;\n\ttop: 0;\n\tleft: 50%;\n\theight: 100%;\n\ttransform: translateX(-50%);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n`;\n\nconst LinkItem = styled(Link)`\n\tposition: relative;\n\theight: 100%;\n\tcolor: ${({ theme }) => theme.colors.black};\n\ttext-decoration: none;\n\tfont-size: 20px;\n\tline-height: 26px;\n\tfont-weight: 500;\n\tpadding: 0 35px;\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst DetailContainer = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst DetailWrapper = styled.div`\n\theight: 34px;\n\tborder-radius: 17px;\n\tpadding: 2px;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n`;\n\nconst IconWrapper = styled.div`\n\twidth: 30px;\n\theight: 30px;\n\tborder-radius: 50%;\n\tbackground: ${({ theme }) => theme.colors.green1};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\twidth: 100%;\n\t}\n`;\n\nconst ArrowIcon = styled.img`\n\twidth: 16px;\n\tmargin: 0 10px 0 4px;\n`;\n\nconst NavActiveIcon = styled.img`\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n`;\n\nconst BurgerButton = styled.button`\n\tdisplay: flex;\n`;\n\nconst ChangeWalletWrapper = styled(DetailWrapper)`\n\tposition: absolute;\n\ttop: 34px;\n\tleft: 0;\n\twidth: 100%;\n\tbackground: ${({ theme }) => theme.colors.white};\n\tbox-shadow: 0 7px 13px ${({ theme }) => theme.colors.shadow};\n\tcursor: pointer;\n`;\n\nconst ThemeButton = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-right: 16px;\n\tcursor: pointer;\n\n\timg {\n\t\twidth: 24px;\n\t\theight: 24px;\n\t}\n`;\n\nconst FaucetButton = styled.div`\n\tdisplay: flex;\n\twidth: 24px;\n\theight 24px;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 50%;\n\tbackground: rgba(68, 114, 255, 1);\n\tmargin-right: 16px;\n\tcursor: pointer;\n\t&: hover {\n\t\t\topacity: 0.5;\n\t}\n\n\timg {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t}\n`;\n\ninterface INavItem {\n\tto: string;\n\ttitle: string;\n}\n\nconst NavItem = ({ to, title }: INavItem) => {\n\tconst location = useLocation();\n\n\treturn (\n\t\t\n\t\t\t{title}\n\t\t\t{location.pathname === to && }\n\t\t\n\t);\n};\n\nexport const Header = () => {\n\tconst { theme, setTheme } = useSettings();\n\tconst { connect, disconnect, connected, walletAddress, walletType } = useWallet();\n\tconst { toClaim, user } = useUser();\n\tconst [showMenu, setShowMenu] = useState(false);\n\tconst [showClaim, setShowClaim] = useState(false);\n\tconst [showFaucet, setShowFaucet] = useState(false);\n\n\tconst [width, setWidth] = React.useState(window.innerWidth);\n\tconst breakpoint = 1410;\n\n\tlet walletButtonRef = useRef(null);\n\n\tReact.useEffect(() => {\n\t\tconst handleResizeWindow = () => setWidth(window.innerWidth);\n\t\t// subscribe to window resize event \"onComponentDidMount\"\n\t\twindow.addEventListener('resize', handleResizeWindow);\n\t\treturn () => {\n\t\t\t// unsubscribe \"onComponentDestroy\"\n\t\t\twindow.removeEventListener('resize', handleResizeWindow);\n\t\t};\n\t}, []);\n\n\tconst handleClickOutside = (event: any) => {\n\t\tif (walletButtonRef.current && !walletButtonRef.current.contains(event.target)) {\n\t\t\tsetShowChangeWallet(false);\n\t\t}\n\t};\n\n\tReact.useEffect(() => {\n\t\tdocument.addEventListener('click', handleClickOutside, true);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('click', handleClickOutside, true);\n\t\t};\n\t});\n\n\tconst [showChangeWallet, setShowChangeWallet] = useState(false);\n\n\tconst handleClickWalletButton = () => {\n\t\tif (!showChangeWallet) {\n\t\t\tsetShowChangeWallet(true);\n\t\t} else {\n\t\t\tcopy(walletAddress || '');\n\t\t\ttoast.success('Copied the wallet address');\n\t\t\tsetShowChangeWallet(false);\n\t\t}\n\t};\n\n\tconst handleDisconnectWallet = () => {\n\t\tdisconnect();\n\t};\n\n\tconst handleFaucetMobile = () => {\n\t\tsetShowMenu(false);\n\t\tsetShowFaucet(true);\n\t};\n\n\tconst handleClaimMobile = () => {\n\t\tsetShowMenu(false);\n\t\tsetShowClaim(true);\n\t};\n\n\tconst getWalletLogo = () => {\n\t\tswitch (walletType) {\n\t\t\tcase WalletType.Freighter:\n\t\t\t\treturn freighterIcon;\n\t\t\tcase WalletType.Albedo:\n\t\t\t\treturn albedoIcon;\n\t\t\tdefault:\n\t\t\t\treturn scripteeIcon;\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t{width < breakpoint ? (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t setShowFaucet(true)}>\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t setTheme(theme === 'dark' ? 'light' : 'dark')}>\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t{!connected || !walletAddress ? (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

{getShortenWalletAddress(walletAddress)}

\n\t\t\t\t\t\t\t\t\t\t{showChangeWallet ? : }\n\t\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\t{showChangeWallet && (\n\t\t\t\t\t\t\t\t\t\t setShowChangeWallet(false)}>\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\tDisconnect\n\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t setShowClaim(true)}>\n\t\t\t\t\t\t\t\t\t

{getFormattedNumber(toClaim)}

\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\n\t\t\t setShowMenu(false)}\n\t\t\t\tonClaim={handleClaimMobile}\n\t\t\t\tonFaucet={handleFaucetMobile}\n\t\t\t/>\n\t\t\t{user.id && setShowClaim(false)} />}\n\t\t\t setShowFaucet(false)} />\n\t\t\n\t);\n};\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAADqADAAQAAAABAAAADgAAAAC98Dn6AAAB2klEQVQoFW1Sz0tUURQ+5/pyBn8QaP4F1SqkICFoN2K0CBLFVbv3HpEzhQU57Vq2mkBs0bhopkUKbhRz4SZp/oEJgiCCHBDcFFEbM2bUmdP3PedKDXPhvnfv+b7z457zqfyzSqXS4M+GzavJbZgvtKEdU9kcTunzOI73PV39oVAsj0vLyqI2aCLvxKSaYCpjIN0Q030nEj6+H1doTxwTJ7Nt3NdTac3ORdEPgpVKJchkMscvyuWRRr21BPqUqE7ks9F7ZXm/6vIJIar5XDxDcvVzbQGkGWQfRuatM7199x7dvfO98PLVGjJfHUrLqOObWB4zMcuHL7VnKPUBAu2BVMV58vDwzxtiqbSbJZc+TkUn+SZfXivdsyDO5eaz0bVzfW4c+AH2dTqSQy6bF4jZediWCXA9CcNv+BWDHnepedRcBrEfZa8kID8nTbuFRnVfzaPjDThdUdXC2eBy2MkK0KUawox1AqZulbZ8Lnr6H4bxIOuOM7G3aMIEW+4J7KyK3eTm2dvJ4UwpCEdF4PK7UbeiJ3zc3R1AmaPcPHt7woEQ2j4i3QSwuPT6Ih0ezoZfTwSQBJ4+FYCP5iWHLAOY1XY3yYnTiKqhTyI573wqcsy2PSYwtMY+dIr8L4Jn1kl8M964AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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ehtHuX3enHdqxAflhBBGFoHc/rPYOit02+NR5eaM0m2ft/63zdmlggcjEkIAUvtL9icAgNyEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIDUhBCA1IQQgNSEEIC8FovF/wLVSEgBKfG4PgAAAABJRU5ErkJggg==\"","import React from 'react';\nimport styled from 'styled-components';\nimport { useWallet, useUser } from 'contexts';\nimport { Button, Card, SectionTitle, EscrowInfo } from 'components';\nimport { Grid } from '@material-ui/core';\nimport { GreenText } from 'theme';\nimport { Tooltip } from '@material-ui/core';\n\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport questionIcon from 'assets/images/icn_question.png';\nimport goodHF from 'assets/images/goodHF.png';\nimport medHF from 'assets/images/medHF.png';\nimport badHF from 'assets/images/badHF.png';\nimport { getDisplayBalance, getDisplayRate, getFormattedNumber, getDisplayHealthFactor } from 'utils';\n\nconst NoConnectedCard = styled(Card)`\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding-right: 20px;\n\tpadding-right: 20px;\n\tbackground: linear-gradient(\n\t\t90deg,\n\t\t${({ theme }) => theme.colors.light_grey1} 0%,\n\t\t${({ theme }) => theme.colors.white} 100%\n\t);\n`;\n\nconst NoConnectedDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-bottom: 2rem;\n\tmargin-right: 2rem;\n\n\timg {\n\t\theight: 60px;\n\t\tmargin-right: 1rem;\n\t}\n\n\tb {\n\t\tfont-size: 20px;\n\t\tline-height: 33px;\n\t\tfont-weight: 500;\n\t}\n`;\n\nconst DetailCard = styled(Card)`\n\theight: 110px;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-size: 18px;\n\tline-height: 24px;\n\n\th5 {\n\t\tmargin-right: 5px;\n\t\ttext-align: left;\n\t\twidth: 50%;\n\t}\n`;\n\nconst HDiv = styled.div`\n\tbackground-size: contain;\n\tbackground-repeat: no-repeat;\n\tbackground-position: right center;\n`;\n\nconst HealthCard = styled(DetailCard)<{ healthFactor: number }>`\n\tbackground: linear-gradient(\n\t\t90deg,\n\t\t${({ theme, healthFactor }) =>\n\t\t\t\thealthFactor < 1.2 ? theme.colors.red1 : healthFactor < 1.7 ? theme.colors.yellow1 : theme.colors.green1}\n\t\t\t20%,\n\t\t${({ theme }) => theme.colors.white + '80'} 100%\n\t);\n\n\tspan {\n\t\tcolor: ${({ theme, healthFactor }) =>\n\t\t\thealthFactor < 1.2 ? theme.colors.red : healthFactor < 1.7 ? theme.colors.black : theme.colors.green};\n\t}\n`;\n\nconst HelpIcon = styled.img`\n\tposition: absolute;\n\ttop: 10px;\n\tright: 10px;\n`;\n\nconst GridDiv = styled.div``;\n\nconst ToolText = styled.text`\n\tfont: DM Sans;\n\tfont-size: 14px;\n`;\n\ninterface IProps {\n\tborrow: boolean;\n\tprofileView?: boolean;\n}\n\nexport const AccountOverview: React.FC = ({ borrow, profileView }) => {\n\tconst { connect, connected } = useWallet();\n\tconst { user, healthFactor, netIR, totalLentUSD } = useUser();\n\tlet healthFactorIs = goodHF;\n\tif (healthFactor.value < 1.2) {\n\t\thealthFactorIs = badHF;\n\t} else if (healthFactor.value < 1.7 && healthFactor.value > 1.2) {\n\t\thealthFactorIs = medHF;\n\t} else if (healthFactor.value > 1.7) {\n\t\thealthFactorIs = goodHF;\n\t}\n\n\treturn !connected ? (\n\t\t\n\t\t\t\n\t\t\t\t\"\"\n\t\t\t\t
\n\t\t\t\t\tNo wallet connected!\n\t\t\t\t\t
Please connect a wallet to use YieldBlox.
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t
\n\t) : (\n\t\t<>\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
{getDisplayHealthFactor(healthFactor.value)}
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\tHealth\n\t\t\t\t\t\t\t\t\t\t\t

factor

\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\tA measure of your collateralization levels.\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tarrow\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t// TODO: Determine usefulness of calculating this\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t
{getFormattedNumber(netIR)}%
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t

Net

\n\t\t\t\t\t\t\t\t\t\tAPR\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
${getFormattedNumber(parseFloat(healthFactor.liabilitiesUSD))}
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t

Total value

\n\t\t\t\t\t\t\t\t\t\tborrowed\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
${getFormattedNumber(totalLentUSD)}
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
Total value
\n\t\t\t\t\t\t\t\t\t\tlent\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t);\n};\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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h0333kQXEM/7feWdJA4e4nUAixFCFjNiDH9x14p5xfP9yxgRNL3N0lwjZHExvXbsyKKLN9YLdzCfTtw8+e7IqdDOWbK0xIiQxcVy+fMj9hge9G/OH/bbjVv2TCCmQmsPUX/q0UiQlhgR0owYGd5VHtD83LvYk2Z0eKRYFXrMcWlPGbXTHCNCmhEjw9dHXjM8+N7o8Hjx/H0cMYLnIkhrjAhpzkj70p56H3cycCeLgfbbzXncNeSYDfJPWRhDs4SQJo08HXfwNoJoRPJvxGKYN0cedvDc25imFkGaJIQ0bYQTaD7nb13X3Xhj/l188LiOr2NX7z7189nVzvQ0TRNCmherFX8Z+efsVy72e+FuM48QJwxg76ezq51D0mmeELIKI+41/Jx0U6YTTYEeHLZHuIsEqyCErMZIdzj4kvcxQjzZUcx+u7mI0d+Uz6H7CbIqQsjq7LebfiTz1wl/7scI7s0pjGpiNH0ZX1OMqA/cRolVEkJWaeTN91+yi3/nbk3bL57E72Km5+jCVChrJYSsVkyVvjnyJr8lHuM65W9fLb3xxzW/8/i6mHjk99TPcX3VVCirJYSsXmz+vhlxA/5Qj3H25n38+WGOBTfxAeB1RO91fE096nvuIfYGOqSA1RNCTkZcO5xiG0Cp9/HfHyLRR/IwYvr1SyPJJ5E76P93//+9jK/XCz++x7h26logJ0MIOSkTbwvIzsk8nCQh5CRNcFZmZs5q5aQJISdNEI8igKQghKQgiEUEkFSEkFQiiJeuIX7Wu1gII4CkIoSkFItqLhtZZbqkx7jd1Y1FMGQlhKQX529ejnzvw9a9i9Ny3B2C9IQQQuzhu4ivU4zi+zgu7tZJMPA7IYTPiCgejis7X+DkljEcDg+/j9Gf+MFnCCEM8Owsz1bDuHty5FtTZ6FCy4QQKjw5Cu3wNffxZ/0058f4uo9zTo34oIIQwsjiFkjfxNfrZ9/9cGbowa/x3z31fPvCIXidrQ0wPiEEILU/Zn8CAMhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAFITQgBSE0IAUhNCAHIq+u6/wMl7uSJGftQsAAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/icn_ybx1.ca6acbfe.svg\";","export default __webpack_public_path__ + \"static/media/escrow_background_leaf.b4a2732c.svg\";","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { Button, Card, EscrowModal } from 'components';\nimport { GreenText, PurpleText } from 'theme';\nimport { useUser, useYieldBlox } from 'contexts';\nimport { getDisplayBalance, getDisplayRate } from 'utils';\nimport { VEYBX_TOKEN, YBX_TOKEN } from 'config/constants';\nimport { Tooltip } from '@material-ui/core';\n\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport ybxIcon1 from 'assets/images/icn_ybx1.svg';\nimport questionIcon from 'assets/images/icn_question.png';\nimport background from 'assets/images/escrow_background_leaf.svg';\n\nconst DetailCard = styled(Card)`\n\twidth: 100%;\n\tmin-width: 200px;\n\tdisplay: flex;\n\tflex-direction: column;\n\tfont-size: 18px;\n\tline-height: 24px;\n\tbackground: ${({ theme }) => theme.colors.white + '99'};\n\tborder: 2px solid ${({ theme }) => theme.colors.purple};\n`;\n\nconst HeroWrapper = styled.div`\n\tborder-radius: 18px;\n\tpadding: 6px;\n\twidth: 100%;\n\tmin-width: 170px;\n\tbackground: transparent;\n\tborder: 2px solid ${({ theme }) => theme.colors.purple};\n\n\tbox-sizing: border-box;\n -moz-box-sizing: border-box;\n -webkit-box-sizing: border-box;\n\tbox-shadow: 0px 7px 13px rgba(0, 0, 0, 0.01);\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tjustify-content: center;\n\t}\n`;\n\nconst FilterDiv = styled.div`\n\twidth: 100%;\n\tbackground: ${({ theme }) => theme.colors.light_grey + 'B3'};\n\tborder-radius: 12px;\n\toverflow: hidden;\n\ttext-align: center;\n\tbox-shadow: 0px 4px 10px ${({ theme }) => theme.colors.light_grey + '90'};\n\n\tbackground-size: cover;\n\tbackground-repeat-y: no-repeat;\n\tbackground-position: center bottom;\n`;\n\nconst HelpIcon = styled.img`\n\tposition: absolute;\n\ttop: 10px;\n\tright: 10px;\n`;\n\nconst Flex = styled.div`\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tjustify-content: center;\n`;\n\nconst DetailWrapper = styled.div`\n\twidth: 100%;\n\theight: 34px;\n\tborder-radius: 17px;\n\tpadding: 2px;\n\tpadding-right: 20px;\n\tbackground: ${({ theme }) => theme.colors.light_grey + 'B3'};\n\tbox-shadow: 0px 7px 13px rgba(0, 0, 0, 0.05);\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n`;\n\nconst IconWrapper = styled.div<{ color: string }>`\n\twidth: 30px;\n\theight: 30px;\n\tborder-radius: 50%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\tcolor: ${({ color }) => color};\n\t\twidth: 30px;\n\t}\n`;\n\nconst ToolText = styled.text`\n\tfont: DM Sans;\n\tfont-size: 14px;\n`;\n\nconst EscrowDiv = styled.div`\n\tborder-radius: 18px;\n\tbackground-size: cover;\n\tbackground-repeat-y: no-repeat;\n\tbackground-position: center bottom;\n`;\n\ninterface IProps {}\n\nexport const EscrowInfo: React.FC = () => {\n\tconst theme = useTheme();\n\tconst { user } = useUser();\n\tconst { ybxAsset, veYbxRate } = useYieldBlox();\n\n\tconst [showModal, setShowModal] = useState(false);\n\n\tconst ybxBalance = user.id ? Number(user.getBalance(YBX_TOKEN) || '0') : 0;\n\tconst veYbx = user.id ? Number(user.getBalance(VEYBX_TOKEN) || '0') : 0;\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\tEscrowed YBX\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
1 veYBX
\n\t\t\t\t\t\t\t\t\t\t
=
\n\t\t\t\t\t\t\t\t\t\t
{getDisplayRate(veYbxRate)} YBX
\n\t\t\t\t\t\t\t\t\t
\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
{getDisplayBalance(veYbx, '')}
\n\t\t\t\t\t\t\t\tveYBX\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
{getDisplayBalance(ybxBalance, '')}
\n\t\t\t\t\t\t\t\tYBX\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t setShowModal(true)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tManage\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\t\tEscrowed YBX: your current loan-to-value for locked YBX, and your\n\t\t\t\t\t\t\t\tcurrent balance of veYBX and YBX.\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t}\n\t\t\t\t\t\tarrow\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t{user.id && setShowModal(false)} />}\n\t\t\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\nconst TitleWrapper = styled.div`\n\tfont-size: 20px;\n\tline-height: 26px;\n\tpadding: 16px;\n\n\tspan {\n\t\tfont-weight: bold;\n\t\tmargin-right: 10px;\n\t\tcolor: ${({ theme }) => theme.colors.green};\n\t}\n`;\n\ninterface IProps extends React.ButtonHTMLAttributes {\n\ttitle: string;\n}\n\nexport const SectionTitle: React.FC = ({ title }) => {\n\treturn (\n\t\t\n\t\t\t-\n\t\t\t{title}\n\t\t\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { AssetIcon, Button, IModalProps, Modal, ModalFooter, ModalHeader } from 'components';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst AssetNameWrapper = styled(RowItem)`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\ninterface IProps extends IModalProps {\n\ttype: string;\n\tassetId?: string;\n\tonConfirm: () => void;\n\tonBack: () => void;\n}\n\nexport const ConfirmActionModal: React.FC = ({ open, onClose, type, onConfirm, onBack, assetId, children }) => {\n\tconst assetCode = assetId?.split(':')[0] || 'XLM';\n\n\treturn (\n\t\t\n\t\t\tConfirm {type}\n\n\t\t\t{assetId && (\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
{assetCode}
\n\t\t\t\t
\n\t\t\t)}\n\n\t\t\t{children}\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/icn_arrow_right.bcec2114.svg\";","import React from 'react';\nimport { Button, IButtonProps } from 'components';\nimport { Tooltip } from '@material-ui/core';\n\ninterface ITooltipButtonProps extends IButtonProps {\n\terrorMessage: string;\n}\n\nexport const TooltipButton: React.FC = ({ children, disabled, errorMessage, ...props }) => {\n\treturn !disabled ? (\n\t\t\n\t) : (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { BalanceLine, MintEvent, NATIVE, POOL_ACCOUNT_1_ID } from 'yieldblox-js';\nimport { AssetIcon, Card, IModalProps, Input, Modal, ModalFooter, ModalHeader } from 'components';\nimport { GreenText } from 'theme';\nimport { ConfirmActionModal } from './ConfirmActionModal';\nimport { PoolAssetData, TxType } from 'types';\nimport { usePrices, useUser, useWallet } from 'contexts';\nimport { mathHelper } from 'utils/protocol';\nimport { getAdjBalance, getAdjDisplayBalance, getDisplayBalance, getDisplayHealthFactor, getDisplayRate } from 'utils';\n\nimport arrowIcon from 'assets/images/icn_arrow_right.svg';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\nimport { YBX_TOKEN } from 'config/constants';\nimport BigNumber from 'bignumber.js';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst AssetNameWrapper = styled(RowItem)`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n\n\tp {\n\t\tcolor: ${({ theme }) => theme.colors.grey2};\n\t}\n`;\n\nconst DetailCard = styled(Card)`\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tpadding: 12px 15px;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-weight: 500;\n\theight: 64px;\n\n\tp {\n\t\tcolor: ${({ theme }) => theme.colors.black};\n\t}\n`;\n\ninterface IProps extends IModalProps {\n\tpAssetData: PoolAssetData;\n}\n\nexport const DepositModal: React.FC = ({ open, onClose, pAssetData }) => {\n\tconst { walletAddress, runContract } = useWallet();\n\tconst { prices } = usePrices();\n\tconst { healthFactor, user, getBalance } = useUser();\n\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [depositAmount, setDepositAmount] = useState('');\n\tconst [collateralAmount, setCollateralAmount] = useState('');\n\tconst [collateralHealthDelta, setCollateralHealthDelta] = useState(0);\n\n\tconst position = user.positions?.getLentPosition(pAssetData.poolAsset.poolTokenId);\n\tconst positionValue = position?.balance ?? '0';\n\tconst posUnderlyingValue = parseFloat(positionValue) * pAssetData.yTokenRate;\n\tconst posUncollateralValue = parseFloat(position?.uncollateralizedBalance ?? '0') * pAssetData.yTokenRate;\n\n\tconst assetCode = pAssetData.poolAsset.underlyingId.split(':')[0];\n\tconst userBalance = parseFloat(getBalance(pAssetData.poolAsset.underlyingId) ?? '0');\n\n\tconst assetPrice = prices[pAssetData.poolAsset.underlyingId];\n\tconst ybxPrice = prices[YBX_TOKEN];\n\tconst tokenYield = mathHelper.CalculateTokenYield(\n\t\tpAssetData.yTokenIssuance,\n\t\tpAssetData.yTokenRate,\n\t\tassetPrice?.rate,\n\t\tybxPrice?.rate ?? 1\n\t);\n\tconst loanToValue = pAssetData.poolAsset.data.loanToValue;\n\n\tconst marketSize = pAssetData.totalUnderlying;\n\tconst price = prices[pAssetData.poolAsset.underlyingId];\n\tconst tvl = marketSize * price.rate;\n\n\tconst newHealthFactor = mathHelper.CalculateNewHealthFactor(healthFactor, collateralHealthDelta.toString(), '0');\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tsetDepositAmount('');\n\t\tsetCollateralAmount('');\n\t\tsetCollateralHealthDelta(0);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleMaxDeposit = () => {\n\t\tlet effectiveBalance = userBalance;\n\t\tif (pAssetData.poolAsset.underlyingId === NATIVE) {\n\t\t\teffectiveBalance = Math.max(effectiveBalance - 50, 0);\n\t\t}\n\t\tsetDepositAmount(effectiveBalance.toFixed(7));\n\t};\n\n\tconst handleSetCollateral = (value: string) => {\n\t\tsetCollateralAmount(value);\n\t\tlet collateralEffect = Number(value) * loanToValue;\n\t\tsetCollateralHealthDelta(getAdjBalance(collateralEffect, price?.rate));\n\t};\n\n\tconst handleMaxCollateral = () => {\n\t\thandleSetCollateral((Number(depositAmount) || 0).toString());\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tconst processTransaction = async () => {\n\t\tif (walletAddress) {\n\t\t\tlet depositBalLine: BalanceLine = {\n\t\t\t\tassetId: pAssetData.poolAsset.underlyingId,\n\t\t\t\tamount: depositAmount,\n\t\t\t};\n\t\t\tlet inputCollateral: BigNumber;\n\t\t\tif (collateralAmount === '') {\n\t\t\t\tinputCollateral = new BigNumber(0);\n\t\t\t} else {\n\t\t\t\tinputCollateral = new BigNumber(collateralAmount);\n\t\t\t}\n\t\t\tlet adjCollateralAmount = inputCollateral\n\t\t\t\t.dividedBy(pAssetData.yTokenRate.toString())\n\t\t\t\t.times(0.99)\n\t\t\t\t.toFixed(7, BigNumber.ROUND_DOWN);\n\t\t\tlet collateralBalLine: BalanceLine = {\n\t\t\t\tassetId: pAssetData.poolAsset.poolTokenId,\n\t\t\t\tamount: adjCollateralAmount,\n\t\t\t};\n\t\t\tlet depositEvent = new MintEvent(\n\t\t\t\twalletAddress,\n\t\t\t\tPOOL_ACCOUNT_1_ID,\n\t\t\t\t[collateralBalLine],\n\t\t\t\tdepositBalLine,\n\t\t\t\tundefined\n\t\t\t);\n\t\t\tawait runContract(depositEvent);\n\t\t}\n\t};\n\n\tconst isValid = () => {\n\t\tif (isNaN(Number(depositAmount)) || Number(depositAmount) <= 0) {\n\t\t\treturn false;\n\t\t}\n\t\treturn userBalance >= Number(depositAmount);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tDeposit\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
{assetCode}
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tMarket\n\t\t\t\t\t\t\t\t

Size

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{getDisplayBalance(tvl, '')}

\n\t\t\t\t\t\t\t\t

{assetCode}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tInterest\n\t\t\t\t\t\t\t\t

Rate

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(pAssetData.yTokenRate)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Token

\n\t\t\t\t\t\t\t\tYield\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(tokenYield)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tLTV\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(loanToValue)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tCurrent Deposit\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(posUnderlyingValue + posUncollateralValue, assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(posUnderlyingValue + posUncollateralValue, price.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\tCurrent Collateral\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(posUnderlyingValue, assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(posUnderlyingValue, price.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tAvailable to deposit\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{getDisplayBalance(userBalance, assetCode)}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(userBalance, price.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tDeposit Amount\n\t\t\t\t\t\t setDepositAmount(e.target.value)}\n\t\t\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\t\t\tonButtonClick={handleMaxDeposit}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tCollateralized Amount\n\t\t\t\t\t\t\t

Effective Collateral: {getDisplayBalance((Number(collateralAmount) || 0) * loanToValue, assetCode)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t handleSetCollateral(e.target.value)}\n\t\t\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\t\t\tonButtonClick={handleMaxCollateral}\n\t\t\t\t\t\t/>\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tHealth Factor\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{getDisplayHealthFactor(healthFactor.value)}\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t{getDisplayHealthFactor(newHealthFactor)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setShowConfirm(true)}\n\t\t\t\t\t\tdisabled={!isValid()}\n\t\t\t\t\t\terrorMessage=\"Cannot deposit more than your wallet balance\"\n\t\t\t\t\t>\n\t\t\t\t\t\tDeposit\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tDeposit Amount\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(Number(depositAmount), assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(Number(depositAmount), price.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tCollateralized Amount\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(Number(collateralAmount), assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(Number(collateralAmount), price.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tEffective Collateral\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance((Number(collateralAmount) || 0) * loanToValue, assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance((Number(collateralAmount) || 0) * loanToValue, price.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { BalanceLine, BurnEvent, POOL_ACCOUNT_1_ID } from 'yieldblox-js';\nimport { AssetIcon, Card, IModalProps, Input, Modal, ModalFooter, ModalHeader } from 'components';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\nimport { GreenText } from 'theme';\nimport { ConfirmActionModal } from './ConfirmActionModal';\nimport { PoolAssetData } from 'types';\nimport { usePrices, useUser, useWallet } from 'contexts';\nimport { getAdjDisplayBalance, getDisplayBalance, getDisplayHealthFactor, getDisplayRate } from 'utils';\nimport { mathHelper } from 'utils/protocol';\nimport { Lend, STELLAR_MIN } from 'yieldblox-js';\nimport { YBX_TOKEN } from 'config/constants';\nimport arrowIcon from 'assets/images/icn_arrow_right.svg';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst AssetNameWrapper = styled(RowItem)`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n`;\n\nconst DetailCard = styled(Card)`\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tpadding: 12px 15px;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-weight: 500;\n\theight: 64px;\n`;\n\ninterface IProps extends IModalProps {\n\tposition: Lend;\n\tpAssetData: PoolAssetData;\n}\n\nexport const WithdrawModal: React.FC = ({ open, position, pAssetData, onClose }) => {\n\tconst { walletAddress, runContract } = useWallet();\n\tconst { prices } = usePrices();\n\tconst { healthFactor } = useUser();\n\n\tconst positionValue = position?.balance ?? '0';\n\tconst positionCollateral = position?.uncollateralizedBalance ?? '0';\n\tconst posUnderlyingValue = parseFloat(positionValue) * pAssetData.yTokenRate;\n\tconst posUncollateralValue = parseFloat(position?.uncollateralizedBalance ?? '0') * pAssetData.yTokenRate;\n\tconst posTotalValue = posUnderlyingValue + posUncollateralValue;\n\n\tconst assetCode = pAssetData.poolAsset.underlyingId.split(':')[0];\n\n\tconst assetPrice = prices[pAssetData.poolAsset.underlyingId];\n\tconst ybxPrice = prices[YBX_TOKEN];\n\tconst tokenYield = mathHelper.CalculateTokenYield(\n\t\tpAssetData.yTokenIssuance,\n\t\tpAssetData.yTokenRate,\n\t\tassetPrice?.rate,\n\t\tybxPrice?.rate ?? 1\n\t);\n\tconst loanToValue = pAssetData.poolAsset.data.loanToValue;\n\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [amount, setAmount] = useState('');\n\tconst [collateralYTokenDelta, setCollateralYTokenDelta] = useState(0);\n\tconst [collateralHealthDelta, setCollateralHealthDelta] = useState(0);\n\n\tconst newHealthFactor = mathHelper.CalculateNewHealthFactor(healthFactor, collateralHealthDelta.toString(), '0');\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tsetAmount('');\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleMax = () => {\n\t\thandleSetAmount(mathHelper.stellarMinTruncate(posTotalValue));\n\t};\n\n\tconst handleSetAmount = (amount: string) => {\n\t\tsetAmount(amount);\n\t\tlet yAmount = parseFloat(amount) / pAssetData.yTokenRate;\n\n\t\tlet withdrawal = yAmount - Number(positionCollateral);\n\t\tif (withdrawal > parseFloat(STELLAR_MIN)) {\n\t\t\tsetCollateralYTokenDelta(withdrawal);\n\t\t\tsetCollateralHealthDelta(\n\t\t\t\twithdrawal * pAssetData.yTokenRate * pAssetData.poolAsset.data.loanToValue * assetPrice.rate * -1\n\t\t\t);\n\t\t} else {\n\t\t\tsetCollateralYTokenDelta(0);\n\t\t\tsetCollateralHealthDelta(0);\n\t\t}\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tconst processTransaction = async () => {\n\t\tif (walletAddress) {\n\t\t\tlet yAmount = parseFloat(amount) / pAssetData.yTokenRate;\n\t\t\tlet withdrawalBLine: Maybe;\n\t\t\tif (collateralYTokenDelta) {\n\t\t\t\twithdrawalBLine = {\n\t\t\t\t\tamount: collateralYTokenDelta.toFixed(7),\n\t\t\t\t\tassetId: position.assetId,\n\t\t\t\t};\n\t\t\t}\n\t\t\tlet burnBalLine: BalanceLine = {\n\t\t\t\tamount: yAmount.toFixed(7),\n\t\t\t\tassetId: position.assetId,\n\t\t\t};\n\t\t\tlet burnEvent = new BurnEvent(walletAddress, POOL_ACCOUNT_1_ID, withdrawalBLine, burnBalLine);\n\t\t\tawait runContract(burnEvent);\n\t\t}\n\t};\n\n\tconst isValid = () => {\n\t\tif (isNaN(Number(amount)) || Number(amount) <= 0) {\n\t\t\treturn false;\n\t\t}\n\t\treturn Number(amount) <= Number(\n\t\t\tmathHelper.stellarMinTruncate(posTotalValue)\n\t\t);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tWithdrawal\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
{assetCode}
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tInterest\n\t\t\t\t\t\t\t\t

Rate

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(pAssetData.lendRate)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Token

\n\t\t\t\t\t\t\t\tYield\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(tokenYield)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tLTV\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(loanToValue)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tCurrent Deposit\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(posTotalValue, assetCode)}\n\t\t\t\t\t\t\t${getAdjDisplayBalance(posTotalValue, assetPrice?.rate)}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\tAmount Collateral\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(posUnderlyingValue, assetCode)}\n\t\t\t\t\t\t\t${getAdjDisplayBalance(posUnderlyingValue, assetPrice?.rate)}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\tAvailable to withdraw\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(posTotalValue, assetCode)}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tWithdrawal Amount\n\t\t\t\t\t\t handleSetAmount(e.target.value)}\n\t\t\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\t\t\tonButtonClick={handleMax}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\tHealth Factor\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{getDisplayHealthFactor(healthFactor?.value)}\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t{getDisplayHealthFactor(newHealthFactor)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setShowConfirm(true)}\n\t\t\t\t\t\tdisabled={!isValid()}\n\t\t\t\t\t\terrorMessage=\"Cannot withdrawal more than total available\"\n\t\t\t\t\t>\n\t\t\t\t\t\tWithdraw\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t\tassetId={pAssetData.poolAsset.underlyingId}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tWithdrawal Amount\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(Number(amount), assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(Number(amount), assetPrice?.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { IModalProps, Modal } from 'components';\n\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport loadingSpinner from 'assets/images/loading_spinner.gif';\nimport { getShortenWalletAddress } from 'utils';\nimport { TxText } from 'types';\n\nconst Content = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\tpadding: 48px;\n`;\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 10px 0;\n`;\n\nconst DetailWrapper = styled.div`\n\theight: 34px;\n\tborder-radius: 17px;\n\tmargin-left: 16px;\n\tpadding: 2px;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\n\timg {\n\t\twidth: 30px;\n\t}\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n`;\n\nconst IconWrapper = styled.div`\n\twidth: 100px;\n\theight: 100px;\n\tborder-radius: 50%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n`;\n\ninterface IProps extends IModalProps {\n\twallet: string;\n\ttxText: TxText;\n}\n\nexport const ConfirmTransactionModal: React.FC = ({ open, txText, wallet, onClose }) => {\n\tlet header = '';\n\tlet footer = '';\n\tswitch (txText) {\n\t\tcase TxText.Token:\n\t\t\theader = 'Please confirm the token sent to your wallet.';\n\t\t\tfooter = 'This is to verify you are the wallet owner, and is NOT a valid transaction.';\n\t\t\tbreak;\n\t\tcase TxText.DepositCollateral:\n\t\t\theader = 'Please confirm the claimable balance creation in your wallet';\n\t\t\tfooter = 'The contract execution will occur after this is submitted.';\n\t\t\tbreak;\n\t\tcase TxText.Contract:\n\t\tcase TxText.Default:\n\t\t\theader = 'Please confirm the transaction in your wallet';\n\t\t\tfooter = '';\n\t\t\tbreak;\n\t}\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{header}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tWallet Name\n\t\t\t\t\t\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t

{getShortenWalletAddress(wallet)}

\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

{footer}

\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/icn_check_circle.73fe1446.svg\";","import React from 'react';\nimport styled from 'styled-components';\nimport { IModalProps, Modal } from 'components';\nimport { GreenText } from 'theme';\n\nimport checkIcon from 'assets/images/icn_check_circle.svg';\nimport { TxText } from 'types';\n\nconst Content = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\tpadding: 48px;\n`;\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 10px 0;\n`;\n\nconst IconWrapper = styled.div`\n\twidth: 100px;\n\theight: 100px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\twidth: 80%;\n\t}\n`;\n\ninterface IProps extends IModalProps {\n\ttxHash: Maybe;\n\ttxText: TxText;\n}\n\nexport const TransactionSuccessModal: React.FC = ({ open, txHash, txText, onClose }) => {\n\tlet successText = '';\n\tswitch (txText) {\n\t\tcase TxText.Token:\n\t\t\tsuccessText = 'Your token was successfully generated!';\n\t\t\tbreak;\n\t\tcase TxText.DepositCollateral:\n\t\tcase TxText.Contract:\n\t\t\tsuccessText = 'Your transaction was successfully submitted!';\n\t\t\tbreak;\n\t}\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{successText}\n\t\t\t\t\n\t\t\t\t{txHash != undefined && (\n\t\t\t\t\t\n\t\t\t\t\t\t

Check out the

 \n\t\t\t\t\t\t window.open(`https://stellar.expert/explorer/testnet/tx/${txHash}`, `${txHash}`)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\ttransaction details\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/icn_sprout_sad.03953a92.svg\";","import React from 'react';\nimport styled from 'styled-components';\nimport { IModalProps, Modal } from 'components';\nimport { GreenText } from 'theme';\n\nimport sadSprout from 'assets/images/icn_sprout_sad.svg';\nimport { TxText } from 'types';\nimport copy from 'copy-to-clipboard';\nimport { toast } from 'react-toastify';\n\nconst Content = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\tpadding: 48px;\n\twidth: 100%;\n`;\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 10px 0;\n`;\n\nconst IconWrapper = styled.div`\n\twidth: 100px;\n\theight: 100px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\twidth: 80%;\n\t}\n`;\n\ninterface IProps extends IModalProps {\n\txdr: Maybe;\n\ttxText: TxText;\n\terror: Maybe;\n\thorizonData: any;\n}\n\nexport const TransactionFailModal: React.FC = ({ open, xdr, txText, error, horizonData, onClose }) => {\n\tconst handleClickXdr = () => {\n\t\tif (xdr) {\n\t\t\tcopy(xdr);\n\t\t\ttoast.success('Copied the Transaction XDR!');\n\t\t}\n\t};\n\n\tlet failText = '';\n\tswitch (txText) {\n\t\tcase TxText.Token:\n\t\t\tfailText = 'Failed to generate your token! Please try again by performing another action.';\n\t\t\tbreak;\n\t\tcase TxText.DepositCollateral:\n\t\tcase TxText.Contract:\n\t\t\tfailText = 'Unable to complete your request.';\n\t\t\tbreak;\n\t}\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\"\"\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\tSomething went wrong!\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t

{failText}

\n\t\t\t\t
\n\t\t\t\t{error != null && (\n\t\t\t\t\t\n\t\t\t\t\t\t

{error}

\n\t\t\t\t\t
\n\t\t\t\t)}\n\t\t\t\t{horizonData != null && (\n\t\t\t\t\t\n\t\t\t\t\t\t{JSON.stringify(horizonData)}\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t{xdr != null && (\n\t\t\t\t\t\n\t\t\t\t\t\tClick to Copy XDR\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t
\n\t\t
\n\t);\n};\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Button, Card, IModalProps, Modal, ModalFooter, ModalHeader, Input } from 'components';\nimport { GreenText } from 'theme';\nimport { getAdjBalance, getAdjDisplayBalance, getDisplayBalance, getDisplayRate, getFormattedNumber } from 'utils';\nimport { ConfirmActionModal } from './ConfirmActionModal';\nimport { usePrices, useUser, useWallet } from 'contexts';\nimport { PoolAssetData, Position, TxText, TxType } from 'types';\nimport { BurnEvent, MintEvent } from 'yieldblox-js';\n\nimport arrowIcon from 'assets/images/icn_arrow_right.svg';\nimport { mathHelper, positionHelper } from 'utils/protocol';\nimport { BalanceLine, Lend, POOL_ACCOUNT_1_ID, BasePosition } from 'yieldblox-js';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n`;\n\nconst DetailCard = styled(Card)`\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tpadding: 12px 15px;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-weight: 500;\n`;\n\nconst HealthCard = styled(DetailCard)`\n\tbox-shadow: 0 7px 13px 0 rgba(0, 0, 0, 0.01);\n\tbackground: linear-gradient(\n\t\t90deg,\n\t\t${({ theme }) => theme.colors.green1} 0%,\n\t\t${({ theme }) => theme.colors.light_grey1} 100%\n\t);\n`;\n\ninterface IProps extends IModalProps {\n\tpAssetData: PoolAssetData;\n\tlend: Maybe;\n}\n\nexport const ManageCollateralModal: React.FC = ({ open, onClose, pAssetData, lend }) => {\n\tconst { walletAddress, runContract, signTransaction, submitTransaction } = useWallet();\n\tconst { healthFactor } = useUser();\n\tconst { prices } = usePrices();\n\n\tconst yBalance = lend ? parseFloat(lend.balance) : 0;\n\tconst yUncollatBalance = lend ? parseFloat(lend.uncollateralizedBalance) : 0;\n\tconst balance = yBalance * pAssetData.yTokenRate;\n\tconst uncollatBalance = yUncollatBalance * pAssetData.yTokenRate;\n\tconst totalValue = balance + uncollatBalance;\n\n\tconst assetCode = pAssetData.poolAsset.underlyingId.split(':')[0];\n\tconst loanToValue = pAssetData.poolAsset.data.loanToValue;\n\n\t// find price\n\tconst pricePair = prices[pAssetData.poolAsset.underlyingId];\n\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [amount, setAmount] = useState(0);\n\tconst [collateralDif, setCollateralDif] = useState(0);\n\tconst [collateralHealthDelta, setCollateralHealthDelta] = useState(0);\n\n\tconst newHealthFactor = mathHelper.CalculateNewHealthFactor(healthFactor, collateralHealthDelta.toString(), '0');\n\n\tuseEffect(() => {\n\t\tsetAmount(balance);\n\t}, [lend]);\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tsetAmount(balance);\n\t\tsetCollateralDif(0);\n\t\tsetCollateralHealthDelta(0);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleSetCollateral = (value: number) => {\n\t\tlet finalCBalance = value > totalValue ? totalValue : value;\n\t\tsetAmount(finalCBalance);\n\t\tsetCollateralDif(value - balance);\n\t\tlet collateralEffect = (finalCBalance - balance) * loanToValue;\n\t\tsetCollateralHealthDelta(getAdjBalance(collateralEffect, pricePair?.rate));\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tconst handleMax = () => {\n\t\thandleSetCollateral(totalValue);\n\t};\n\n\tconst [symbolsArr] = useState(['e', 'E', '+', '-']);\n\n\tconst processTransaction = async () => {\n\t\tif (walletAddress && lend) {\n\t\t\tif (collateralDif > 0) {\n\t\t\t\tlet yAmount = collateralDif / pAssetData.yTokenRate;\n\t\t\t\tlet collateralBalLine: BalanceLine = {\n\t\t\t\t\tassetId: lend.assetId,\n\t\t\t\t\tamount: yAmount.toFixed(7),\n\t\t\t\t};\n\t\t\t\tlet event = new MintEvent(walletAddress, POOL_ACCOUNT_1_ID, [collateralBalLine], undefined, undefined);\n\t\t\t\t// some amount collateralized required a turrert signature\n\t\t\t\tif (balance > 0) {\n\t\t\t\t\tawait runContract(event);\n\t\t\t\t} else {\n\t\t\t\t\tlet collateralXdr = await positionHelper.CreateCollateralFromNone(\n\t\t\t\t\t\twalletAddress,\n\t\t\t\t\t\tlend.assetId,\n\t\t\t\t\t\tyAmount.toFixed(7)\n\t\t\t\t\t);\n\t\t\t\t\tlet signedCollatXdr = await signTransaction(collateralXdr, TxText.Contract);\n\t\t\t\t\tif (signedCollatXdr) {\n\t\t\t\t\t\tawait submitTransaction(signedCollatXdr);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (collateralDif < 0) {\n\t\t\t\tlet yAmount = (-1 * collateralDif) / pAssetData.yTokenRate;\n\t\t\t\tlet withdrawal: BalanceLine = {\n\t\t\t\t\tassetId: lend.assetId,\n\t\t\t\t\tamount: yAmount.toFixed(7),\n\t\t\t\t};\n\t\t\t\tlet event = new BurnEvent(walletAddress, POOL_ACCOUNT_1_ID, withdrawal, undefined);\n\t\t\t\tawait runContract(event);\n\t\t\t}\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tManage Collateral\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Total

\n\t\t\t\t\t\t\t\tDeposit\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{getDisplayBalance(totalValue, assetCode)}

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Deposit

\n\t\t\t\t\t\t\t\tcollateralized\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{getDisplayBalance(balance, assetCode)}

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Health

\n\t\t\t\t\t\t\t\tfactor\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{Number.isFinite(healthFactor.value) ? getFormattedNumber(healthFactor.value) : 'N/A'}\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tCollateral\n\t\t\t\t\t\t

\n\t\t\t\t\t\t\t{getDisplayRate(Number(amount) / totalValue)}% -{' '}\n\t\t\t\t\t\t\t{getDisplayBalance(Number(amount), assetCode)}\n\t\t\t\t\t\t

\n\t\t\t\t\t
\n\n\t\t\t\t\t symbolsArr.includes(evt.key) && evt.preventDefault()}\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tmax={totalValue}\n\t\t\t\t\t\tvalue={Number(amount)}\n\t\t\t\t\t\tstyle={{ width: '100%' }}\n\t\t\t\t\t\tonChange={e => handleSetCollateral(Number(e.target.value))}\n\t\t\t\t\t\tbuttonText=\"100%\"\n\t\t\t\t\t\tonButtonClick={handleMax}\n\t\t\t\t\t/>\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tHealth Factor\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{Number.MAX_SAFE_INTEGER === healthFactor.value ? 'N/A' : healthFactor.value.toFixed(2)}\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t{Number.MAX_SAFE_INTEGER === newHealthFactor ? 'N/A' : newHealthFactor}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tCollateralized Amount\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(Number(amount), assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(Number(amount), pricePair.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\tEffective Collateral\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance((Number(amount) || 0) * loanToValue, assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance((Number(amount) || 0) * loanToValue, pricePair.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { Lend, PoolAsset, MintEvent, BalanceLine, POOL_ACCOUNT_1_ID, STELLAR_MIN } from 'yieldblox-js';\nimport { mathHelper } from 'utils/protocol';\nimport { AssetIcon, Card, IModalProps, Input, Modal, ModalFooter, ModalHeader, Toggle } from 'components';\nimport { GreenText } from 'theme';\nimport { ConfirmActionModal } from './ConfirmActionModal';\nimport { CollateralDeposit, PoolAssetData, TxType } from 'types';\nimport { usePrices, useUser, useWallet, useYieldBlox } from 'contexts';\nimport {\n\tgetAdjBalance,\n\tgetAdjDisplayBalance,\n\tgetDisplayBalance,\n\tgetDisplayHealthFactor,\n\tgetDisplayRate,\n\tgetFormattedNumber,\n} from 'utils';\n\nimport arrowIcon from 'assets/images/icn_arrow_right.svg';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst AssetNameWrapper = styled(RowItem)`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n`;\n\nconst DetailCard = styled(Card)`\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tpadding: 12px 15px;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-weight: 500;\n\theight: 64px;\n`;\n\nconst AssetContainer = styled(Card)`\n\twidth: 100%;\n\tmax-height: 156px;\n\tpadding: 10px;\n\tmargin: 10px 0;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\toverflow: auto;\n`;\n\nconst Flex = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\ninterface IProps extends IModalProps {\n\tpAssetData: PoolAssetData;\n}\n\nexport const BorrowModal: React.FC = ({ open, onClose, pAssetData }) => {\n\tconst { walletAddress, runContract } = useWallet();\n\tconst { getPoolAssetDataFromToken } = useYieldBlox();\n\tconst { prices } = usePrices();\n\tconst { healthFactor, user } = useUser();\n\tconst theme = useTheme();\n\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [allowAdditional, setAllowAdditional] = useState(false);\n\tconst [borrowAmount, setBorrowAmount] = useState('');\n\tconst [liabilityHealthDelta, setLiabilityHealthDelta] = useState(0);\n\n\t// track deposit additional collateral\n\tconst [depositAmounts, setDepositsAmounts] = useState<{\n\t\t[assetId: string]: CollateralDeposit;\n\t}>({});\n\tconst [depositUsdTotal, setDepositUsdTotal] = useState(0);\n\tconst [depositBorrowPowerTotal, setDepositBorrowPowerTotal] = useState(0);\n\tconst [depositBorrowUsdTotal, setDepositBorrowUsdTotal] = useState(0);\n\tconst collateralizablePositions = user.positions?.lent?.filter(l => parseFloat(l.uncollateralizedBalance) > 0) ?? [];\n\n\tconst assetCode = pAssetData.poolAsset.underlyingId.split(':')[0];\n\n\t// find position for asset and user\n\tconst position = user.positions?.getBorrowedPosition(pAssetData.poolAsset.underlyingId);\n\tconst posUnderlying = position ? parseFloat(position.balance) * pAssetData.lTokenRate : 0;\n\n\t// find price\n\tconst pricePair = prices[pAssetData.poolAsset.underlyingId];\n\tconst marketSize = pAssetData.totalUnderlying;\n\tconst tvl = marketSize * pricePair.rate;\n\n\tconst maxBorrowUSD = (parseFloat(healthFactor.borrowLimitUSD) - parseFloat(healthFactor.liabilitiesUSD)) / 1.12;\n\tconst newHealthFactor = mathHelper.CalculateNewHealthFactor(\n\t\thealthFactor,\n\t\tdepositBorrowUsdTotal.toString(),\n\t\tliabilityHealthDelta.toString()\n\t);\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tsetAllowAdditional(false);\n\t\tsetBorrowAmount('');\n\t\tsetLiabilityHealthDelta(0);\n\t\tsetDepositsAmounts({});\n\t\tsetDepositUsdTotal(0);\n\t\tsetDepositBorrowUsdTotal(0);\n\t\tsetDepositBorrowPowerTotal(0);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleSetAllowAdditional = (value: boolean) => {\n\t\tsetAllowAdditional(value);\n\t\tsetDepositsAmounts({});\n\t\tsetDepositUsdTotal(0);\n\t\tsetDepositBorrowUsdTotal(0);\n\t\tsetDepositBorrowPowerTotal(0);\n\t};\n\n\tconst handleSetBorrow = (value: string) => {\n\t\tsetBorrowAmount(value);\n\t\tsetLiabilityHealthDelta(getAdjBalance(Number(value), pricePair?.rate));\n\t};\n\n\tconst handleSetBorrowUsdTotal = (depositBorrowUsd: number) => {\n\t\tlet currentBorrowPower = getAdjBalance(Number(borrowAmount), pricePair?.rate) - depositBorrowUsd;\n\t\tsetLiabilityHealthDelta(currentBorrowPower);\n\t\tsetDepositBorrowUsdTotal(depositBorrowUsd);\n\t};\n\n\tconst handleMaxBorrow = () => {\n\t\thandleSetBorrow(getAdjBalance(maxBorrowUSD + depositBorrowUsdTotal, pricePair?.reverseRate).toString());\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tconst processTransaction = async () => {\n\t\tif (walletAddress) {\n\t\t\tlet collateralizations: BalanceLine[] = [];\n\t\t\tfor (let dAssetId in depositAmounts) {\n\t\t\t\tlet deposit = depositAmounts[dAssetId];\n\t\t\t\tif (deposit.base < Number(STELLAR_MIN)) continue;\n\t\t\t\tlet collateralData = getPoolAssetDataFromToken(dAssetId);\n\t\t\t\tcollateralizations.push({\n\t\t\t\t\tassetId: dAssetId,\n\t\t\t\t\tamount: (deposit.base / collateralData.yTokenRate).toFixed(7),\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet borrowBalLine: BalanceLine = {\n\t\t\t\tassetId: pAssetData.poolAsset.underlyingId,\n\t\t\t\tamount: borrowAmount,\n\t\t\t};\n\t\t\tlet borrowEvent = new MintEvent(walletAddress, POOL_ACCOUNT_1_ID, collateralizations, undefined, borrowBalLine);\n\t\t\tawait runContract(borrowEvent);\n\t\t}\n\t};\n\n\tconst handleDepositWithCollateral = (value: string, valueAssetId: string, ltv: number) => {\n\t\tlet collateralData = getPoolAssetDataFromToken(valueAssetId);\n\t\tlet priceToUsd = prices[collateralData.poolAsset.underlyingId];\n\t\tlet base = Number(value);\n\t\tlet usdVal = base * priceToUsd.rate * collateralData.yTokenRate;\n\t\tlet borrowUsd = usdVal * ltv;\n\t\tlet borrowVal = borrowUsd * pricePair.reverseRate;\n\n\t\tlet deltaUsdTotal = usdVal;\n\t\tlet deltaBorrowUsd = borrowUsd;\n\t\tlet deltaUnderlyingUsed = borrowVal;\n\t\tif (depositAmounts[valueAssetId]) {\n\t\t\t// already exists. Remove old from totals.\n\t\t\tdeltaUsdTotal -= depositAmounts[valueAssetId].usd;\n\t\t\tdeltaBorrowUsd -= depositAmounts[valueAssetId].borrowUsd;\n\t\t\tdeltaUnderlyingUsed -= depositAmounts[valueAssetId].borrowPower;\n\t\t}\n\t\tsetDepositUsdTotal(depositUsdTotal + deltaUsdTotal);\n\t\thandleSetBorrowUsdTotal(depositBorrowUsdTotal + deltaBorrowUsd);\n\t\tsetDepositBorrowPowerTotal(depositBorrowPowerTotal + deltaUnderlyingUsed);\n\t\tsetDepositsAmounts({\n\t\t\t...depositAmounts,\n\t\t\t[valueAssetId]: {\n\t\t\t\tbase: base,\n\t\t\t\tusd: usdVal,\n\t\t\t\tborrowPower: borrowVal,\n\t\t\t\tborrowUsd: borrowUsd,\n\t\t\t},\n\t\t});\n\t};\n\n\tconst isValid = () => {\n\t\tlet maxB = getAdjBalance(maxBorrowUSD + depositBorrowUsdTotal, pricePair?.reverseRate);\n\t\tif (isNaN(Number(borrowAmount)) || Number(borrowAmount) <= 0) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (Number(maxB) ?? 0) >= Number(borrowAmount);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tBorrow\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
{assetCode}
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tMarket\n\t\t\t\t\t\t\t\t

Size

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{getDisplayBalance(tvl, '')}

\n\t\t\t\t\t\t\t\t

{assetCode}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tLiquidity\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{getDisplayBalance(pAssetData.poolBalance, '')}

\n\t\t\t\t\t\t\t\t

{assetCode}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tInterest\n\t\t\t\t\t\t\t\t

Rate

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(pAssetData.lTokenRate)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tLTV\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(pAssetData.poolAsset.data.loanToValue)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tCurrent Borrow\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(posUnderlying, assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(posUnderlying, pricePair?.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\tMaximum Borrow\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{getAdjDisplayBalance(maxBorrowUSD + depositBorrowUsdTotal, pricePair?.reverseRate)} {assetCode}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tAmount to borrow\n\t\t\t\t\t\t handleSetBorrow(e.target.value)}\n\t\t\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\t\t\tonButtonClick={handleMaxBorrow}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\tDeposit Additional collateral\n\t\t\t\t\t\t handleSetAllowAdditional(value === 0 ? false : true)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t{allowAdditional && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{collateralizablePositions.map((item, idx) => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tAdditional Borrow Power\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{getDisplayBalance(depositBorrowPowerTotal, assetCode)}\n\t\t\t\t\t\t\t\t\t

${getAdjDisplayBalance(depositBorrowPowerTotal, pricePair?.rate)}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tTotal Collateral Deposit\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t{getAdjDisplayBalance(depositUsdTotal, pricePair?.reverseRate)} {assetCode}\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t

${getFormattedNumber(depositUsdTotal)}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tHealth Factor\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{getDisplayHealthFactor(healthFactor.value)}\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t{getDisplayHealthFactor(newHealthFactor)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setShowConfirm(true)}\n\t\t\t\t\t\tdisabled={!isValid()}\n\t\t\t\t\t\terrorMessage=\"Cannot borrow more than your max\"\n\t\t\t\t\t>\n\t\t\t\t\t\tBorrow\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tBorrow Amount\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(Number(borrowAmount), assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(Number(borrowAmount), pricePair?.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t{allowAdditional && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCollateral Added\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tBorrow Limit\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{Object.keys(depositAmounts).map((key, idx) => {\n\t\t\t\t\t\t\t\t\t\tconst deposit = depositAmounts[key];\n\t\t\t\t\t\t\t\t\t\tconst itemAssetCode = key.split(':')[0].substring(3);\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t

{itemAssetCode}

\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t

{getDisplayBalance(deposit.base, itemAssetCode)}

\n\t\t\t\t\t\t\t\t\t\t\t\t\t

${getFormattedNumber(deposit.borrowUsd)}

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n\ninterface IAssetItem {\n\titem: Lend;\n\tonChange: (value: string, valueAssetId: string, ltv: number) => void;\n}\n\n// TODO: use yTokens for accuracy ??\nconst AssetItem = ({ item, onChange }: IAssetItem) => {\n\tconst { getPoolAssetDataFromToken } = useYieldBlox();\n\tconst theme = useTheme();\n\n\tconst pAssetData = getPoolAssetDataFromToken(item.assetId);\n\tconst assetCode = pAssetData.poolAsset.underlyingId.split(':')[0];\n\tconst ltv = pAssetData.poolAsset.data.loanToValue;\n\n\tconst uncollatUnderlying = parseFloat(item.uncollateralizedBalance) * pAssetData.yTokenRate;\n\n\tconst [amount, setAmount] = useState('');\n\n\tconst handleChange = (value: string) => {\n\t\tsetAmount(value);\n\t\tonChange(value, item.assetId, ltv);\n\t};\n\n\tconst handleMax = () => {\n\t\tsetAmount(uncollatUnderlying.toString());\n\t\tonChange(uncollatUnderlying.toString().toString(), item.assetId, ltv);\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{assetCode} ({getDisplayRate(ltv)}%)\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t handleChange(e.target.value)}\n\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\tonButtonClick={handleMax}\n\t\t\t\t/>\n\t\t\t\t{getDisplayBalance(uncollatUnderlying, assetCode)}\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { AssetIcon, Button, Card, IModalProps, Input, Modal, ModalFooter, ModalHeader, Toggle } from 'components';\nimport { GreenText } from 'theme';\nimport { ConfirmActionModal } from './ConfirmActionModal';\nimport { CollateralRepayment, PoolAssetData, TxType } from 'types';\nimport { usePrices, useUser, useWallet, useYieldBlox } from 'contexts';\nimport {\n\tgetAdjBalance,\n\tgetAdjDisplayBalance,\n\tgetDisplayBalance,\n\tgetDisplayHealthFactor,\n\tgetDisplayRate,\n\tgetFormattedNumber,\n} from 'utils';\n\nimport arrowIcon from 'assets/images/icn_arrow_right.svg';\nimport { mathHelper } from 'utils/protocol';\nimport BigNumber from 'bignumber.js';\nimport { stellarHelper } from 'utils/stellar';\nimport { BalanceLine, Borrow, Lend, POOL_ACCOUNT_1_ID, YBX_TOKEN, RepayEvent, PaymentPath } from 'yieldblox-js';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst AssetNameWrapper = styled(RowItem)`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n`;\n\nconst DetailCard = styled(Card)`\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tpadding: 12px 15px;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-weight: 500;\n\theight: 64px;\n`;\n\nconst AssetContainer = styled(Card)`\n\twidth: 100%;\n\tmax-height: 156px;\n\tpadding: 10px;\n\tmargin: 10px 0;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\toverflow: auto;\n`;\n\nconst Flex = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\ninterface IProps extends IModalProps {\n\tposition: Borrow;\n\tpAssetData: PoolAssetData;\n}\n\nexport const RepayModal: React.FC = ({ open, onClose, position, pAssetData }) => {\n\tconst { walletAddress, runContract } = useWallet();\n\tconst { getPoolAssetDataFromUnderlying } = useYieldBlox();\n\tconst { prices } = usePrices();\n\tconst { healthFactor, user } = useUser();\n\n\tconst [loadingPaths, setLoadingPaths] = useState(false);\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [repayCollateral, setRepayCollateral] = useState(false);\n\tconst [liabilityFullDisplay, setLiabilityFullDisplay] = useState(false);\n\tconst [repayAmount, setRepayAmount] = useState('');\n\tconst [liabilityHealthDelta, setLiabilityHealthDelta] = useState(0);\n\tconst [collateralHealthDelta, setCollateralHealthDelta] = useState(0);\n\tconst [acceptableSlippage, setAcceptableSlippage] = useState('2.0');\n\tconst [collatWithdrawals, setCollatWithdrawals] = useState<{\n\t\t[assetId: string]: CollateralRepayment;\n\t}>({});\n\tconst [repaymentTotal, setRepaymentTotal] = useState(0);\n\n\tconst assetId = pAssetData.poolAsset.underlyingId;\n\tconst assetCode = assetId.split(':')[0];\n\n\tconst balance = position ? parseFloat(position.balance) * pAssetData.lTokenRate : 0;\n\tconst walletBalance = parseFloat(user.getBalance(assetId) ?? '0');\n\n\tconst collateralizedPositions = user.positions?.lent?.filter(l => parseFloat(l.balance) > 0) ?? [];\n\n\t// find price\n\tconst pricePair = prices[assetId];\n\tconst ybxPrice = prices[YBX_TOKEN];\n\tconst tokenYield = mathHelper.CalculateTokenYield(\n\t\tpAssetData.yTokenIssuance,\n\t\tpAssetData.yTokenRate,\n\t\tpricePair?.rate,\n\t\tybxPrice?.rate ?? 1\n\t);\n\n\tconst newHealthFactor = mathHelper.CalculateNewHealthFactor(\n\t\thealthFactor,\n\t\tcollateralHealthDelta.toString(),\n\t\tliabilityHealthDelta.toString()\n\t);\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tsetRepayCollateral(false);\n\t\tsetRepayAmount('');\n\t\tsetLiabilityHealthDelta(0);\n\t\tsetAcceptableSlippage('2.0');\n\t\tsetCollatWithdrawals({});\n\t\tsetLiabilityHealthDelta(0);\n\t\tsetCollateralHealthDelta(0);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tconst handleSetRepayAmount = (value: string) => {\n\t\tsetRepayAmount(value);\n\t\thandleSetRepaymentTotal(Number(value));\n\t};\n\n\tconst handleSetRepaymentTotal = (value: number) => {\n\t\tsetRepaymentTotal(value);\n\t\tlet maxLiabilityReduction = Math.min(value, balance);\n\t\tsetLiabilityHealthDelta(-1 * getAdjBalance(maxLiabilityReduction, pricePair?.rate));\n\t};\n\n\tconst handleSetAcceptableSlippage = (value: string) => {\n\t\tlet oldSlippage = Number(acceptableSlippage) / 100;\n\t\tlet newSlippage = Number(value) / 100;\n\t\tsetAcceptableSlippage(value);\n\t\tlet newTotalRepayment = 0;\n\t\tfor (let wAssetId in collatWithdrawals) {\n\t\t\tlet oldUnderlying = collatWithdrawals[wAssetId].underlying;\n\t\t\tlet newUnderlying = (oldUnderlying * (1.001 + oldSlippage)) / (1.001 + newSlippage);\n\t\t\tcollatWithdrawals[wAssetId].underlying = newUnderlying;\n\t\t\tnewTotalRepayment += newUnderlying;\n\t\t}\n\t\thandleSetRepaymentTotal(newTotalRepayment);\n\t};\n\n\tconst handleMaxRepay = () => {\n\t\tlet maxRepayAmount = Math.min(balance, walletBalance);\n\t\thandleSetRepayAmount(mathHelper.stellarMinTruncate(maxRepayAmount));\n\t};\n\n\tconst handleToggleRepayType = (value: boolean) => {\n\t\tif (value) {\n\t\t\t// changing back from collateral\n\t\t\tsetCollatWithdrawals({});\n\t\t\tsetCollateralHealthDelta(0);\n\t\t\tsetLiabilityHealthDelta(0);\n\t\t\thandleSetRepaymentTotal(0);\n\t\t\tsetRepayCollateral(value);\n\t\t} else {\n\t\t\t// changing to collateral\n\t\t\thandleSetRepayAmount('0');\n\t\t\tsetCollatWithdrawals({});\n\t\t\tsetCollateralHealthDelta(0);\n\t\t\tsetLiabilityHealthDelta(0);\n\t\t\thandleSetRepaymentTotal(0);\n\t\t\tsetRepayCollateral(value);\n\t\t}\n\t};\n\n\t// return a number so the asset component knows the final amount computed\n\tconst handleMaxRepayFromCollateral = async (\n\t\tcollateralBalance: number,\n\t\tvalueAssetId: string\n\t): Promise> => {\n\t\ttry {\n\t\t\tif (!loadingPaths) {\n\t\t\t\tsetLoadingPaths(true);\n\t\t\t\tlet repaymentWithoutAsset = repaymentTotal;\n\t\t\t\tif (collatWithdrawals[valueAssetId]) {\n\t\t\t\t\trepaymentWithoutAsset -= collatWithdrawals[valueAssetId].underlying;\n\t\t\t\t}\n\t\t\t\tlet leftToRepayUnderlying = balance - repaymentWithoutAsset;\n\t\t\t\tif (leftToRepayUnderlying <= 0) {\n\t\t\t\t\treturn undefined; // don't do anything in this event\n\t\t\t\t}\n\n\t\t\t\tlet requiredCollateral = leftToRepayUnderlying;\n\t\t\t\tlet base;\n\t\t\t\tlet underlyingVal;\n\t\t\t\tlet path: string[] = [];\n\t\t\t\tif (assetId !== valueAssetId) {\n\t\t\t\t\t// price is\n\t\t\t\t\tlet priceQuote = await stellarHelper.GetReceiveMarketQuoteAsync(valueAssetId, assetId, leftToRepayUnderlying);\n\t\t\t\t\tlet value = priceQuote.value;\n\t\t\t\t\tvalue = value * (1 - Number(acceptableSlippage) / 100);\n\t\t\t\t\trequiredCollateral = (leftToRepayUnderlying / value) * 1.002;\n\t\t\t\t\tbase = Math.min(requiredCollateral, collateralBalance);\n\t\t\t\t\tunderlyingVal = base * value * 1.001;\n\t\t\t\t\tpath = priceQuote.path;\n\t\t\t\t} else {\n\t\t\t\t\tunderlyingVal = Math.min(requiredCollateral, collateralBalance);\n\t\t\t\t\tbase = underlyingVal;\n\t\t\t\t}\n\t\t\t\tupdateRepayFromCollateral(base, valueAssetId, underlyingVal, path);\n\t\t\t\tsetLoadingPaths(false);\n\t\t\t\treturn base;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tsetLoadingPaths(false);\n\t\t}\n\t};\n\n\tconst handleRepayFromCollateral = async (value: string, valueAssetId: string) => {\n\t\ttry {\n\t\t\tif (!loadingPaths) {\n\t\t\t\tsetLoadingPaths(true);\n\t\t\t\tlet base = Number(value);\n\t\t\t\tlet underlyingVal;\n\t\t\t\tlet path: string[] = [];\n\t\t\t\tif (assetId === valueAssetId || base === 0) {\n\t\t\t\t\tunderlyingVal = base;\n\t\t\t\t} else {\n\t\t\t\t\tlet priceQuote = await stellarHelper.GetSendMarketQuoteAsync(valueAssetId, assetId, base);\n\t\t\t\t\tunderlyingVal = (base * priceQuote.value) / (1.001 + Number(acceptableSlippage) / 100);\n\t\t\t\t\tpath = priceQuote.path;\n\t\t\t\t}\n\t\t\t\tupdateRepayFromCollateral(base, valueAssetId, underlyingVal, path);\n\t\t\t\tsetLoadingPaths(false);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(e);\n\t\t\tsetLoadingPaths(false);\n\t\t}\n\t};\n\n\tconst updateRepayFromCollateral = (base: number, baseAssetId: string, underlyingVal: number, path: string[]) => {\n\t\tlet priceToUsd = prices[baseAssetId];\n\t\tlet baseAssetData = getPoolAssetDataFromUnderlying(baseAssetId);\n\t\tlet usdVal = base * priceToUsd.rate;\n\t\tlet deltaUsdTotal = usdVal;\n\t\tlet deltaUnderlyingTotal = underlyingVal;\n\t\tif (collatWithdrawals[baseAssetId]) {\n\t\t\t// already exists. Remove old from totals.\n\t\t\tdeltaUsdTotal -= collatWithdrawals[baseAssetId].usd;\n\t\t\tdeltaUnderlyingTotal -= collatWithdrawals[baseAssetId].underlying;\n\t\t}\n\t\t// reduce the HF by the amount repaid\n\t\tsetCollateralHealthDelta(collateralHealthDelta + -1 * deltaUsdTotal * baseAssetData.poolAsset.data.loanToValue);\n\t\thandleSetRepaymentTotal(repaymentTotal + deltaUnderlyingTotal);\n\t\tsetCollatWithdrawals({\n\t\t\t...collatWithdrawals,\n\t\t\t[baseAssetId]: {\n\t\t\t\tbase: base,\n\t\t\t\tusd: usdVal,\n\t\t\t\tunderlying: underlyingVal,\n\t\t\t\tpath: path,\n\t\t\t},\n\t\t});\n\t};\n\n\tconst processTransaction = async () => {\n\t\tif (walletAddress) {\n\t\t\tlet withdrawals: PaymentPath[] = [];\n\t\t\tfor (let wAssetId in collatWithdrawals) {\n\t\t\t\tlet withdrawal = collatWithdrawals[wAssetId];\n\t\t\t\tif (withdrawal) {\n\t\t\t\t\twithdrawals.push({\n\t\t\t\t\t\tsendAssetId: wAssetId,\n\t\t\t\t\t\tsendAmount: new BigNumber(withdrawal.base.toString()).toFixed(7, BigNumber.ROUND_UP),\n\t\t\t\t\t\tdestAssetId: pAssetData.poolAsset.underlyingId,\n\t\t\t\t\t\tdestAmount: new BigNumber(withdrawal.underlying.toString()).toFixed(7, BigNumber.ROUND_UP),\n\t\t\t\t\t\tpath: withdrawal.path,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet repayAmount = new BigNumber(Math.min(repaymentTotal, balance).toString()).dividedBy(\n\t\t\t\tpAssetData.lTokenRate.toString()\n\t\t\t);\n\t\t\tlet repaymentBalLine: BalanceLine = {\n\t\t\t\tassetId: pAssetData.poolAsset.liabilityTokenId,\n\t\t\t\tamount: repayAmount.toFixed(7, BigNumber.ROUND_DOWN),\n\t\t\t};\n\t\t\tlet repayEvent = new RepayEvent(walletAddress, repaymentBalLine, POOL_ACCOUNT_1_ID, withdrawals);\n\t\t\tawait runContract(repayEvent);\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tRepayment\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
{assetCode}
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Token

\n\t\t\t\t\t\t\t\tYield\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t{getDisplayRate(tokenYield)}\n\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t

setLiabilityFullDisplay(!liabilityFullDisplay)}>Total Liabilities

\n\t\t\t\t\t\t

{getDisplayBalance(balance, assetCode, liabilityFullDisplay)}

\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\tRepay With Collateral\n\t\t\t\t\t\t handleToggleRepayType(value === 0 ? false : true)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t{repayCollateral ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{collateralizedPositions.map((item, idx) => {\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tMaximum slippage (%)\n\t\t\t\t\t\t\t\t handleSetAcceptableSlippage(e.target.value)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tTotal Repayment\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{getDisplayBalance(repaymentTotal, assetCode)}\n\t\t\t\t\t\t\t\t\t

${getAdjDisplayBalance(repaymentTotal, pricePair?.rate)}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tExcess Withdrawal\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t${getFormattedNumber(Math.max(-1 * getAdjBalance(balance - repaymentTotal, pricePair?.rate), 0))}\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t

Available to Repay

\n\t\t\t\t\t\t\t\t

{getDisplayBalance(walletBalance, assetCode)}

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tRepay Amount\n\t\t\t\t\t\t\t\t handleSetRepayAmount(e.target.value)}\n\t\t\t\t\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\t\t\t\t\tonButtonClick={handleMaxRepay}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tRemaining Borrow Balance\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(Math.max(balance - repaymentTotal, 0), assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(Math.max(balance - repaymentTotal, 0), pricePair?.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\tHealth Factor\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{getDisplayHealthFactor(healthFactor?.value)}\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t{getDisplayHealthFactor(newHealthFactor)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tRepay Amount\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(Math.min(repaymentTotal, balance), assetCode)}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(Math.min(repaymentTotal, balance), pricePair?.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t{repayCollateral ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{Object.keys(collatWithdrawals).map((key, idx) => {\n\t\t\t\t\t\t\t\t\t\tconst deposit = collatWithdrawals[key];\n\t\t\t\t\t\t\t\t\t\tconst itemAssetCode = key.split(':')[0];\n\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\t{getDisplayBalance(deposit.base, itemAssetCode)}\n\t\t\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t

{getDisplayBalance(deposit.underlying, assetCode)}

\n\t\t\t\t\t\t\t\t\t\t\t\t\t

${getFormattedNumber(deposit.usd)}

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tExcess Withdrawal\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t${getFormattedNumber(Math.max(-1 * getAdjBalance(balance - repaymentTotal, pricePair?.rate), 0))}\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

{getDisplayBalance(Number(repayAmount), assetCode)}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

{getDisplayBalance(Number(repayAmount), assetCode)}

\n\t\t\t\t\t\t\t\t

${getAdjDisplayBalance(Number(repayAmount), pricePair?.rate)}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n\ninterface IAssetItem {\n\titem: Lend;\n\tcollateralWithdrawals: Record;\n\tonMax: (collateralBalance: number, assetId: string) => Promise>;\n\tonChange: (value: string, assetId: string) => void;\n}\n\nconst AssetItem = ({ item, collateralWithdrawals, onMax, onChange }: IAssetItem) => {\n\tconst { getPoolAssetDataFromToken } = useYieldBlox();\n\n\tconst lendAssetData = getPoolAssetDataFromToken(item.assetId);\n\tconst assetId = lendAssetData.poolAsset.underlyingId;\n\tconst assetCode = assetId.split(':')[0];\n\n\tconst collateralBalance = parseFloat(item.balance) * lendAssetData.yTokenRate;\n\n\tconst [amount, setAmount] = useState('');\n\n\tuseEffect(() => {\n\t\tconst collatWithdrawal = collateralWithdrawals[assetId];\n\t\tif (collatWithdrawal !== undefined && collatWithdrawal.base !== Number(amount)) {\n\t\t\tonChange(amount, assetId);\n\t\t}\n\t}, [collateralWithdrawals]);\n\n\tconst handleChange = (value: string) => {\n\t\tsetAmount(value);\n\t\tonChange(value, assetId);\n\t};\n\n\tconst handleMax = async () => {\n\t\tlet maxValue = await onMax(collateralBalance, assetId);\n\t\tif (maxValue) {\n\t\t\tsetAmount(String(maxValue));\n\t\t} else {\n\t\t\tsetAmount('0.0');\n\t\t}\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{assetCode} ({getDisplayRate(lendAssetData.poolAsset.data.loanToValue)}%)\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t handleChange(e.target.value)}\n\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\tonButtonClick={handleMax}\n\t\t\t\t/>\n\t\t\t\t{getDisplayBalance(collateralBalance, assetCode)}\n\t\t\t\n\t\t\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/icn_escrow1.255029ce.svg\";","export default __webpack_public_path__ + \"static/media/icn_escrow2.2408f198.svg\";","export default __webpack_public_path__ + \"static/media/icn_escrow3.0e2f1710.svg\";","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { EscrowLockEvent, EscrowUnlockEvent, ProtocolEvent, EscrowUnlock } from 'yieldblox-js';\nimport { Button, Card, ConfirmActionModal, IModalProps, Modal, ModalFooter, ModalHeader, Toggle } from 'components';\nimport { GreenText, PurpleText } from 'theme';\nimport { Input } from 'components/common';\nimport { usePrices, useUser, useWallet, useYieldBlox } from 'contexts';\nimport { getDisplayBalance, getDisplayRate, getTimeDifference, getDisplayHealthFactor } from 'utils';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\n\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport ybxIcon1 from 'assets/images/icn_ybx1.svg';\nimport escrowIcon1 from 'assets/images/icn_escrow1.svg';\nimport escrowIcon2 from 'assets/images/icn_escrow2.svg';\nimport escrowIcon3 from 'assets/images/icn_escrow3.svg';\nimport warningIcon from 'assets/images/icn_warning.png';\nimport arrowIcon from 'assets/images/icn_arrow_right.svg';\nimport { VEYBX_TOKEN, YBX_TOKEN } from 'config/constants';\nimport { Escrow } from 'yieldblox-js';\nimport BigNumber from 'bignumber.js';\nimport { mathHelper } from 'utils/protocol';\nimport { UnlockEscrow } from 'types';\n\nconst Content = styled.div`\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 16px 36px;\n`;\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst AssetContainer = styled(Card)`\n\twidth: 100%;\n\tmax-height: 286px;\n\tpadding: 10px;\n\tmargin: 10px 0;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\toverflow: auto;\n`;\n\nconst DetailWrapper = styled.div`\n\tmin-width: 60%;\n\theight: 34px;\n\tborder-radius: 17px;\n\tpadding: 2px;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-left: 10px;\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n`;\n\nconst IconWrapper = styled.div<{ color: string }>`\n\twidth: 30px;\n\theight: 30px;\n\tmin-width: 30px;\n\tborder-radius: 50%;\n\tborder: 3px solid ${({ color }) => color};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\tcolor: ${({ color }) => color};\n\t\twidth: 100%;\n\t}\n`;\n\nconst Flex = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\nconst Stack = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\nconst ButtonWrapper = styled(Flex)`\n\tflex-direction: column;\n\twidth: 122px;\n`;\n\nconst APRButton = styled(Button)<{ selected?: boolean }>`\n\twidth: 100%;\n\theight: 141px;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tborder-radius: 18px;\n\tpadding: 0;\n\n\t${({ selected, theme }) =>\n\t\tselected &&\n\t\t`\n\t\t\tbackground: rgba(109, 111, 255, 0.15);\n\t\t\tborder: 5px solid ${theme.colors.purple};\n\t`}\n\n\timg {\n\t\theight: 59px;\n\t\tmargin-top: 5px;\n\t}\n`;\n\ninterface IProps extends IModalProps {}\n\nexport const EscrowModal: React.FC = ({ open, onClose }) => {\n\tconst theme = useTheme();\n\tconst { walletAddress, runContract } = useWallet();\n\tconst { prices } = usePrices();\n\tconst { poolAssets, ybxAsset } = useYieldBlox();\n\tconst { user, healthFactor, escrowedYbx } = useUser();\n\n\tconst [status, setStatus] = useState(0);\n\tconst [type, setType] = useState(0);\n\tconst [escrowAmount, setEscrowAmount] = useState('');\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [unlockedEscrows, setUnlockedEscrows] = useState([]);\n\tconst [ybxUnlocked, setYbxUnlocked] = useState(0);\n\tconst [ybxUnlockedEarly, setYbxUnlockedEarly] = useState(0);\n\tconst [veYbxBurnt, setVeYbxBurnt] = useState(0);\n\tconst [veYbxLost, setVeYbxLost] = useState(0);\n\tconst [collateralHealthDelta, setCollateralHealthDelta] = useState(0);\n\tconst [collatEscrow, setCollatEscrow] = useState(true);\n\n\tconst ybxPrice = prices[YBX_TOKEN];\n\tconst ybxBalance = parseFloat(user.getBalance(YBX_TOKEN) || '0');\n\tconst veYbx = parseFloat(user.getBalance(VEYBX_TOKEN) || '0');\n\tconst escrows = user.positions?.escrowed ?? [];\n\tconst orderedEscrows = escrows.sort((a, b) => (a.unlockTime.getTime() > b.unlockTime.getTime() ? 1 : -1));\n\n\tconst newHealthFactor = mathHelper.CalculateNewHealthFactor(healthFactor, collateralHealthDelta.toString(), '0');\n\n\tconst lockPools = [\n\t\t{\n\t\t\tmultiple: 1,\n\t\t\tlockPeriod: 0.25,\n\t\t\tlockDescription: '3 month lock',\n\t\t\ticon: escrowIcon1,\n\t\t},\n\t\t{\n\t\t\tmultiple: 1.5,\n\t\t\tlockPeriod: 0.5,\n\t\t\tlockDescription: '6 month lock',\n\t\t\ticon: escrowIcon2,\n\t\t},\n\t\t{\n\t\t\tmultiple: 4,\n\t\t\tlockPeriod: 1,\n\t\t\tlockDescription: '1 year lock',\n\t\t\ticon: escrowIcon3,\n\t\t},\n\t];\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tsetCollatEscrow(true);\n\t\tsetStatus(0);\n\t\tsetType(0);\n\t\tsetEscrowAmount('');\n\t\tsetYbxUnlocked(0);\n\t\tsetYbxUnlockedEarly(0);\n\t\tsetVeYbxBurnt(0);\n\t\tsetVeYbxLost(0);\n\t\tsetUnlockedEscrows([]);\n\t\tsetCollateralHealthDelta(0);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleToggle = (status: number) => {\n\t\tsetCollatEscrow(true);\n\t\tsetType(0);\n\t\tsetEscrowAmount('');\n\t\tsetYbxUnlocked(0);\n\t\tsetYbxUnlockedEarly(0);\n\t\tsetVeYbxBurnt(0);\n\t\tsetVeYbxLost(0);\n\t\tsetUnlockedEscrows([]);\n\t\tsetCollateralHealthDelta(0);\n\t\tsetStatus(status);\n\t};\n\n\tconst handleUnlock = (unlockEscrow: UnlockEscrow) => {\n\t\tlet newUnlockedEscrows = [...unlockedEscrows];\n\t\tlet matchIndex = newUnlockedEscrows.findIndex(ue => ue.balanceId === unlockEscrow.balanceId);\n\t\tif (Number(unlockEscrow.amount) === 0 && matchIndex !== -1) {\n\t\t\t// remove unlock if it exists\n\t\t\tnewUnlockedEscrows.splice(matchIndex, 1);\n\t\t} else {\n\t\t\t// add unlock\n\t\t\tif (matchIndex !== -1) {\n\t\t\t\tnewUnlockedEscrows[matchIndex] = unlockEscrow;\n\t\t\t} else {\n\t\t\t\tnewUnlockedEscrows.push(unlockEscrow);\n\t\t\t}\n\t\t}\n\n\t\tlet newYbxUnlocked = 0;\n\t\tlet newYbxUnlockedEarly = 0;\n\t\tlet newVeYbxBurnt = 0;\n\t\tlet newVeYbxLost = 0;\n\t\tlet newLostCollateral = 0;\n\t\tnewUnlockedEscrows.forEach(e => {\n\t\t\tlet amount = parseFloat(e.amount);\n\t\t\tif (e.isEarly) {\n\t\t\t\tnewVeYbxLost += e.veYbx;\n\t\t\t\tnewYbxUnlockedEarly += amount;\n\t\t\t} else {\n\t\t\t\tnewVeYbxBurnt += e.veYbx;\n\t\t\t\tnewYbxUnlocked += amount;\n\t\t\t}\n\n\t\t\tif (e.isCollateral) newLostCollateral += amount;\n\t\t});\n\t\tsetUnlockedEscrows(newUnlockedEscrows);\n\t\tsetYbxUnlocked(newYbxUnlocked);\n\t\tsetYbxUnlockedEarly(newYbxUnlockedEarly);\n\t\tsetVeYbxBurnt(newVeYbxBurnt);\n\t\tsetVeYbxLost(newVeYbxLost);\n\t\t// ybx is removed\n\t\tlet newCollateralHealthDelta = -1 * newLostCollateral * ybxPrice.rate * ybxAsset.data.loanToValue;\n\t\tsetCollateralHealthDelta(newCollateralHealthDelta);\n\t};\n\n\tconst handleSetEscrow = (escrowAmount: string) => {\n\t\tsetEscrowAmount(escrowAmount);\n\t\t// ybx added\n\t\tif (collatEscrow) {\n\t\t\tlet healthDelta = parseFloat(escrowAmount) * ybxPrice.rate * ybxAsset.data.loanToValue;\n\t\t\tsetCollateralHealthDelta(healthDelta);\n\t\t}\n\t};\n\n\tconst handleSetCollatEscrow = (asCollat: boolean) => {\n\t\tif (asCollat) {\n\t\t\tlet healthDelta = parseFloat(escrowAmount) * ybxPrice.rate * ybxAsset.data.loanToValue;\n\t\t\tsetCollateralHealthDelta(healthDelta);\n\t\t} else {\n\t\t\tsetCollateralHealthDelta(0);\n\t\t}\n\t\tsetCollatEscrow(asCollat);\n\t};\n\n\tconst handleMaxClick = () => {\n\t\tif (status === 0) {\n\t\t\tsetEscrowAmount(mathHelper.stellarMinTruncate(ybxBalance));\n\t\t} else {\n\t\t\thandleSetEscrow('0');\n\t\t}\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tconst processTransaction = async () => {\n\t\tlet escrowEvent: Maybe = undefined;\n\t\tif (walletAddress && status === 1 && unlockedEscrows.length > 0) {\n\t\t\tlet unlockedEarly = unlockedEscrows\n\t\t\t\t.filter(e => e.isEarly)\n\t\t\t\t.map(\n\t\t\t\t\t(e): EscrowUnlock => {\n\t\t\t\t\t\treturn { id: e.balanceId, amount: e.amount };\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\tlet unlocked = unlockedEscrows\n\t\t\t\t.filter(e => !e.isEarly)\n\t\t\t\t.map(\n\t\t\t\t\t(e): EscrowUnlock => {\n\t\t\t\t\t\treturn { id: e.balanceId, amount: e.amount };\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\tescrowEvent = new EscrowUnlockEvent(walletAddress, unlockedEarly, unlocked);\n\t\t} else if (walletAddress && status === 0) {\n\t\t\tescrowEvent = new EscrowLockEvent(walletAddress, escrowAmount, collatEscrow, lockPools[type].lockPeriod * 12);\n\t\t}\n\n\t\tif (escrowEvent) {\n\t\t\tawait runContract(escrowEvent);\n\t\t}\n\t};\n\n\tconst isValid = () => {\n\t\tif (status === 1) {\n\t\t\treturn unlockedEscrows.length > 0;\n\t\t} else if (status === 0) {\n\t\t\tif (isNaN(Number(escrowAmount)) || Number(escrowAmount) <= 0) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn ybxBalance >= Number(escrowAmount);\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tLock your YBX for veYBX\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t handleToggle(value)}\n\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{getDisplayBalance(veYbx, '')}\n\t\t\t\t\t\t\t\t
veYBX
\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{getDisplayBalance(ybxBalance, '')}\n\t\t\t\t\t\t\t\t
YBX
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t{status === 1 && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{status === 1 &&\n\t\t\t\t\t\t\t\t\torderedEscrows.map((item, idx) => )}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
YBX unlocked
\n\t\t\t\t\t\t\t\t
{getDisplayBalance(ybxUnlockedEarly * 0.9 + ybxUnlocked, 'YBX')}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
Fees earned
\n\t\t\t\t\t\t\t\t
{getDisplayBalance(veYbxBurnt, 'YBX')}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
YBX to receive
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{getDisplayBalance(ybxUnlockedEarly * 0.9 + ybxUnlocked + veYbxBurnt, '')} YBX\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\n\t\t\t\t\t{status === 0 && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t handleSetEscrow(e.target.value)}\n\t\t\t\t\t\t\t\t\tonButtonClick={handleMaxClick}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tSelect your lock-up period:\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{lockPools.map((pool, idx) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t setType(idx)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{pool.multiple.toFixed(1)}x veYBX\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t{pool.lockDescription}\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\t\t
You receive
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t{getDisplayBalance(\n\t\t\t\t\t\t\t\t\t\t\t\tNumber.isFinite(Number(escrowAmount)) ? Number(escrowAmount) * pool.multiple : 69,\n\t\t\t\t\t\t\t\t\t\t\t\t''\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tveYBX\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tLock as collateral?\n\t\t\t\t\t\t\t\t handleSetCollatEscrow(value === 0 ? false : true)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: 60,\n\t\t\t\t\t\t\t\t\t\theight: 30,\n\t\t\t\t\t\t\t\t\t\tbackground: `${collatEscrow ? '' : theme.colors.light_grey}`,\n\t\t\t\t\t\t\t\t\t\topacity: `${collatEscrow ? '1' : '0.3'}`,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tHealth Factor\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{getDisplayHealthFactor(healthFactor.value)}\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t{getDisplayHealthFactor(newHealthFactor)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setShowConfirm(true)}\n\t\t\t\t\t\tdisabled={!isValid()}\n\t\t\t\t\t\terrorMessage={\n\t\t\t\t\t\t\tstatus === 0\n\t\t\t\t\t\t\t\t? 'Escrow amount must be greater than zero and less than or equal to your YBX balance.'\n\t\t\t\t\t\t\t\t: 'Unescrow amount must be greater than zero and less than or equal to your sYBX balance.'\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstyle={{ background: theme.colors.purple, color: '#FFFFFF' }}\n\t\t\t\t\t>\n\t\t\t\t\t\tSubmit\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t{status === 0 ? (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tYBX locked\n\t\t\t\t\t\t\t
{getDisplayBalance(Number(escrowAmount), 'YBX')}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tveYBX minted\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{getDisplayBalance(Number(escrowAmount) * lockPools[type].multiple, '')}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tLock period\n\t\t\t\t\t\t\t
{lockPools[type].lockDescription}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tAs Collateral\n\t\t\t\t\t\t\t
{collatEscrow ? 'YES' : 'NO'}
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{veYbxLost > 0 && (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\tYou will not receive any of the interest accrued over the locked period. The original amount minus a\n\t\t\t\t\t\t\t\t\t\t10% penalty of YBX escrowd will be returned.\n\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tYBX Unlocked Early\n\t\t\t\t\t\t\t\t\t
{getDisplayBalance(ybxUnlockedEarly, 'YBX')}
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tEarly Unlock Penalty\n\t\t\t\t\t\t\t\t\t
{getDisplayBalance(ybxUnlockedEarly * 0.1, 'YBX')}
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tYBX Lost (fees+issuance)\n\t\t\t\t\t\t\t\t\t
{getDisplayBalance(veYbxLost, 'YBX')}
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tYBX returned\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{getDisplayBalance(ybxUnlockedEarly * 0.9 + ybxUnlocked, 'YBX')}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tYBX earned (fees+issuance)\n\t\t\t\t\t\t\t\t
{getDisplayBalance(veYbxBurnt, 'YBX')}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tTotal YBX to receive\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t{getDisplayBalance(ybxUnlockedEarly * 0.9 + ybxUnlocked + veYbxBurnt, 'YBX')}\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t\n\t);\n};\n\ninterface IEscrowItem {\n\titem: Escrow;\n\tonChange: (unlockEscrow: UnlockEscrow) => void;\n}\n\nconst AssetItem = ({ item, onChange }: IEscrowItem) => {\n\tconst [unlocked, setUnlocked] = useState(false);\n\tconst [amount, setAmount] = useState('');\n\n\tconst YBX = parseFloat(item.balance);\n\tconst veYBX = mathHelper.CalculateVeYBXIssued(YBX, item.period);\n\tconst escrowLocked = Date.now() < item.unlockTime.getTime();\n\n\tconst handleChange = (value: string) => {\n\t\tlet newUnlockEscrow: UnlockEscrow;\n\t\tif (Number.isFinite(Number(value)) && Number(value) !== 0) {\n\t\t\tsetAmount(value);\n\t\t\tif (value === item.balance) {\n\t\t\t\tnewUnlockEscrow = {\n\t\t\t\t\tbalanceId: item.balanceId,\n\t\t\t\t\tamount: item.balance,\n\t\t\t\t\tveYbx: veYBX,\n\t\t\t\t\tisCollateral: item.collateral,\n\t\t\t\t\tisEarly: escrowLocked,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tlet ybxUnlocked = new BigNumber(value);\n\t\t\t\tlet ybxPercentage = ybxUnlocked.dividedBy(item.balance);\n\t\t\t\tlet veYBXUnlocked = ybxPercentage.times(veYBX);\n\t\t\t\tnewUnlockEscrow = {\n\t\t\t\t\tbalanceId: item.balanceId,\n\t\t\t\t\tamount: ybxUnlocked.toFixed(7, BigNumber.ROUND_DOWN),\n\t\t\t\t\tveYbx: veYBXUnlocked.toNumber(),\n\t\t\t\t\tisCollateral: item.collateral,\n\t\t\t\t\tisEarly: escrowLocked,\n\t\t\t\t};\n\t\t\t}\n\t\t} else {\n\t\t\tnewUnlockEscrow = {\n\t\t\t\tbalanceId: item.balanceId,\n\t\t\t\tamount: '0',\n\t\t\t\tveYbx: 0,\n\t\t\t\tisCollateral: item.collateral,\n\t\t\t\tisEarly: escrowLocked,\n\t\t\t};\n\t\t\tsetUnlocked(false);\n\t\t\tsetAmount('');\n\t\t}\n\t\tonChange(newUnlockEscrow);\n\t};\n\n\tconst handleUnlock = () => {\n\t\tsetUnlocked(true);\n\t\thandleChange(item.balance);\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t{getDisplayBalance(veYBX, '')} veYBX\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t{getDisplayBalance(YBX, '')} YBX\n\t\t\t\t
\n\t\t\t
\n\t\t\t\n\t\t\t\t{unlocked ? (\n\t\t\t\t\t

\n\t\t\t\t) : (\n\t\t\t\t
\n\t\t\t\t{escrowLocked ? (\n\t\t\t\t\t\tUnlock Date\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tUNLOCKED\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\t

{item.unlockTime.toLocaleDateString()}

\n\t\t\t\t\t
\n\t\t\t\t\t\t{item.collateral ? (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

COLLATERAL

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t)}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t)}\n\t\t\t
\n\t\t\t\n\t\t\t\t{unlocked ? (\n\t\t\t\t\t handleChange(e.target.value)}\n\t\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\t\tonButtonClick={() => handleChange(item.balance)}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t\t\tUnlock\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\n\t\t
\n\t);\n};\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADsAAAA1CAYAAAD/L5PDAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAVASURBVHgB5ZpPaGNFHMe/M+8lTdOmjV1XqqyS1k1FUWxdEUWFrOJRKIhHsV7Ei7QLHjwIze5FT1tv4kXxqgdvehDciigLFZpaZdukS6ogLCjYWmvz771xZlJLs3mZ928mVfdzSt5vXt77Zt78fr/5/R5BH2HVahbNZg6EZOUB2y6RiYkd9AmCPsAqlQIDFvnHgod5mTB2gUxNlWAYCsNwoYtc6BV4CxUUGCGrYhwMY3RmD4UWg47nN1Mk+fxFGMKY2Fa5PEcJ+RAhcYDziXx+GQYw9hhTSiM9lhb/g9jqahYGMCJWrj/GcogCP89NpxdgAO2PMQ8vOdZqVRGPHWLbMzwsbUMj2mfWbTaLiE+W/2Gh17sfWsWyra1ZQsjLyjGuC3f/T3Ax8KHQ5PEZGrGhER5mlnraGnXsf/Yxale/Aqv9JTwYkvc/jOEX5mCNnfY8x2p78wloQtvMqpwSazbwxweXcbD8eVuogM9w48dV7L73Np9tp8ePspyzuVmEJrSIlU6JkLle9vraChob654259cb0t4LQum8rlCkRax0SopQU19fUZ7f+mlLZc4ik1mCBmKLZeXytJ9Tau3+rjLD+eVnpZ0xNqfDWcUXS+mn/oPU5kb9AH5Y7V1TLGKJFflvkEzJSibVdhroNgrOxkaszCqyWOGUAue/6WGl2UoOIAjEshbjOKvIYv2c0nGszKh6wOhtCEgWw8ORH+dIYsWs+jmljotkRpR2u0dS4XltYCGqs4om1nGuhBlPBwaVdpIeQhiiOqvQYoM6pQ4GUkozHcogJAWehwd+so6uE2ZwKKd0nERCaaaD4WZW3gtj74Z1VuFmttWaj7Ipt1LqmUU6vFhEcFaBxcr8lzsHRMFn5uzsGKIg7kfcV9DxwcU6TuT81BpRhBZCQEejiRWE2eQHEnvolGYREaKIs2QwLfe2MSi0NjcD3Vugq0StFB6dnxoEryl52kh4T9z9+5a1FMRZ+YqNVSk8Bumxbu1TwROKngSsSCrFHjqlIjRAT497HrduH4cO5Cbfx1kpxWqqFEqSk/d5HrfOTEITvhXJnmKFUwqT//oxcO5J6XmPIxxX6twT0IiyItmzSO5ubVV1rNXj1L79EgfffAGXVy6sU3dg+MVXYJ/RVjxsQ8g22dubITMzXX1fT7Fhu29hYfUaiE++HOv3XfcinZoqkpufpK6B7fbFKkQ69t9FtE8e4e2TjjZM15o9dErGhPIEnteR6zCMcFaX+cR1HOyYWdG+4DfjX0CLQLsj8AlqK1+D7e/JFDH12NMYfPZ5nnSkYQJeen+G93qP9t4dYk04JQGr1bD7/jtoVstdtuTUgxh97c24KWMvSlzgDO/myy9HV2DXr8+bECqol656ChU0yj/w/k+owkcYpl3HWRBLRyDFSqfEmJEGsECIVVH7/juYQlQksbYmfZAUG6ZSGIXWgboI7gYokscgi6GhRTG7NGylMAoDuXuV9uRd98Ak/CGeE7NLHceZhmFSj58HTXt7XGInkXrqORgm66TTs5T0Qax9593IvPQ66Ehn+CZ8nzvy6hvSbhrCl6nWzrsK0WUfe2sJzc11tH67wXPjcR52HuCCzcRYL2we3/r3oiTv6SQfehRJnACM7VCXB17cAriWVZIZlFupiMTf+No9MRir8l3QpIyzPIe8gP8xvGQjX/6UYsWLkTwWGXsb9CQRusjZsx+Jzx0bAadSKRIN7fx/CSIjvmTl88V/DnRv3q9dy7FEYilOUTwCDPoQ0aXEl+alm1/lVb6oqft1OtPw/Hcnsb+/7VV/EvwNJN0JKzQThckAAAAASUVORK5CYII=\"","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { ClaimEvent, POOL_ACCOUNT_1_ID } from 'yieldblox-js';\n\nimport { IModalProps, Modal } from 'components';\nimport { Grid } from '@material-ui/core';\nimport { ConfirmActionModal } from './ConfirmActionModal';\n\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\nimport { getDisplayBalance, getFormattedNumber } from 'utils';\nimport { useUser, useWallet } from 'contexts';\nimport { TxType } from 'types';\nimport { YBX_TOKEN } from 'config/constants';\n\nconst Content = styled.div`\n\twidth: 375px;\n\theight: auto;\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 16px 20px;\n`;\n\nconst IconWrapper = styled.div<{ color: string }>`\n\twidth: 30px;\n\theight: 30px;\n\tborder-radius: 50%;\n\tborder: 2px solid ${({ color }) => color};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tbackground: white;\n\n\timg {\n\t\tcolor: ${({ color }) => color};\n\t\twidth: 100%;\n\t}\n`;\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n\n\tp {\n\t\tcolor: ${({ theme }) => theme.colors.grey2};\n\t}\n`;\n\nconst GridCont = styled.div`\n\tdisplay: grid;\n\tgrid-template-columns: auto auto auto auto;\n\tgrid-gap: 20px;\n\talign-items: center;\n`;\n\nconst DetailWrapper = styled.div`\n\twidth: 180px;\n\theight: 34px;\n\tborder-radius: 17px;\n\tmargin-top: 10px;\n\tpadding: 2px;\n\tpadding-right: 20px;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n`;\n\ninterface IProps extends IModalProps {}\n\nexport const ClaimModal: React.FC = ({ open, onClose }) => {\n\tconst theme = useTheme();\n\tconst { walletAddress, runContract } = useWallet();\n\tconst { toClaim } = useUser();\n\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tconst processTransaction = async () => {\n\t\tif (walletAddress) {\n\t\t\tlet claimEvent = new ClaimEvent(walletAddress, POOL_ACCOUNT_1_ID, 'CLAIM');\n\t\t\tawait runContract(claimEvent);\n\t\t}\n\t};\n\n\tconst isValid = () => {\n\t\tif (Number(toClaim) <= 0) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{/*\n -----NEXT ISSUANCE-----\n \n Next Issuance \n in 22 hours \n \n \n \"\"\n \n
0.0000
\n YBX\n
\n
\n\n \n \n \n */}\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

Available to Claim

\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
{getFormattedNumber(toClaim)}
\n\t\t\t\t\t\t\t\tYBX\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t setShowConfirm(true)}\n\t\t\t\t\t\t\t\tdisabled={!isValid()}\n\t\t\t\t\t\t\t\terrorMessage=\"Nothing to claim\"\n\t\t\t\t\t\t\t\tstyle={{ display: 'flex', alignItems: 'center', justifyContent: 'space-evenly' }}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tClaim\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tClaim YBX\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(toClaim, 'YBX')}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { IModalProps, Modal, Button, ClaimModal, FaucetModal, TopRightModal } from 'components';\nimport { WalletType } from 'types';\nimport { toast } from 'react-toastify';\nimport { Link, useLocation } from 'react-router-dom';\nimport { getShortenWalletAddress, getFormattedNumber } from 'utils';\nimport { useWallet } from 'contexts/wallet';\nimport copy from 'copy-to-clipboard';\nimport { GreenText } from 'theme';\n\nimport logoImg from 'assets/images/ybx_logo.svg';\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport scripteeIcon from 'assets/images/icn_scriptee.svg';\nimport arrowIcon from 'assets/images/icn_arrow_down.svg';\nimport navActiveIcon from 'assets/images/icn_nav_active.svg';\nimport copyIcon from 'assets/images/icn_copy.svg';\nimport faucetIcon from 'assets/images/faucetIcon.svg';\nimport lightIcon from 'assets/images/icn_light.svg';\nimport darkIcon from 'assets/images/icn_dark.svg';\nimport albedoIcon from 'assets/images/wallet_albedo.svg';\nimport freighterIcon from 'assets/images/wallet_freighter.svg';\n\nimport { useUser } from 'contexts';\nimport { useSettings } from 'contexts/settings';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 20px;\n\tborder-bottom: 2px solid ${({ theme }) => theme.colors.light_grey3};\n\tborder-top: 2px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst WalletButton = styled.button`\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tpadding: 0px;\n\tborder: none;\n\toutline: none;\n\tbackground: transparent;\n\tborder-top: 1px solid ${({ theme }) => theme.colors.light_grey3};\n\tcursor: pointer;\n\n\t&:hover {\n\t\tbackground: ${({ theme }) => theme.colors.light_grey};\n\t}\n\n\t&:first-child {\n\t\tborder-top: none;\n\t}\n`;\n\nconst Container = styled.div`\n\tposition: relative;\n\twidth: 100%;\n\theight: 70px;\n\tbackground: ${({ theme }) => theme.colors.white};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 0 2.5rem;\n\tbox-sizing: border-box;\n`;\n\nconst LogoImg = styled.img`\n\twidth: 180px;\n`;\n\nconst LinkContainer = styled.div`\n\tposition: absolute;\n\ttop: 0;\n\tleft: 50%;\n\theight: 100%;\n\ttransform: translateX(-50%);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n`;\n\nconst LinkItem = styled(Link)`\n\tposition: relative;\n\theight: 100%;\n\twidth: 100%;\n\tcolor: ${({ theme }) => theme.colors.black};\n\ttext-decoration: none;\n\tfont-size: 20px;\n\tline-height: 26px;\n\tfont-weight: 500;\n\tpadding: 20px;\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst DetailContainer = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst DetailWrapper = styled.div`\n\theight: 34px;\n\tborder-radius: 17px;\n\tpadding: 2px;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n`;\n\nconst IconWrapper = styled.div`\n\twidth: 30px;\n\theight: 30px;\n\tborder-radius: 50%;\n\tbackground: ${({ theme }) => theme.colors.green1};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\twidth: 100%;\n\t}\n`;\n\nconst ArrowIcon = styled.img`\n\twidth: 10px;\n\tmargin: 0 10px 0 4px;\n`;\n\nconst ChangeWalletWrapper = styled(DetailWrapper)`\n\tposition: absolute;\n\ttop: 34px;\n\tleft: 0;\n\twidth: 100%;\n\tbackground: ${({ theme }) => theme.colors.white};\n\tbox-shadow: 0 7px 13px ${({ theme }) => theme.colors.shadow};\n\tcursor: pointer;\n`;\n\nconst ThemeButton = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin: 4px;\n\tcursor: pointer;\n\n\timg {\n\t\twidth: 24px;\n\t\theight: 24px;\n\t}\n`;\n\nconst FaucetButton = styled.div`\n\tdisplay: flex;\n\twidth: 24px;\n\theight 24px;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 50%;\n\tbackground: rgba(68, 114, 255, 1);\n\tmargin: 4px;\n\tcursor: pointer;\n\t&: hover {\n\t\t\topacity: 0.5;\n\t}\n\n\timg {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t}\n`;\n\nconst NavItem = ({ to, title }: INavItem) => {\n\tconst location = useLocation();\n\n\treturn {title};\n};\n\ninterface IProps extends IModalProps {\n\tonClaim: () => void;\n}\n\ninterface IProps extends IModalProps {\n\tonFaucet: () => void;\n}\n\ninterface INavItem {\n\tto: string;\n\ttitle: string;\n}\n\nexport const MenuModal: React.FC = ({ open, onClaim, onFaucet, onClose }) => {\n\tconst { connect, connected, disconnect, walletAddress, walletType } = useWallet();\n\tconst { toClaim } = useUser();\n\tconst [showChangeWallet, setShowChangeWallet] = useState(false);\n\tconst [showFaucet, setShowFaucet] = useState(false);\n\tconst { theme, setTheme } = useSettings();\n\n\tconst handleClickWalletButton = () => {\n\t\tif (!showChangeWallet) {\n\t\t\tsetShowChangeWallet(true);\n\t\t} else {\n\t\t\tcopy(walletAddress || '');\n\t\t\ttoast.success('Copied the wallet address');\n\t\t}\n\t};\n\n\tconst handleChangeWallet = (e: any) => {\n\t\te.stopPropagation();\n\t\tsetShowChangeWallet(false);\n\t\tdisconnect();\n\t\tconnect();\n\t};\n\n\tconst getWalletLogo = () => {\n\t\tswitch (walletType) {\n\t\t\tcase WalletType.Freighter:\n\t\t\t\treturn freighterIcon;\n\t\t\tcase WalletType.Albedo:\n\t\t\t\treturn albedoIcon;\n\t\t\tdefault:\n\t\t\t\treturn scripteeIcon;\n\t\t}\n\t};\n\n\treturn (\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{!connected || !walletAddress ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t setTheme(theme === 'dark' ? 'light' : 'dark')}>\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

{getShortenWalletAddress(walletAddress)}

\n\t\t\t\t\t\t\t\t\t{showChangeWallet ? : }\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t{showChangeWallet && (\n\t\t\t\t\t\t\t\t\t setShowChangeWallet(false)}>\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\tDisconnect\n\t\t\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t

{getFormattedNumber(toClaim)}

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t setTheme(theme === 'dark' ? 'light' : 'dark')}>\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t)}\n\t\t\t\t
\n\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t);\n};\n","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/icn_link.3e94f018.svg\";","export default __webpack_public_path__ + \"static/media/icn_yes.4536a58a.svg\";","export default __webpack_public_path__ + \"static/media/icn_no.ed156ed6.svg\";","export default __webpack_public_path__ + \"static/media/icn_edit.88e76675.svg\";","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { BalanceLine, STELLAR_ZERO, VoteEvent } from 'yieldblox-js';\nimport { ProposalTag, IModalProps, Input, Modal, ModalFooter, ModalHeader, ConfirmActionModal } from 'components';\nimport { GreenText } from 'theme';\nimport copy from 'copy-to-clipboard';\n\nimport PropAllocIcon from 'assets/images/icn_prop_alloc.png';\nimport LinkIcon from 'assets/images/icn_link.svg';\nimport yesIcon from 'assets/images/icn_yes.svg';\nimport noIcon from 'assets/images/icn_no.svg';\nimport editIcon from 'assets/images/icn_edit.svg';\nimport { XdrProposalData } from 'types';\nimport { getFormattedNumber, getShortenWalletAddress } from 'utils';\nimport { useUser, useWallet } from 'contexts';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\nimport { toast } from 'react-toastify';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 8px 0;\n`;\n\nconst PropIcon = styled.img`\n\twidth: 30px;\n\theight: 30px;\n`;\n\nconst XdrDiv = styled.div`\n\tborder-radius: 7px;\n\tpadding: 10px;\n\twidth: 95%;\n\tbackground: ${({ theme }) => theme.colors.light_grey};\n\toverflow: hidden;\n\n\t&:hover {\n\t\topacity: 0.75;\n\t}\n`;\n\nconst Column = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n`;\n\nconst VoteWrapper = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\n\timg {\n\t\theight: 14px;\n\t\tmargin: 4px;\n\t}\n`;\n\nconst VoteButton = styled.div<{ disabled?: boolean }>`\n\tdisplay: flex;\n\tflex-direction: row;\n\tcursor: pointer;\n\topacity: ${({ disabled }) => (disabled ? 0.2 : 1)};\n\n\t&:hover {\n\t\topacity: 0.85;\n\t}\n\n\timg {\n\t\theight: 14px;\n\t\tmargin: 4px;\n\t}\n`;\n\nconst VerticalDivider = styled.div`\n\twidth: 1px;\n\tbackground: ${({ theme }) => theme.colors.light_grey3};\n\theight: 20px;\n\tmargin: 0 20px;\n`;\n\nconst ContentWrapper = styled.div`\n\twidth: 100%;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tbox-shadow: 0px 7px 13px ${({ theme }) => theme.colors.shadow};\n\tborder-radius: 18px;\n\tpadding: 19px 25px 6px 25px;\n\toverflow: hidden;\n`;\n\ninterface IProps extends IModalProps {\n\tproposalData: XdrProposalData;\n}\n\nexport const ProposalModal: React.FC = ({ open, onClose, proposalData }) => {\n\tconst { proposal, yes, no, total } = proposalData;\n\tconst { user, votingPower } = useUser();\n\tconst { walletAddress, runContract } = useWallet();\n\n\tconst PROP_YES_ASSET = `YES:${proposal.id}`;\n\tconst PROP_NO_ASSET = `NO:${proposal.id}`;\n\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [userYes, setYesVotes] = useState(0);\n\tconst [userNo, setNoVotes] = useState(0);\n\tconst [newVoteCount, setNewVoteCount] = useState('');\n\tconst [editing, setEditing] = useState(false);\n\tconst [currentVoteYes, setCurrentVoteYes] = useState(false);\n\tconst [voteYes, setVoteYes] = useState(false);\n\n\tconst remainingVotes = votingPower - Number(newVoteCount);\n\n\tconst handleSetVoteYes = (voteType: boolean) => {\n\t\tif (voteType === voteYes && !editing) {\n\t\t\thandleSetEditing(true);\n\t\t}\n\t\tsetVoteYes(voteType);\n\t};\n\n\tconst handleSetEditing = (isEditing: boolean) => {\n\t\tif (isEditing) {\n\t\t\tsetNewVoteCount((voteYes ? userYes : userNo).toString());\n\t\t}\n\t\tsetEditing(isEditing);\n\t};\n\n\tconst processTransaction = async () => {\n\t\tif (walletAddress) {\n\t\t\tlet newVotes = [];\n\t\t\tif (voteYes && Number(newVoteCount) > 0) {\n\t\t\t\tnewVotes.push({\n\t\t\t\t\tassetId: `YES:${proposal.id}`,\n\t\t\t\t\tamount: newVoteCount,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (!voteYes && Number(newVoteCount) > 0) {\n\t\t\t\tnewVotes.push({\n\t\t\t\t\tassetId: `NO:${proposal.id}`,\n\t\t\t\t\tamount: newVoteCount,\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet voteEvent = new VoteEvent(walletAddress, proposal.id, newVotes, proposal.type);\n\t\t\tawait runContract(voteEvent);\n\t\t}\n\t};\n\n\tconst isValid = () => {\n\t\treturn remainingVotes >= 0 && editing;\n\t};\n\n\tconst handleClose = () => {\n\t\tsetEditing(false);\n\t\tsetCurrentVoteYes(false);\n\t\tsetVoteYes(false);\n\t\tsetShowConfirm(false);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tconst handleCopy = (toCopy: string) => {\n\t\tcopy(toCopy);\n\t\ttoast.success('Copied XDR to clipboard');\n\t};\n\n\tuseEffect(() => {\n\t\tconst loadVotes = async () => {\n\t\t\tif (user.id) {\n\t\t\t\tlet votes = await proposal.getVotesForAccount(user.id);\n\t\t\t\tlet yes = Number(votes.find(v => v.assetId === PROP_YES_ASSET)?.amount ?? '0');\n\t\t\t\tlet no = Number(votes.find(v => v.assetId === PROP_NO_ASSET)?.amount ?? '0');\n\t\t\t\tsetYesVotes(yes);\n\t\t\t\tsetNoVotes(no);\n\t\t\t\tsetCurrentVoteYes(yes > no);\n\t\t\t\tsetVoteYes(yes > no);\n\t\t\t}\n\t\t};\n\t\tloadVotes().catch(console.error);\n\t}, [open]);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t
Xdr Proposal
\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tAccount\n\t\t\t\t\t\t

{getShortenWalletAddress(proposal.id)}

\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t window.open('https://docs.ybx.script3.io/user-docs/governance', 'gov')}>\n\t\t\t\t\t\t\t\tMore Information\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
{proposal.title}
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\tCurrent Votes\n\t\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

{getFormattedNumber(yes)}

\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t

{getFormattedNumber(no)}

\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tDescription\n\t\t\t\t\t\t\t\t

{proposal.description}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tXDR\n\t\t\t\t\t\t\t\t{proposal.xdrs.map((xdr, idx) => (\n\t\t\t\t\t\t\t\t\t handleCopy(xdr)}>\n\t\t\t\t\t\t\t\t\t\t{xdr}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tAvailable Votes\n\t\t\t\t\t\t

{remainingVotes.toFixed(7)}

\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tYour current vote\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t handleSetVoteYes(true)}>\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t

YES

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t handleSetVoteYes(false)}>\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t

NO

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{editing ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t setNewVoteCount(e.target.value)}\n\t\t\t\t\t\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\t\t\t\t\t\tonButtonClick={() => setNewVoteCount(votingPower.toFixed(7))}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t handleSetEditing(true)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{currentVoteYes ? userYes : userNo}\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setShowConfirm(true)}\n\t\t\t\t\t\tdisabled={!isValid()}\n\t\t\t\t\t\terrorMessage=\"Cannot vote with more than your alloted votes.\"\n\t\t\t\t\t>\n\t\t\t\t\t\tVote\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tProposal\n\t\t\t\t\t\t{getShortenWalletAddress(proposal.id)}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tVotes\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t

YES

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{getFormattedNumber(Number(voteYes ? newVoteCount : '0'))}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t

NO

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{getFormattedNumber(Number(!voteYes ? newVoteCount : '0'))}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { IModalProps, Modal, ModalFooter, ModalHeader } from 'components';\nimport { Button } from 'components/common/Button';\nimport { useSettings, useWallet } from 'contexts';\nimport faucetIcon from 'assets/images/faucetIcon.svg';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\nimport axios from 'axios';\nimport loadingSpinner from 'assets/images/loading_spinner.gif';\nimport sadSprout from 'assets/images/icn_sprout_sad.svg';\nimport copy from 'copy-to-clipboard';\nimport { toast } from 'react-toastify';\nimport copyIcon from 'assets/images/icn_copy.svg';\n\nconst RowItem = styled.div`\n\tpadding: 16px 14px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 10px 0;\n`;\n\nconst Content = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\tpadding: 16px;\n`;\n\nconst FaucetCircle = styled.div`\n\tdisplay: flex;\n\twidth: 50px;\n\theight 50px;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 50%;\n\tbackground: rgba(68, 114, 255, 1);\n\tmargin-right: 16px;\n\n\timg {\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n`;\n\nconst IconWrapper = styled.div`\n\twidth: 100px;\n\theight: 100px;\n\tborder-radius: 50%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\toverflow: hidden;\n\n\timg {\n\t\twidth: 100%;\n\t}\n`;\n\nconst KeyDiv = styled.div`\n\tborder-radius: 7px;\n\tpadding: 10px;\n\tbackground: ${({ theme }) => theme.colors.light_grey};\n\n\t&:hover {\n\t\topacity: 0.75;\n\t}\n`;\n\ninterface FaucetResult {\n\tpublicKey: string;\n\tsecret: string;\n}\n\ninterface IProps extends IModalProps {}\n\nexport const FaucetModal: React.FC = ({ open, onClose }) => {\n\tconst { walletAddress } = useWallet();\n\tconst { lastFaucet } = useSettings();\n\n\tconst canFaucet = walletAddress == undefined && Date.now() > parseFloat(lastFaucet) + 60 * 1000;\n\n\tconst [loading, setLoading] = useState(false);\n\tconst [result, setResult] = useState>(undefined);\n\tconst [success, setSuccess] = useState>(undefined);\n\n\tconst handleClose = () => {\n\t\tsetLoading(false);\n\t\tsetResult(undefined);\n\t\tsetSuccess(undefined);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleFaucet = async () => {\n\t\tsetLoading(true);\n\t\ttry {\n\t\t\tlet resp = await axios.post('https://qibbehteha.execute-api.us-east-1.amazonaws.com/drip');\n\t\t\tsetResult(resp.data);\n\t\t\tsetSuccess(true);\n\t\t\tsetLoading(false);\n\t\t} catch (e) {\n\t\t\tsetSuccess(false);\n\t\t\tsetLoading(false);\n\t\t}\n\t};\n\n\tconst handleCopy = (toCopy: string) => {\n\t\tcopy(toCopy);\n\t\tif (toCopy.startsWith('S')) {\n\t\t\ttoast.success('Copied secret to clipboard');\n\t\t} else {\n\t\t\ttoast.success('Copied publicKey to clipboard');\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t\n\t\t\t\t\tTestnet Faucet\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{\n\t\t\t\t\t\t// has not generated\n\t\t\t\t\t\t!loading && success === undefined && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tTapping the Testnet Faucet will create a new Stellar Testnet account for you to use.\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

This is a new account that will be pre-loaded with testnet assets, so you can try YieldBlox without risk!\n\t\t\t\t\t\t\t\t\t\tClick the 'Generate' button to create a Testnet account and receive its key pair.

\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\t// generating - use loading as short circuit\n\t\t\t\t\t\tloading && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tWe are creating a new testnet account! Hang tight, this can take upwards of 30 seconds.\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\t// generating - use loading as short circuit\n\t\t\t\t\t\t!loading && success === false && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tWe were unable to generate a new account. Please try again later!\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\t// generating - use loading as short circuit\n\t\t\t\t\t\t!loading && success === true && result && (\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tBelow is a newly generated testnet account.\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tPublic Key:\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t handleCopy(result.publicKey)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t

{result.publicKey}

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t

Click to copy.

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tSecret Key:\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t handleCopy(result.secret)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t

{result.secret}

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t\t\t

Click to copy.

\n\t\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tPlease copy this address and import it to a supported browser wallet to access YieldBlox.\n\t\t\t\t\t\t\t\t\t\tMake sure the wallet is set to \"Test Network,\" connected to the YieldBlox Testnet, and then you'll be ready to go!\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t{success === undefined ? (\n\t\t\t\t\t\t await handleFaucet()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tGenerate\n\t\t\t\t\t\t\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\n\ninterface IAssetIcon {\n\tassetCode: string;\n}\n\nconst IconWrapper = styled.img`\n\twidth: 38px;\n\theight: 38px;\n`;\n\nexport const AssetIcon: React.FC = ({ assetCode }) => {\n\treturn ;\n};\n","import React from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { ProposalStatus } from 'yieldblox-js';\n\nconst Status = styled.div<{ background: string; color: string }>`\n\tborder-radius: 16px;\n\tbackground: ${({ background }) => background};\n\tcolor: ${({ color }) => color};\n\tpadding: 5px;\n\tpadding-right: 15px;\n\tpadding-left: 15px;\n\tdisplay: flex;\n\talign-items: center;\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n\n\timg {\n\t\theight: 20px;\n\t}\n`;\n\ninterface IProps extends React.HTMLAttributes {\n\tproposalStatus: ProposalStatus;\n}\n\nexport const ProposalTag: React.FC = ({ proposalStatus }) => {\n\tconst theme = useTheme();\n\n\tlet color = theme.colors.yellow;\n\tlet background = theme.colors.yellow1;\n\tlet body = 'loading';\n\tswitch (proposalStatus) {\n\t\tcase ProposalStatus.ACCEPTED:\n\t\t\tcolor = theme.colors.green;\n\t\t\tbackground = theme.colors.green1;\n\t\t\tbody = 'Accepted';\n\t\t\tbreak;\n\t\tcase ProposalStatus.IMPLEMENTING:\n\t\t\tcolor = theme.colors.yellow;\n\t\t\tbackground = theme.colors.yellow1;\n\t\t\tbody = 'Implementing';\n\t\t\tbreak;\n\t\tcase ProposalStatus.IMPLEMENTED:\n\t\t\tcolor = theme.colors.green;\n\t\t\tbackground = theme.colors.green1;\n\t\t\tbody = 'Implemented';\n\t\t\tbreak;\n\t\tcase ProposalStatus.REJECTED:\n\t\t\tcolor = theme.colors.red;\n\t\t\tbackground = theme.colors.red1;\n\t\t\tbody = 'Rejected';\n\t\t\tbreak;\n\t\tcase ProposalStatus.VOTING:\n\t\t\tcolor = theme.colors.yellow;\n\t\t\tbackground = theme.colors.yellow1;\n\t\t\tbody = 'Voting';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tcolor = theme.colors.red;\n\t\t\tbackground = theme.colors.red1;\n\t\t\tbody = 'Unknown';\n\t}\n\treturn (\n\t\t\n\t\t\t{body}\n\t\t\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Table, AssetIcon } from 'components';\nimport { GreenText } from 'theme';\nimport { usePrices, useYieldBlox, useUser } from 'contexts';\nimport { PoolAssetData, SortableRow } from 'types';\nimport { getCollateralRate, getDisplayBalance, getDisplayRate } from 'utils';\nimport { mathHelper } from 'utils/protocol';\nimport questionIcon from 'assets/images/icn_question.png';\nimport { Tooltip } from '@material-ui/core';\n\nimport editIcon from 'assets/images/icn_edit.svg';\nimport { Lend } from 'yieldblox-js';\nimport { YBX_TOKEN } from 'config/constants';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst TableDiv = styled.div`\n\twidth: 100%;\n\toverflow-x: auto;\n\tborder-radius: 18px;\n\tposition: relative;\n`;\n\nconst ToolText = styled.text`\n\tfont: DM Sans;\n\tfont-size: 14px;\n`;\n\nexport interface ILendingMarket {\n\tonDeposit: (poolAsset: PoolAssetData) => void;\n\tonManageCollateral: (pAssetData: PoolAssetData, position: Maybe) => void;\n}\n\nexport const LendingMarket: React.FC = ({ onDeposit, onManageCollateral }) => {\n\tconst { poolAssets } = useYieldBlox();\n\tconst { user } = useUser();\n\tconst { prices } = usePrices();\n\n\tconst getRow = (item: PoolAssetData, idx: number): SortableRow => {\n\t\t// find position for asset and user\n\t\tconst position = user.positions?.getLentPosition(item.poolAsset.poolTokenId);\n\t\tconst positionCValue = position?.balance ?? '0';\n\t\tconst positionUCValue = position?.uncollateralizedBalance ?? '0';\n\t\tconst posUnderlyingValue = (parseFloat(positionCValue) + parseFloat(positionUCValue)) * item.yTokenRate;\n\n\t\tconst assetCode = item.poolAsset.underlyingId.split(':')[0];\n\n\t\tconst assetPrice = prices[item.poolAsset.underlyingId];\n\t\tconst ybxPrice = prices[YBX_TOKEN];\n\t\tconst tokenYield = mathHelper.CalculateTokenYield(\n\t\t\titem.yTokenIssuance,\n\t\t\titem.yTokenRate,\n\t\t\tassetPrice?.rate,\n\t\t\tybxPrice?.rate ?? 1\n\t\t);\n\n\t\tconst marketSize = item.totalUnderlying;\n\t\tconst tvl = marketSize * assetPrice?.rate ?? 1;\n\n\t\treturn {\n\t\t\ttotalValueLocked: tvl,\n\t\t\thasPosition: position !== undefined,\n\t\t\trow: (\n\t\t\t\t onDeposit(item)} style={{ cursor: 'pointer' }}>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{assetCode}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{getDisplayBalance(marketSize, assetCode)}\n\t\t\t\t\t\n\t\t\t\t\t\t{getDisplayRate(item.lendRate)}\n\t\t\t\t\t\t%\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{getDisplayRate(tokenYield)}\n\t\t\t\t\t\t%\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{getDisplayRate(item.poolAsset.data.loanToValue)}\n\t\t\t\t\t\t%\n\t\t\t\t\t\n\t\t\t\t\t{getDisplayBalance(posUnderlyingValue, assetCode)}\n\t\t\t\t\t\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\tif (position && posUnderlyingValue > 0) {\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\tonManageCollateral(item, position);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{getCollateralRate(position)}\n\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t{position && posUnderlyingValue > 0 && \"\"}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t),\n\t\t};\n\t};\n\n\t// Sort by liquidity the hasPosition\n\tlet poolAssetKeys = Object.keys(poolAssets);\n\tlet unsortedRows = poolAssetKeys.map((key, idx) => getRow(poolAssets[key], idx));\n\tlet sortedRows = unsortedRows\n\t\t.sort((a, b) =>\n\t\t\tb.hasPosition === a.hasPosition ? b.totalValueLocked - a.totalValueLocked : b.hasPosition ? 1 : -1\n\t\t)\n\t\t.map(x => x.row);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{sortedRows}\n\t\t\t
AssetMarket SizeInterest Rate\n\t\t\t\t\t\t\tThe yearly YBX return from collateralizing this asset.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tarrow\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tYBX Issuance Rate\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tThe percentage of this asset’s collateral effective against liabilities.\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tarrow\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tLoan-to-Value\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tCurrent DepositCollateral
\n\t\t
\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Table, Toggle, AssetIcon } from 'components';\nimport { GreenText } from 'theme';\nimport { PoolAssetData, SortableRow } from 'types';\nimport { usePrices, useYieldBlox, useUser } from 'contexts';\nimport { getAdjDisplayBalance, getDisplayBalance, getDisplayRate } from 'utils';\nimport { mathHelper } from 'utils/protocol';\nimport questionIcon from 'assets/images/icn_question.png';\nimport { Tooltip } from '@material-ui/core';\nimport { YBX_TOKEN } from 'config/constants';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst TableDiv = styled.div`\n\twidth: 100%;\n\toverflow-x: auto;\n\tborder-radius: 18px;\n\tposition: relative;\n`;\n\nconst ToolText = styled.text`\n\tfont: DM Sans;\n\tfont-size: 14px;\n`;\n\ninterface IProps {\n\tonBorrow: (item: PoolAssetData) => void;\n}\n\nexport const BorrowMarket: React.FC = ({ onBorrow }) => {\n\tconst { poolAssets } = useYieldBlox();\n\tconst { user, healthFactor } = useUser();\n\tconst { prices } = usePrices();\n\n\tconst getRow = (item: PoolAssetData, idx: number): SortableRow => {\n\t\t// find position for asset and user\n\t\tconst position = user.positions?.getBorrowedPosition(item.poolAsset.liabilityTokenId);\n\t\tconst positionValue = parseFloat(position?.balance ?? '0');\n\t\tconst posUnderlyingValue = positionValue * item.lTokenRate;\n\n\t\tconst assetCode = item.poolAsset.underlyingId.split(':')[0];\n\n\t\tconst assetPrice = prices[item.poolAsset.underlyingId];\n\t\tconst ybxPrice = prices[YBX_TOKEN];\n\t\tconst tokenYield = mathHelper.CalculateTokenYield(\n\t\t\titem.lTokenIssuance,\n\t\t\titem.lTokenRate,\n\t\t\tassetPrice?.rate,\n\t\t\tybxPrice?.rate ?? 1\n\t\t);\n\n\t\tconst marketSize = item.totalUnderlying;\n\t\tconst tvl = marketSize * assetPrice?.rate ?? 1;\n\n\t\tconst maxBorrowUSD = parseFloat(healthFactor.borrowLimitUSD) - parseFloat(healthFactor.liabilitiesUSD);\n\t\treturn {\n\t\t\ttotalValueLocked: tvl,\n\t\t\thasPosition: positionValue !== 0,\n\t\t\trow: (\n\t\t\t\t onBorrow(item)} style={{ cursor: 'pointer' }}>\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{assetCode}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{getDisplayBalance(marketSize, assetCode)}\n\t\t\t\t\t{getDisplayBalance(item.poolBalance, assetCode)}\n\t\t\t\t\t\n\t\t\t\t\t\t{getDisplayRate(item.borrowRate)}\n\t\t\t\t\t\t%\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{getDisplayRate(tokenYield)}\n\t\t\t\t\t\t%\n\t\t\t\t\t\n\t\t\t\t\t{getDisplayBalance(positionValue === 0 ? undefined : posUnderlyingValue, assetCode)}\n\t\t\t\t\t\n\t\t\t\t\t\t{getAdjDisplayBalance(maxBorrowUSD, assetPrice?.reverseRate)} {assetCode}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t),\n\t\t};\n\t};\n\n\t// compare positions, sort by liquidity\n\tlet poolAssetKeys = Object.keys(poolAssets);\n\tlet unsortedRows = poolAssetKeys.map((key, idx) => getRow(poolAssets[key], idx));\n\tlet sortedRows = unsortedRows\n\t\t.sort((a, b) =>\n\t\t\tb.hasPosition === a.hasPosition ? b.totalValueLocked - a.totalValueLocked : b.hasPosition ? 1 : -1\n\t\t)\n\t\t.map(x => x.row);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{sortedRows}\n\t\t\t
Asset Market SizeLiquidity\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
Interest Rate
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\tThe yearly YBX return from borrowing this asset.}\n\t\t\t\t\t\t\t\tarrow\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tYBX Issuance Rate\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tCurrent BorrowMax Borrow
\n\t\t
\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport {\n\tAccountOverview,\n\tBorrowModal,\n\tDepositModal,\n\tDivider,\n\tManageCollateralModal,\n\tSectionTitle,\n\tToggle,\n} from 'components';\nimport { PoolAssetData } from 'types';\nimport { LendingMarket } from './LendingMarket';\nimport { BorrowMarket } from './BorrowMarket';\nimport { Lend, BasePosition } from 'yieldblox-js';\nimport { useUser } from 'contexts';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\nexport interface SortableRow {\n\trow: JSX.Element;\n\ttotalValueLocked: number;\n\thasPosition: boolean;\n}\n\nexport const Market = () => {\n\tconst { user } = useUser();\n\n\tconst [borrow, setBorrow] = useState(false);\n\tconst [showDepositModal, setShowDepositModal] = useState(false);\n\tconst [showManageCollateralModal, setShowManageCollateralModal] = useState(false);\n\tconst [showBorrowModal, setShowBorrowModal] = useState(false);\n\tconst [pAssetData, setAssetData] = useState>();\n\tconst [position, setPosition] = useState>(undefined);\n\n\tconst handleDeposit = (item: PoolAssetData) => {\n\t\tsetAssetData(item);\n\t\tsetShowDepositModal(true);\n\t};\n\n\tconst handleBorrow = (item: PoolAssetData) => {\n\t\tsetAssetData(item);\n\t\tsetShowBorrowModal(true);\n\t};\n\n\tconst handleManageCollateral = (item: PoolAssetData, position: Maybe) => {\n\t\tif (position) {\n\t\t\tsetAssetData(item);\n\t\t\tsetPosition(position);\n\t\t\tsetShowManageCollateralModal(true);\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\n\t\t\t\t setBorrow(value === 1)}\n\t\t\t\t/>\n\t\t\t\n\n\t\t\t{!borrow ? (\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t)}\n\n\t\t\t{pAssetData && user.id && (\n\t\t\t\t setShowDepositModal(false)} />\n\t\t\t)}\n\t\t\t{pAssetData && user.id && (\n\t\t\t\t setShowManageCollateralModal(false)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{pAssetData && user.id && (\n\t\t\t\t setShowBorrowModal(false)} />\n\t\t\t)}\n\t\t\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/icn_redo.1068a694.svg\";","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { AssetIcon, Button, Card, RepayModal } from 'components';\nimport { GreenText } from 'theme';\nimport { usePrices, useYieldBlox } from 'contexts';\nimport { mathHelper } from 'utils/protocol';\nimport { getAdjDisplayBalance, getDisplayBalance, getDisplayRate } from 'utils';\n\nimport redoIcon from 'assets/images/icn_redo.svg';\nimport { Borrow } from 'yieldblox-js';\nimport { YBX_TOKEN } from 'config/constants';\n\nconst Container = styled(Card)`\n\tmin-width: 294px;\n\twidth: 250px;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tpadding: 0;\n\tmargin: 10px;\n`;\n\nconst Divider = styled.div`\n\twidth: 100%;\n\theight: 2px;\n\tbackground: ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst Row = styled.div`\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: flex-start;\n\tpadding: 16px;\n`;\n\nconst Title = styled.div`\n\tfont-weight: bold;\n\tfont-size: 22px;\n\tline-height: 29px;\n`;\n\nconst Status = styled.div`\n\tbackground: ${({ theme }) => theme.colors.green1};\n\tpadding: 2px 8px;\n\tborder-radius: 16px;\n`;\n\nconst Block = styled.div`\n\twidth: 50%;\n\tpadding: 16px;\n`;\n\nconst RedoImg = styled.img`\n\twidth: 14px;\n\tmargin-right: 16px;\n`;\n\ninterface IProps {\n\tposition: Borrow;\n}\n\nexport const BorrowTile: React.FC = ({ position }) => {\n\tconst { getPoolAssetDataFromToken } = useYieldBlox();\n\tconst { prices } = usePrices();\n\n\tconst poolAssetData = getPoolAssetDataFromToken(position.assetId);\n\tconst assetCode = poolAssetData.poolAsset.underlyingId.split(':')[0];\n\n\tconst pricePair = prices[poolAssetData.poolAsset.underlyingId];\n\tconst ybxPrice = prices[YBX_TOKEN];\n\tconst tokenYield = mathHelper.CalculateTokenYield(\n\t\tpoolAssetData.lTokenIssuance,\n\t\tpoolAssetData.lTokenRate,\n\t\tpricePair?.rate,\n\t\tybxPrice?.rate ?? 1\n\t);\n\n\tconst underlyingBalance = parseFloat(position.balance) * poolAssetData.lTokenRate;\n\tconst Principal = parseFloat(position.principal);\n\n\tconst [showRepayModal, setShowRepayModal] = useState(false);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{assetCode}\n\t\t\t\t\t\t

{getDisplayBalance(underlyingBalance, assetCode)}

\n\t\t\t\t\t\t${getAdjDisplayBalance(underlyingBalance, pricePair?.rate)}\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\tBorrowed\n\t\t\t\t\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\tCurrent Token Issuance\n\t\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t\t{getDisplayRate(tokenYield)}%\n\t\t\t\t\t

\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\tCurrent Interest Rate\n\t\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t\t{getDisplayRate(poolAssetData.borrowRate)}%\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t

\n\t\t\t\t\t\tPrincipal\n\t\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(Principal, assetCode)}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t setShowRepayModal(false)}\n\t\t\t\tposition={position}\n\t\t\t\tpAssetData={poolAssetData}\n\t\t\t/>\n\t\t
\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Lend } from 'yieldblox-js';\nimport { AssetIcon, Button, Card, WithdrawModal, ManageCollateralModal } from 'components';\nimport { GreenText } from 'theme';\nimport { usePrices, useYieldBlox } from 'contexts';\nimport { mathHelper } from 'utils/protocol';\nimport { getAdjDisplayBalance, getCollateralRate, getDisplayBalance, getDisplayRate } from 'utils';\n\nimport { YBX_TOKEN } from 'config/constants';\n\nconst Container = styled(Card)`\n\tmin-width: 294px;\n\twidth: 250px;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tpadding: 0;\n\tmargin: 10px;\n`;\n\nconst Divider = styled.div`\n\twidth: 100%;\n\theight: 2px;\n\tbackground: ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst Row = styled.div`\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: flex-start;\n\tpadding: 16px;\n`;\n\nconst Title = styled.div`\n\tfont-weight: bold;\n\tfont-size: 22px;\n\tline-height: 29px;\n`;\n\nconst Status = styled.div`\n\tbackground: ${({ theme }) => theme.colors.green1};\n\tpadding: 2px 8px;\n\tborder-radius: 16px;\n`;\n\nconst Block = styled.div`\n\twidth: 50%;\n\tpadding: 16px;\n`;\n\ninterface IProps {\n\tposition: Lend;\n}\n\n// TODO: Morning alex refactor this to return two seprate things\nexport const LendTile: React.FC = ({ position }) => {\n\tconst { getPoolAssetDataFromToken } = useYieldBlox();\n\tconst { prices } = usePrices();\n\n\tconst poolAssetData = getPoolAssetDataFromToken(position.assetId);\n\tconst assetCode = poolAssetData.poolAsset.underlyingId.split(':')[0];\n\n\tconst pricePair = prices[poolAssetData.poolAsset.underlyingId];\n\tconst ybxPrice = prices[YBX_TOKEN];\n\tconst tokenYield = mathHelper.CalculateTokenYield(\n\t\tpoolAssetData.yTokenIssuance,\n\t\tpoolAssetData.yTokenRate,\n\t\tpricePair?.rate,\n\t\tybxPrice?.rate ?? 1\n\t);\n\n\tconst underlyingBalance = parseFloat(position.balance) * poolAssetData.yTokenRate;\n\tconst underlyingUnCollat = parseFloat(position.uncollateralizedBalance) * poolAssetData.yTokenRate;\n\tconst totalValue = underlyingBalance + underlyingUnCollat;\n\n\tconst [showWithdrawModal, setShowWithdrawModal] = useState(false);\n\tconst [showCollateralModal, setShowCollateralModal] = useState(false);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\n\t\t\t\t\t
\n\t\t\t\t\t\t{assetCode}\n\t\t\t\t\t\t

{getDisplayBalance(totalValue, assetCode)}

\n\t\t\t\t\t\t${getAdjDisplayBalance(totalValue, pricePair?.rate)}\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\tLent\n\t\t\t\t\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\tCurrent Token Issuance\n\t\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t\t{getDisplayRate(tokenYield)}%\n\t\t\t\t\t

\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t\t\tCurrent Interest Rate\n\t\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t\t{getDisplayRate(poolAssetData.lendRate)}%\n\t\t\t\t\t

\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t

\n\t\t\t\t\t\tCollateral\n\t\t\t\t\t

\n\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{getCollateralRate(position)}%

\n\t\t\t\t\t\t\t{getDisplayBalance(underlyingBalance, assetCode)}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t setShowWithdrawModal(false)}\n\t\t\t\tposition={position}\n\t\t\t\tpAssetData={poolAssetData}\n\t\t\t/>\n\t\t\t setShowCollateralModal(false)}\n\t\t\t\tpAssetData={poolAssetData}\n\t\t\t\tlend={position}\n\t\t\t/>\n\t\t
\n\t);\n};\n","import { useUser, useYieldBlox } from 'contexts';\nimport { PositionType } from 'mocks/models';\nimport React from 'react';\nimport styled from 'styled-components';\nimport { Borrow, Lend } from 'yieldblox-js';\nimport { BorrowTile } from './BorrowTile';\nimport { LendTile } from './LendTile';\n\nconst Container = styled.div`\n\tdisplay: flex;\n\tflex-wrap: wrap;\n`;\n\ninterface IProps {\n\ttype: Maybe;\n}\n\nexport const MyPositions: React.FC = ({ type }) => {\n\tconst { pool } = useYieldBlox();\n\tconst { user } = useUser();\n\n\tlet lentPositions: Lend[] = [];\n\tlet borrowPositions: Borrow[] = [];\n\tif (type === undefined || type === PositionType.Lend) {\n\t\tlentPositions = user.positions?.getLentPositionsForPool(pool.id) ?? [];\n\t}\n\tif (type === undefined || type === PositionType.Borrow) {\n\t\tborrowPositions = user.positions?.getBorrowedPositionsForPool(pool.id) ?? [];\n\t}\n\t// order positions by most recently modified\n\tconst poolPositions = [...lentPositions, ...borrowPositions].sort((a, b) =>\n\t\ta.lastModifiedTime.getTime() > b.lastModifiedTime.getTime() ? -1 : 1\n\t);\n\n\treturn (\n\t\t\n\t\t\t{poolPositions.map(position =>\n\t\t\t\tposition instanceof Lend ? (\n\t\t\t\t\t\n\t\t\t\t) : (\n\t\t\t\t\t\n\t\t\t\t)\n\t\t\t)}\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { AccountOverview, Divider, SectionTitle, Toggle } from 'components';\nimport { MyPositions } from './MyPositions';\nimport { useWallet } from 'contexts';\nimport { PositionType } from 'mocks/models';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\nexport const Profile = () => {\n\tconst { connected } = useWallet();\n\n\tconst [status, setStatus] = useState(0);\n\n\treturn (\n\t\t<>\n\t\t\t\n\n\t\t\t{connected && (\n\t\t\t\t<>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t setStatus(value)}\n\t\t\t\t\t\t\tstyle={{ width: 200 }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Card, EscrowInfo } from 'components';\nimport { Grid, Tooltip } from '@material-ui/core';\nimport { GreenText } from 'theme';\n\nimport questionIcon from 'assets/images/icn_question.png';\nimport { useUser } from 'contexts';\nimport { getFormattedNumber } from 'utils';\n\nconst DetailCard = styled(Card)`\n\twidth: 100%;\n\theight: 110px;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-size: 18px;\n\tline-height: 24px;\n\n\th5 {\n\t\tmin-width: 50%;\n\t\tmargin-right: 10px;\n\t\ttext-align: center;\n\t}\n`;\n\nconst HelpIcon = styled.img`\n\tposition: absolute;\n\ttop: 10px;\n\tright: 10px;\n`;\n\nconst ToolText = styled.text`\n\tfont: DM Sans;\n\tfont-size: 14px;\n`;\n\nexport const GovernanceOverview = () => {\n\tconst { votingPower, activeVotes } = useUser();\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
{getFormattedNumber(votingPower)}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tVoting\n\t\t\t\t\t\t\t\t

power

\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tThe total number of votes you have based on Escrowed YBX.\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tarrow\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
{getFormattedNumber(activeVotes)}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t

Active

\n\t\t\t\t\t\t\t\tvotes\n\t\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tThe number of votes you have cast on active governance proposals.\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tarrow\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Button, Card, ProposalTag } from 'components';\n\nimport yesIcon from 'assets/images/icn_yes.svg';\nimport noIcon from 'assets/images/icn_no.svg';\nimport checkIcon from 'assets/images/icn_check_circle.svg';\nimport editIcon from 'assets/images/icn_edit.svg';\nimport { Proposal } from 'mocks/models';\nimport { ProposalStatus, XdrProposal } from 'yieldblox-js';\nimport { useUser } from 'contexts';\nimport { getPublicKey } from '@stellar/freighter-api';\nimport { getDisplayRate, getFormattedNumber, getShortenWalletAddress } from 'utils';\nimport { XdrProposalData } from 'types';\n\nconst Container = styled(Card)`\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tmargin: 8px 0;\n\tflex-wrap: wrap;\n\n\tb {\n\t\tline-height: 34px;\n\t}\n`;\n\nconst Column = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tmargin: 10px;\n`;\n\nconst Description = styled.p`\n\tcolor: ${({ theme }) => theme.colors.grey2};\n`;\n\nconst VoteWrapper = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\n\timg {\n\t\theight: 14px;\n\t\tmargin: 4px;\n\t}\n`;\n\nconst VerticalDivider = styled.div`\n\twidth: 1px;\n\tbackground: ${({ theme }) => theme.colors.light_grey3};\n\theight: 20px;\n\tmargin: 0 20px;\n`;\n\nconst Status = styled.div<{ status?: boolean }>`\n\tborder-radius: 16px;\n\tbackground: ${({ theme, status }) => (status ? theme.colors.green1 : theme.colors.yellow1)};\n\tcolor: ${({ theme, status }) => (status ? theme.colors.green : theme.colors.yellow)};\n\tpadding: 1px;\n\tdisplay: flex;\n\talign-items: center;\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n\n\timg {\n\t\theight: 20px;\n\t}\n`;\n\ninterface IProps {\n\tpropData: XdrProposalData;\n\tsetProposal: (proposal: XdrProposalData) => void;\n}\n\nexport const ProposalItem: React.FC = ({ propData, setProposal }) => {\n\tconst { proposal, yes, no, quorumPct } = propData;\n\n\treturn (\n\t\t setProposal(propData)}>\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\t{proposal.title}\n\t\t\t\t

\n\t\t\t\t{proposal.description?.substring(0, 32)}...\n\t\t\t
\n\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\tAccount\n\t\t\t\t

\n\t\t\t\t{getShortenWalletAddress(proposal.id)}\n\t\t\t
\n\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\tCurrent Votes\n\t\t\t\t

\n\t\t\t\t\n\t\t\t\t\t

{getFormattedNumber(yes)}

\n\t\t\t\t\t\"\"\n\t\t\t\t\t\n\t\t\t\t\t

{getFormattedNumber(no)}

\n\t\t\t\t\t\"\"\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\tQuorum Percentage\n\t\t\t\t

\n\t\t\t\t{getDisplayRate(quorumPct)}\n\t\t\t
\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport { Button, Card, ProposalTag } from 'components';\n\nimport yesIcon from 'assets/images/icn_yes.svg';\nimport noIcon from 'assets/images/icn_no.svg';\nimport checkIcon from 'assets/images/icn_check_circle.svg';\nimport editIcon from 'assets/images/icn_edit.svg';\nimport { Proposal } from 'mocks/models';\nimport { AllocationProposal, ProposalStatus } from 'yieldblox-js';\nimport { AllocationProposalData } from 'types';\nimport { getFormattedNumber, getShortenWalletAddress, getTimeDifference } from 'utils';\n\nconst Container = styled(Card)`\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tmargin: 8px 0;\n\tflex-wrap: wrap;\n\n\tb {\n\t\tline-height: 34px;\n\t}\n`;\n\nconst Column = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tmargin: 10px;\n`;\n\nconst Description = styled.p`\n\tcolor: ${({ theme }) => theme.colors.grey2};\n`;\n\nconst VoteWrapper = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\n\timg {\n\t\theight: 14px;\n\t\tmargin: 4px;\n\t}\n`;\n\nconst VerticalDivider = styled.div`\n\twidth: 1px;\n\tbackground: ${({ theme }) => theme.colors.light_grey3};\n\theight: 20px;\n\tmargin: 0 20px;\n`;\n\ninterface IProps {\n\tallocationData: AllocationProposalData;\n\tonClick: () => void;\n}\n\nexport const AllocationItem: React.FC = ({ allocationData, onClick }) => {\n\tconst { proposal, votes, total } = allocationData;\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\tAllocation Proposal\n\t\t\t\t

\n\t\t\t\tDetermine the allocation of YBX...\n\t\t\t
\n\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\tAccount\n\t\t\t\t

\n\t\t\t\t{getShortenWalletAddress(proposal.id)}\n\t\t\t
\n\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\tTotal Votes\n\t\t\t\t

\n\t\t\t\t\n\t\t\t\t\t

{getFormattedNumber(total)}

\n\t\t\t\t
\n\t\t\t
\n\n\t\t\t\n\t\t\t\t

\n\t\t\t\t\tTime Left\n\t\t\t\t

\n\t\t\t\t{getTimeDifference(7 * 24 * 60 * 60 * 1000 + proposal.lastModifiedTime.getTime())}\n\t\t\t
\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
\n\t);\n};\n","import React, { useEffect, useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { BalanceLine, ProposalType, STELLAR_ZERO, VoteEvent, YBX_TOKEN } from 'yieldblox-js';\nimport {\n\tProposalTag,\n\tIModalProps,\n\tInput,\n\tModal,\n\tModalFooter,\n\tModalHeader,\n\tTable,\n\tToggle,\n\tConfirmActionModal,\n\tAssetIcon,\n} from 'components';\nimport { GreenText } from 'theme';\n\nimport PropAllocIcon from 'assets/images/icn_prop_alloc.png';\nimport LinkIcon from 'assets/images/icn_link.svg';\nimport { AllocationProposalData, PoolAssetData, TxType } from 'types';\nimport { getDisplayBalance, getDisplayRate, getFormattedNumber, getShortenWalletAddress } from 'utils';\nimport { useUser, useWallet, useYieldBlox } from 'contexts';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\nimport { Grid } from '@material-ui/core';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\twidth: 100%;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 8px 0;\n`;\n\nconst PropIcon = styled.img`\n\twidth: 30px;\n\theight: 30px;\n`;\n\nconst ContentWrapper = styled.div`\n\twidth: 100%;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tbox-shadow: 0px 7px 13px ${({ theme }) => theme.colors.shadow};\n\tborder-radius: 18px;\n\tpadding: 19px 25px 6px 25px;\n`;\n\nconst Status = styled.div<{ secondary?: boolean; border?: boolean }>`\n\tcolor: ${({ theme, secondary }) => (secondary ? theme.colors.yellow : theme.colors.green)};\n\tbackground: ${({ theme, secondary }) => (secondary ? theme.colors.yellow1 : theme.colors.green1)};\n\tborder-color: ${({ theme, secondary }) => (secondary ? theme.colors.yellow : theme.colors.green)};\n\tpadding: 2px 16px;\n\tborder-radius: 16px;\n\tborder-style: solid;\n\tborder-width: ${({ border }) => (border ? '0.5px' : 0)};\n\tfont-size: 16px;\n`;\n\nconst Flex = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n`;\n\ninterface IProps extends IModalProps {\n\tallocationData: AllocationProposalData;\n}\n\nexport const AllocationModal: React.FC = ({ open, onClose, allocationData }) => {\n\tconst { proposal, votes, total } = allocationData;\n\tconst { user, votingPower } = useUser();\n\tconst { poolAssets, ybxAsset } = useYieldBlox();\n\tconst { walletAddress, runContract } = useWallet();\n\tconst theme = useTheme();\n\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [isBorrow, setIsBorrow] = useState(false);\n\tconst [userVotes, setUserVotes] = useState([]);\n\tconst [totalVotes, setTotalVotes] = useState(0);\n\tconst [loadingVotes, setLoadingVotes] = useState(false);\n\n\tconst ybxVotes = parseFloat(votes.find(v => v.assetId === YBX_TOKEN)?.amount ?? '0');\n\tconst [ybxAmount, setYbxAmount] = useState('0');\n\n\tconst remainingVotes = votingPower - totalVotes;\n\n\tconst handleVote = (vote: BalanceLine) => {\n\t\tlet asNumber = Number(vote.amount);\n\t\tif (Number.isFinite(asNumber)) {\n\t\t\tvote.amount = asNumber.toFixed(7); // format string stellar style\n\t\t\t// truncate vote to 7 decimals, ensure its actually a number\n\t\t\tlet newUserVotes = [...userVotes];\n\t\t\tlet matchIndex = userVotes.findIndex(v => v.assetId === vote.assetId);\n\t\t\tif (matchIndex !== -1 && vote.amount === STELLAR_ZERO) {\n\t\t\t\tnewUserVotes.splice(matchIndex, 1);\n\t\t\t}\n\n\t\t\tif (vote.amount !== STELLAR_ZERO) {\n\t\t\t\tif (matchIndex !== -1) {\n\t\t\t\t\tnewUserVotes[matchIndex] = vote;\n\t\t\t\t} else {\n\t\t\t\t\tnewUserVotes.push(vote);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet newTotalVotes = newUserVotes.reduce(\n\t\t\t\t(prev: number, vote: BalanceLine): number => prev + Number(vote.amount),\n\t\t\t\t0\n\t\t\t);\n\t\t\tsetUserVotes(newUserVotes);\n\t\t\tsetTotalVotes(newTotalVotes);\n\t\t}\n\t};\n\n\tconst processTransaction = async () => {\n\t\tif (userVotes.length > 0 && walletAddress) {\n\t\t\tlet voteEvent = new VoteEvent(walletAddress, proposal.id, userVotes, ProposalType.ALLOCATION);\n\t\t\tawait runContract(voteEvent);\n\t\t}\n\t};\n\n\tconst handleYbx = (value: string) => {\n\t\tsetYbxAmount(value);\n\t\tlet vote = {\n\t\t\tamount: Number(value).toFixed(7),\n\t\t\tassetId: YBX_TOKEN,\n\t\t};\n\t\thandleVote(vote);\n\t};\n\n\tconst isValid = () => {\n\t\treturn remainingVotes >= 0;\n\t};\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tsetIsBorrow(false);\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessTransaction();\n\t\thandleClose();\n\t};\n\n\tuseEffect(() => {\n\t\tconst loadAllocationVotes = async () => {\n\t\t\tif (user.id) {\n\t\t\t\tsetLoadingVotes(true);\n\t\t\t\tlet votes = await proposal.getVotesForAccount(user.id);\n\t\t\t\tsetUserVotes(votes);\n\t\t\t\tconst currentYbxVotes = votes.find(v => v.assetId === YBX_TOKEN)?.amount ?? '0';\n\t\t\t\tsetYbxAmount(currentYbxVotes);\n\n\t\t\t\tlet currentTotalVotes = votes.reduce((prev: number, v: BalanceLine) => prev + parseFloat(v.amount), 0);\n\t\t\t\tsetTotalVotes(currentTotalVotes);\n\t\t\t\tsetLoadingVotes(false);\n\t\t\t}\n\t\t};\n\t\tloadAllocationVotes().catch(console.error);\n\t}, [open]);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t
Allocation Proposal
\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tAccount\n\t\t\t\t\t\t

{getShortenWalletAddress(proposal.id)}

\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\twindow.open(\n\t\t\t\t\t\t\t\t\t\t'https://docs.ybx.script3.io/user-docs/governance#ybx-incentive-allocations',\n\t\t\t\t\t\t\t\t\t\t'allocation'\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tMore Information\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tRemaining Votes\n\t\t\t\t\t\t{getDisplayBalance(remainingVotes, '')}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tCode\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tLast Allocation\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tPending Allocation\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tYour votes\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tYBX\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{getDisplayRate(ybxAsset?.data?.lendingAllocation)}\n\t\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{getDisplayRate(ybxVotes / total)}\n\t\t\t\t\t\t\t\t\t%\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t handleYbx(e.target.value)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t setIsBorrow(value === 1)}\n\t\t\t\t\t\t\t\tstyle={{ width: 200 }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t{Object.values(poolAssets).map((item, idx) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t))}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setShowConfirm(true)}\n\t\t\t\t\t\tdisabled={!isValid()}\n\t\t\t\t\t\terrorMessage=\"Cannot vote with more than your alloted votes.\"\n\t\t\t\t\t>\n\t\t\t\t\t\tVote\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tProposal\n\t\t\t\t\t\t{getShortenWalletAddress(proposal.id)}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tVotes\n\t\t\t\t\t\n\t\t\t\t\t{userVotes\n\t\t\t\t\t\t.filter(v => v.assetId.startsWith('YBX'))\n\t\t\t\t\t\t.map((vote, idx) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t

{vote.assetId.split(':')[0]}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

{getFormattedNumber(Number(vote.amount))}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t))}\n\t\t\t\t\t\n\t\t\t\t\t\tLending Allocations\n\t\t\t\t\t\n\t\t\t\t\t{userVotes\n\t\t\t\t\t\t.filter(v => v.assetId.startsWith('y'))\n\t\t\t\t\t\t.map((vote, idx) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t

{vote.assetId.split(':')[0].substring(3)}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

{getFormattedNumber(Number(vote.amount))}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t))}\n\t\t\t\t\t\n\t\t\t\t\t\tBorrowing Allocations\n\t\t\t\t\t\n\t\t\t\t\t{userVotes\n\t\t\t\t\t\t.filter(v => v.assetId.startsWith('l'))\n\t\t\t\t\t\t.map((vote, idx) => (\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t

{vote.assetId.split(':')[0].substring(3)}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t

{getFormattedNumber(Number(vote.amount))}

\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t))}\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n\ninterface IAllocationItem {\n\titem: PoolAssetData;\n\tvotes: BalanceLine[];\n\tuserVotes: BalanceLine[];\n\ttotal: number;\n\tisBorrow: boolean;\n\tloadingVotes: boolean;\n\tonChange: (vote: BalanceLine) => void;\n}\n\nconst AllocationItem = ({ item, votes, userVotes, total, isBorrow, loadingVotes, onChange }: IAllocationItem) => {\n\tconst theme = useTheme();\n\tconst assetId = item.poolAsset.underlyingId;\n\tconst assetCode = assetId.split(':')[0];\n\n\t// lending info\n\tconst yTokenId = item.poolAsset.poolTokenId;\n\tconst yTokenTotalVotes = parseFloat(votes.find(v => v.assetId === yTokenId)?.amount ?? '0');\n\tconst yTokenPercentage = yTokenTotalVotes / total;\n\tconst yTokenAllocation = item.poolAsset.data.lendingAllocation;\n\n\t// borrow info\n\tconst lTokenId = item.poolAsset.liabilityTokenId;\n\tconst lTokenTotalVotes = parseFloat(votes.find(v => v.assetId === lTokenId)?.amount ?? '0');\n\tconst lTokenPercentage = lTokenTotalVotes / total;\n\tconst lTokenAllocation = item.poolAsset.data.borrowingAllocation;\n\n\tconst [amountBorrow, setAmountBorrow] = useState('0');\n\tconst [amountLend, setAmountLend] = useState('0');\n\n\tuseEffect(() => {\n\t\tif (!loadingVotes) {\n\t\t\tconst lTokenCurrentVotes = userVotes.find(v => v.assetId === lTokenId)?.amount ?? '0';\n\t\t\tsetAmountBorrow(lTokenCurrentVotes);\n\t\t\tconst yTokenCurrentVotes = userVotes.find(v => v.assetId === yTokenId)?.amount ?? '0';\n\t\t\tsetAmountLend(yTokenCurrentVotes);\n\t\t}\n\t}, [loadingVotes]);\n\n\tconst handleChange = (value: string) => {\n\t\tlet vote: BalanceLine;\n\t\tif (isBorrow) {\n\t\t\tsetAmountBorrow(value);\n\t\t\tvote = {\n\t\t\t\tamount: Number(value).toFixed(7),\n\t\t\t\tassetId: lTokenId,\n\t\t\t};\n\t\t} else {\n\t\t\tsetAmountLend(value);\n\t\t\tvote = {\n\t\t\t\tamount: Number(value).toFixed(7),\n\t\t\t\tassetId: yTokenId,\n\t\t\t};\n\t\t}\n\t\tonChange(vote);\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{assetCode}\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{getDisplayRate(isBorrow ? lTokenAllocation : yTokenAllocation)}\n\t\t\t\t\t%\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{getDisplayRate(isBorrow ? lTokenPercentage : yTokenPercentage)}\n\t\t\t\t\t%\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t handleChange(e.target.value)}\n\t\t\t\t/>\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Button, Card, Divider, ProposalModal, SectionTitle, Toggle } from 'components';\nimport { GovernanceOverview } from './GovernanceOverview';\nimport { ProposalItem } from './ProposalItem';\n\nimport { useWallet, useYieldBlox } from 'contexts';\nimport { XdrProposalData } from 'types';\nimport { AllocationItem } from './AllocationItem';\nimport ybxIcon from 'assets/images/icn_ybx.svg';\nimport { AllocationModal } from 'components/modals/AllocationModal';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\nconst NoConnectedCard = styled(Card)`\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding-right: 20px;\n\tpadding-right: 20px;\n\tbackground: linear-gradient(\n\t\t90deg,\n\t\t${({ theme }) => theme.colors.light_grey1} 0%,\n\t\t${({ theme }) => theme.colors.white} 100%\n\t);\n`;\n\nconst NoConnectedDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-bottom: 2rem;\n\tmargin-right: 2rem;\n\n\timg {\n\t\theight: 60px;\n\t\tmargin-right: 1rem;\n\t}\n\n\tb {\n\t\tfont-size: 20px;\n\t\tline-height: 33px;\n\t\tfont-weight: 500;\n\t}\n`;\n\nexport const Governance = () => {\n\tconst { connected, connect } = useWallet();\n\tconst { xdrProposals, allocationProposal} = useYieldBlox();\n\n\tconst [status, setStatus] = useState(0);\n\tconst [proposal, setProposal] = useState>(undefined);\n\tconst [showAllocationModal, setShowAllocationModal] = useState(false);\n\tconst [showProposalModal, setShowProposalModal] = useState(false);\n\n\tconst handleSetProposal = (proposal: XdrProposalData) => {\n\t\tsetProposal(proposal);\n\t\tsetShowProposalModal(true);\n\t};\n\n\tconst handleCloseProposalModal = () => {\n\t\tsetShowProposalModal(false);\n\t};\n\n\tconst handleShowAllocationModal = () => {\n\t\tsetShowAllocationModal(true);\n\t};\n\n\tconst handleCloseAllocationModal = () => {\n\t\tsetShowAllocationModal(false);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<>\n\t\t\t\t{!connected ? (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\tNo wallet connected!\n\t\t\t\t\t\t\t\t
Please connect a wallet to use YieldBlox.
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t{allocationProposal.proposal && (\n\t\t\t\t\t\n\t\t\t\t)}\n\t\t\t\t
\n\t\t\t\t\t{xdrProposals.map((proposal, idx) => (\n\t\t\t\t\t\t\n\t\t\t\t\t))}\n\t\t\t\t
\n\t\t\t\n\t\t\t{proposal && (\n\t\t\t\t\n\t\t\t)}\n\t\t\t{allocationProposal.proposal && (\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAN7SURBVHgBvZjPTxNBFMe/2wiKUFNJKImhuh6IerInezBivWKM9OYNjCZcONgDZ/sPmGDiwXgREm8mYuQPsMSjRjRGhYi0SoAWIy0tP0pbGd/r7tZud9suZeoned129nXmu29m3uyMgiYQQgTpcpGMr34yj25MmiyuW5RsVlGUD2gVJMZDdp8sJg5OjGyYTIVMdEEpcXhiXBcOCz8h2ZyQT0w0Gz2hhV5GlGrBdQ81I+p/MWyn4YiNqCEUspPi0wNTudI/ArhVaw27CYivj81lfYNQvJdg+9DvI+aC0zcmqU3QzJ2qKUxo/f4U+wXg54y5ws4+KOfuwtLQr7cWX7R1AXbCUp+tvj0B/pygtjmtxI1iV9VfX4Pz0dFuqvyE+c7iM2BnzVxWyALzT2CBG898N5eJIsSXRxZXpcMLaDlwurK8HDGhTWO1fIefupAxiRBv7gBnbkLp9kNsLwOx5yR21dIYCluarxqiLr0MkflG6fYFkF2y+nb0Gt/8pCFCUYuUBOuiVGjRUstCueLfrUvYBsr1KAXBbfzkVeMsiUsbXRmsFFWi04eWw8PlnyiGu/QefzGEWbOxqx0tp/2kXWkpfbioG3kRVi237VKDbDp67Ep5tQlyxIK2fzKHuDVoM9IOP8/Kq3Z3lN4reJUMY2ZmFa0gEOjGrcAAuuxvBxUK2xy0dypbpqeXMTb2jmYupBEOn8f4+IV6LnHuSrWeRyjkw+hoP2Th8x1vJIrxsDBPI6+BgR7IYnDwlBM3j8uJl9vdBll0dR1x5MfC0o2c8vk/kEUut+/ELe1IWDK5B1msrOw4cSsN/oYL4tLSFmSxvp5z4vaDhc028srl5HVlIuFIWNRRxObnM5CFw66MuugVIwptc1qT7e0iZLG3t49Coe4EiPMG2UgXU/U8Uyl5g59pELUIfxjCJlBndi4uyhv8TDJZc5zFoY/5kjB+Y6TLQztPDnuxKHGhJNbWagqbMjYk5cyvv2tbJsLCQhaySSR27Yrjxvu+SZhOCFVdms3mIZvNzUJ1Ebd5rbLAJEwPY9hcibwZaWCTZG9X7ikZy4pKDqWdMXjjCx4Pu/B6j0EmGxv5alEv4RQ+KhCtP1QZQTMI7RgqJuTDR1sqDgtVEpEkkKMUgUyEFr0R0fxRJz+cBw5R0ARC24vy7ioIbc/AVnk4zMY5MUr2UV+PD8RfR8smRwqE+FIAAAAASUVORK5CYII=\"","import React, { useEffect, useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { Table, Input, Button } from 'components';\nimport { Tooltip } from '@material-ui/core';\nimport { useWallet, useYieldBlox, useUser, useTurret } from 'contexts';\nimport { getDisplayBalance, getShortenWalletAddress } from 'utils';\n\nimport questionIcon from 'assets/images/icn_question.png';\nimport turretIcon from 'assets/images/icn_turret.png';\nimport { Turret } from 'yieldblox-js';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n`;\n\nconst TableDiv = styled.div`\n\twidth: 100%;\n\toverflow-x: auto;\n\tborder-radius: 18px;\n\tposition: relative;\n`;\n\nconst TurretIcon = styled.img`\n\twidth: 38px;\n\theight: 38px;\n`;\n\nconst ToolText = styled.text`\n\tfont: DM Sans;\n\tfont-size: 14px;\n`;\n\ninterface IProps {\n\tonClick: (item: Turret) => void;\n}\n\nexport const TurretNetwork: React.FC = ({ onClick }) => {\n\tconst theme = useTheme();\n\tconst { turrets } = useYieldBlox();\n\n\tconst { loadBalances, feeBalances } = useTurret();\n\n\tconst getRow = (turret: Turret, idx: number) => {\n\t\tconst feeBalance = feeBalances[turret.turretId];\n\t\treturn (\n\t\t\t onClick(turret)} style={{ cursor: 'pointer' }}>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{turret.rootUrl.replace('https://', '')}\n\t\t\t\t\t\t\t

{getShortenWalletAddress(turret.accountId)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t{feeBalance !== undefined ? (\n\t\t\t\t\t\t{getDisplayBalance(feeBalance, 'XLM')}\n\t\t\t\t\t) : (\n\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tloadBalances();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tFetch Balance\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n\n\tconst rows = turrets.map((turret, idx) => getRow(turret, idx));\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{rows}\n\t\t\t
Turret ID/Root URL\n\t\t\t\t\t\t\tThe amount of XLM you're providing to this turret.\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tarrow\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tFee Balance\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t
\n\t);\n};\n","export default __webpack_public_path__ + \"static/media/green_i_icn.65e9a219.svg\";","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { BalanceLine, MintEvent, NATIVE, POOL_ACCOUNT_1_ID, STELLAR_MIN, Turret } from 'yieldblox-js';\nimport { AssetIcon, Button, Card, IModalProps, Input, Modal, ModalFooter, ModalHeader } from 'components';\nimport { GreenText } from 'theme';\nimport { ConfirmActionModal } from './ConfirmActionModal';\nimport { PoolAssetData, TxType } from 'types';\nimport { usePrices, useTurret, useUser, useWallet, useYieldBlox } from 'contexts';\nimport { mathHelper } from 'utils/protocol';\nimport { getAdjBalance, getAdjDisplayBalance, getDisplayBalance, getDisplayRate, getShortenWalletAddress } from 'utils';\n\nimport arrowIcon from 'assets/images/icn_arrow_right.svg';\nimport { TooltipButton } from 'components/common/Button/TooltipButton';\nimport turretIcon from 'assets/images/icn_turret.png';\nimport { YBX_TOKEN } from 'config/constants';\nimport BigNumber from 'bignumber.js';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst TurretIcon = styled.img`\n\twidth: 38px;\n\theight: 38px;\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n\n\tp {\n\t\tcolor: ${({ theme }) => theme.colors.grey2};\n\t}\n`;\n\nconst DetailCard = styled(Card)`\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tpadding: 12px 15px;\n\tdisplay: flex;\n\talign-items: center;\n\tfont-weight: 500;\n\theight: 64px;\n\n\tp {\n\t\tcolor: ${({ theme }) => theme.colors.black};\n\t}\n`;\n\ninterface IProps extends IModalProps {\n\tturret: Turret;\n}\n\nexport const TurretModal: React.FC = ({ open, onClose, turret }) => {\n\tconst { walletAddress } = useWallet();\n\tconst { contractHash } = useYieldBlox();\n\tconst { user } = useUser();\n\tconst { prices } = usePrices();\n\tconst { loadBalances, feeBalances, payFees } = useTurret();\n\tconst theme = useTheme();\n\n\tconst [showConfirm, setShowConfirm] = useState(false);\n\tconst [depositAmount, setDepositAmount] = useState('');\n\n\tconst availableXlm = Number(user.id ? user.getBalance(NATIVE) ?? '0' : '0');\n\tconst feeBalance = feeBalances[turret.turretId];\n\tconst xlmPricePair = prices[NATIVE];\n\n\tconst xlmFee = 1000 / turret.info.divisor.run;\n\n\tconst handleClose = () => {\n\t\tsetShowConfirm(false);\n\t\tsetDepositAmount('');\n\t\tif (onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleConfirm = async () => {\n\t\tprocessFeePayment();\n\t\thandleClose();\n\t};\n\n\tconst processFeePayment = async () => {\n\t\tif (walletAddress) {\n\t\t\tlet amountXlm = Number(depositAmount);\n\t\t\tif (Number.isFinite(amountXlm) && amountXlm >= 0.01) {\n\t\t\t\tawait payFees(turret.turretId, amountXlm.toFixed(7));\n\t\t\t}\n\t\t}\n\t};\n\n\tconst isValid = () => {\n\t\tif (isNaN(Number(depositAmount)) || Number(depositAmount) < 0.1) {\n\t\t\treturn false;\n\t\t}\n\t\treturn Math.min(availableXlm, 10) >= Number(depositAmount);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tAdd Turret Fees\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{turret.rootUrl}\n\t\t\t\t\t\t\t

{getShortenWalletAddress(turret.accountId)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tVersion\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{turret.info.version}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tHorizon\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{turret.info.horizon}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tRuntime Fee\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{`${xlmFee.toFixed(7)} XLM/sec`}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tContract Signer\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{getShortenWalletAddress(turret.signerId)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tHash\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t

{contractHash}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t{feeBalance !== undefined ? (\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tCurrent Balance\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t{getDisplayBalance(feeBalance, 'XLM')}\n\t\t\t\t\t\t\t\t

${getAdjDisplayBalance(feeBalance, xlmPricePair?.rate)}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t) : (\n\t\t\t\t\t\t\n\t\t\t\t\t)}\n\n\t\t\t\t\t\n\t\t\t\t\t\tWallet Balance\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{getDisplayBalance(availableXlm, 'XLM')}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(availableXlm, xlmPricePair?.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\t\tDeposit Amount\n\t\t\t\t\t\t setDepositAmount(e.target.value)}\n\t\t\t\t\t\t\tbuttonText=\"MAX\"\n\t\t\t\t\t\t\tonButtonClick={() => setDepositAmount('10')}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t\t\t setShowConfirm(true)}\n\t\t\t\t\t\tdisabled={!isValid()}\n\t\t\t\t\t\terrorMessage=\"Please select a valid deposit between 0.1 and 10 XLM\"\n\t\t\t\t\t>\n\t\t\t\t\t\tAdd Fees\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\n\t\t\t setShowConfirm(false)}\n\t\t\t\tonConfirm={handleConfirm}\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tFee Deposit Amount\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{`${Number(depositAmount).toFixed(7)} XLM`}\n\t\t\t\t\t\t\t

${getAdjDisplayBalance(Number(depositAmount), xlmPricePair?.rate)}

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\tTurret\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t{turret.rootUrl}\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled, { useTheme } from 'styled-components';\nimport { Card, Divider, SectionTitle } from 'components';\nimport { WalletType } from 'types';\nimport { useUser, useWallet } from 'contexts';\nimport { getDisplayBalance, getShortenWalletAddress } from 'utils';\nimport { TurretNetwork } from './TurretNetwork';\n\nimport albedoIcon from 'assets/images/wallet_albedo.svg';\nimport freighterIcon from 'assets/images/wallet_freighter.svg';\nimport scripteeIcon from 'assets/images/icn_scriptee.svg';\nimport greenIIcon from 'assets/images/green_i_icn.svg';\nimport { NATIVE, XLM_RESERVE, Turret } from 'yieldblox-js';\nimport { TurretModal } from 'components/modals/TurretModal';\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n`;\n\nconst BalanceCard = styled(Card)`\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 0 1rem;\n\toverflow: auto;\n`;\n\nconst DetailWrapper = styled.div`\n\theight: 34px;\n\tborder-radius: 17px;\n\tpadding: 2px;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\n\tp {\n\t\tpadding: 0 10px;\n\t}\n`;\n\nconst IconWrapper = styled.div`\n\twidth: 30px;\n\theight: 30px;\n\tborder-radius: 50%;\n\tbackground: ${({ theme }) => theme.colors.green1};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\twidth: 100%;\n\t}\n`;\n\nexport const TurretPage = () => {\n\tconst theme = useTheme();\n\n\tconst { connected, walletAddress, walletType } = useWallet();\n\tconst { user } = useUser();\n\n\tconst [selectedTurret, setSelectedTurret] = useState>(undefined);\n\tconst [showTurretModal, setShowTurretModal] = useState(false);\n\n\tconst xlmBalance = user.id ? parseFloat(user.getBalance(NATIVE) ?? '0') : 0;\n\n\tconst getWalletLogo = () => {\n\t\tswitch (walletType) {\n\t\t\tcase WalletType.Freighter:\n\t\t\t\treturn freighterIcon;\n\t\t\tcase WalletType.Albedo:\n\t\t\t\treturn albedoIcon;\n\t\t\tdefault:\n\t\t\t\treturn scripteeIcon;\n\t\t}\n\t};\n\n\tconst handleShowTurretModal = (turret: Turret) => {\n\t\tsetSelectedTurret(turret);\n\t\tsetShowTurretModal(true);\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t{connected && (\n\t\t\t\t<>\n\t\t\t\t\t\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

Your wallet's XLM balance

\n\t\t\t\t\t\t\t
{getDisplayBalance(xlmBalance, 'XLM')}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t

{getShortenWalletAddress(walletAddress)}

\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t Stellar Turrets require a small fee to function. Add fees to the the supporting Turrets below to use YieldBlox. \n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t)}\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\n\t\t\t{selectedTurret && user.id && (\n\t\t\t\t setShowTurretModal(false)} />\n\t\t\t)}\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Button, Card, IModalProps, Modal, ModalFooter, ModalHeader } from 'components';\nimport { useWallet } from 'contexts';\n\nimport faucetIcon from 'assets/images/faucetIcon.svg';\n\nconst RowItem = styled.div`\n\tpadding: 14px 40px;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.light_grey3};\n`;\n\nconst Conditions = styled.div`\n\tpadding: 14px 40px;\n\tbackground: ${({ theme }) => theme.colors.light_grey1};\n\tborder-radius: 15px;\n`;\n\nconst RowDetail = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 5px 0;\n`;\n\nconst FaucetCircle = styled.div`\n\tdisplay: flex;\n\twidth: 30px;\n\theight 30px;\n\talign-items: center;\n\tjustify-content: center;\n\tborder-radius: 50%;\n\tbackground: rgba(68, 114, 255, 1);\n\tmargin-right: 16px;\n\n\timg {\n\t\twidth: 24px;\n\t\theight: 24px;\n\t}\n`;\n\ninterface IProps extends IModalProps {}\n\nexport const TosModal: React.FC = ({ open, onClose }) => {\n\tconst { setAcknowledge } = useWallet();\n\n\tconst [acknowledgeLocal, setAcknowledgeLocal] = useState(false);\n\n\tconst handleClose = () => {\n\t\tif (acknowledgeLocal && onClose) {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst handleAcknowledge = (approve: boolean) => {\n\t\tif (approve) {\n\t\t\tsetAcknowledgeLocal(true);\n\t\t\tsetAcknowledge(true);\n\t\t\thandleClose();\n\t\t} else {\n\t\t\t//\n\t\t\tsetAcknowledgeLocal(false);\n\t\t\tsetAcknowledge(false);\n\t\t\twindow.open(`https://yieldblox.com`, '_self');\n\t\t\twindow.close();\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\tYieldBlox Testnet\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tThis is the YieldBlox Protocol on a test network.\n\t\t\t\t\t\n\t\t\t\t\t{/*\n\t\t\t\t\t\tYou hereby agree, warrant, and represent that:\n\t\t\t\t\t*/}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tPlease be aware there may be bugs.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tIf you come across a bug, please raise an issue on the YieldBlox Discord and/or GitHub.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t\t\tTo start, click the Faucet button to create a YieldBlox Testnet account.\n\t\t\t\t\t\t\t

\n\t\t\t\t\t\t
\n\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t
\n\t\t\n\t);\n};\n","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Button, Card, IModalProps, Modal, ModalFooter, ModalHeader, Input } from 'components';\nimport { GreenText } from 'theme';\n\nimport sadSprout from 'assets/images/icn_sprout_sad.svg';\n\nconst Content = styled.div`\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\tpadding: 48px;\n\twidth: 100%;\n`;\n\nconst RowItem = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 10px 0;\n`;\n\nconst IconWrapper = styled.div`\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\n\timg {\n\t\twidth: 80%;\n\t}\n`;\n\ninterface IProps extends IModalProps {}\n\nexport const RegionBlockModal: React.FC = ({ open, onClose }) => {\n\treturn (\n\t\t<>\n\t\t\t {\n\t\t\t\t\tconsole.log('Cannot close Region Block.');\n\t\t\t\t}}\n\t\t\t\twidth={600}\n\t\t\t>\n\t\t\t\tUnsupported Region\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\"\"\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tYieldBlox is not available in your country.\n\t\t\t\t\t\n\t\t\t\t\t window.open(`https://yieldblox.com`, '_self')}>\n\t\t\t\t\t\tYieldBlox Terms of Use\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n","import React, { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Redirect, Route, Switch } from 'react-router-dom';\nimport { Header } from 'components';\nimport { Market } from './Market';\nimport { Profile } from './Profile';\nimport { Governance } from './Governance';\nimport { TurretPage } from './Turret';\nimport { Grid, Snackbar } from '@material-ui/core';\nimport { TosModal } from 'components/modals/TosModal';\nimport { useSettings, useWallet } from 'contexts';\nimport { RegionBlockModal } from 'components/modals/RegionBlockModal';\nimport { toast } from 'react-toastify';\n\nconst Container = styled.div`\n\twidth: 100%;\n\tmin-height: 100vh;\n\toverflow-x: hidden;\n\tbackground: ${({ theme }) => theme.colors.light_grey};\n\tpadding: 1px;\n`;\n\nconst Content = styled.div`\n\tpadding: 50px;\n\twidth: 100%;\n`;\n\nconst Banner = styled.div`\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tflex-wrap: wrap;\n\tflex-direction: row;\n\tpadding: 15px;\n\twidth: 100%;\n\tbackground: rgba(255, 94, 0, 0.15);\n\tcolor: rgba(255, 94, 0, 1);\n\tborder-style: solid;\n\tborder-color: rgba(255, 94, 0, 1);\n\n\tp {\n\t\tmargin-right: 4px;\n\t}\n`;\n\nexport const Main = () => {\n\tconst { acknowledge } = useWallet();\n\tconst { geoCheck } = useSettings();\n\n\tconst [showTosModal, setShowTosModal] = useState(!acknowledge);\n\n\t// useEffect(() => {\n\t// \ttoast.info('The Horizon Testnet server has been having intermittent issues that might affect your experience.', {\n\t// \t\tcloseOnClick: true,\n\t// \t\tautoClose: 10000,\n\t// \t\tbodyStyle: {\n\t// \t\t\tcolor: '#FFFFFF',\n\t// \t\t},\n\t// \t});\n\t// \t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t// }, []);\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t

This is a testnet application.

\n\t\t\t\t\t\n\t\t\t\t\t\t\twindow.open(\n\t\t\t\t\t\t\t\t`https://medium.com/script3/sprout-coma-a-new-horizon-on-the-same-course-da131915e796`,\n\t\t\t\t\t\t\t\t`coma`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\tSee Medium article for more information\n\t\t\t\t\t

\n\t\t\t\t\t

about mainnet.

\n\t\t\t\t
\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t setShowTosModal(false)} />\n\t\t\t {\n\t\t\t\t\tconsole.log('Unable to close geoBlock');\n\t\t\t\t}}\n\t\t\t/>\n\t\t\n\t);\n};\n","import React from 'react';\nimport { ToastContainer } from 'react-toastify';\nimport { ThemeProvider } from 'styled-components';\nimport { ThemedGlobalStyle, lightTheme, darkTheme } from 'theme';\nimport { Main } from 'pages';\nimport { WalletProvider, YieldBloxProvider, PriceProvider, UserProvider } from 'contexts';\nimport { HashRouter } from 'react-router-dom';\nimport { useSettings } from 'contexts/settings';\n\nimport 'react-toastify/dist/ReactToastify.css';\nimport { TurretProvider } from 'contexts/turret';\n\nfunction App() {\n\tconst { theme } = useSettings();\n\n\treturn (\n\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\n\t);\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport { SettingsProvider } from 'contexts';\n\nimport './index.css';\n\nReactDOM.render(\n\t\n\t\t\n\t\t\t\n\t\t\n\t,\n\tdocument.getElementById('root')\n);\n"],"sourceRoot":""}