{"version":3,"sources":["images/logo_horizontal_brand.png","index.js","data/near.js","data/utils.js","data/account.js","data/sales.js","components/sale/RemainingDuration.js","data/token.js","data/refFinance.js","components/common/MutedDecimals.js","components/token/TokenBalance.js","components/token/TokenBadge.js","components/token/TokenAndBalance.js","components/sale/SaleInputOutputs.js","components/token/TokenSymbol.js","components/common/Rate.js","components/sale/SaleRate.js","components/sale/SalePreview.js","pages/SalesPage.js","data/tokenBalances.js","components/account/AccountBalance.js","components/account/LockupAccount.js","components/account/Account.js","components/account/AllReferrals.js","pages/AccountPage.js","components/common/AvailableInput.js","data/salePermission.js","components/sale/Subscription.js","components/sale/ReferralList.js","components/sale/ReferralLink.js","components/sale/PriceHistory.js","components/sale/SaleStats.js","components/sale/Sale.js","pages/SalePage.js","data/treasury.js","components/treasury/Treasury.js","pages/TreasuryPage.js","components/token/TokenSelect.js","components/createSale/CreateSale.js","pages/CreateSalePage.js","components/swap/Swap.js","pages/SwapPage.js","App.js"],"names":["module","exports","ReactDOM","render","document","getElementById","TGas","Big","pow","MaxGasPerTransaction","mul","MaxGasPerTransaction2FA","StorageCostPerByte","TokenStorageDeposit","BridgeTokenStorageDeposit","MaxStorageDeposit","SkywardRegisterStorageDeposit","SubscribeDeposit","CreateSaleDeposit","OneNear","add","MinUsdValue","randomPublicKey","nearAPI","PublicKey","from","isLocalhost","window","location","hostname","noInternetMode","IsMainnet","match","TestNearConfig","networkId","nodeUrl","archivalNodeUrl","contractName","lockupAccountIds","wrapNearAccountId","skywardTokenAccountId","tokenSwapAccountId","walletUrl","storageCostPerByte","refContractName","referralId","noStorageTokens","aurora","MainNearConfig","Array","keys","map","i","oldRefFinanceToken","NearConfig","LsKey","wrapContract","account","contractId","options","nearContract","viewMethods","changeMethods","contract","forEach","methodName","a","toString","indexOf","refreshAllowanceObj","refreshAllowance","keyStore","BrowserLocalStorageKeyStore","Object","assign","deps","nearConnection","_near","nearArchivalConnection","fromConfig","provider","type","args","url","signer","walletConnection","accountId","getAccountId","fetchBlockHash","connection","block","finality","serialize","base_decode","header","hash","fetchBlockHeight","height","fetchNextNonce","getAccessKeys","accessKeys","reduce","nonce","accessKey","Math","max","access_key","sendTransactions","items","callbackUrl","Promise","all","state","blockHash","accountState","maxGasPerTransaction","code_hash","transactions","actions","currentReceiverId","currentTotalGas","push","receiverId","action","actionGas","functionCall","gas","newTotalGas","gt","createTransaction","requestSignTransactions","archivalViewCall","blockId","query","request_type","account_id","method_name","args_base64","Buffer","JSON","stringify","block_id","result","length","parse","viewCall","defaultNear","resolve","_initNear","useNear","singletonHook","ValidAccountRe","OneSkyward","AccountSafetyMargin","div","LowUsdValue","skywardUrl","protocol","host","hardcodedWhitelist","50","86","94","Loading","className","role","aria-hidden","isValidAccountId","isArray","keysToCamel","o","isObject","n","k","s","replace","$1","toUpperCase","bigMin","b","lt","bigToString","p","len","abs","toFixed","pos","ap","min","substring","slice","dateToString","d","toLocaleString","day","month","year","fromTokenBalance","token","balance","invalidAccount","notFound","metadata","decimals","toTokenBalance","availableNearBalance","loading","amount","sub","storage_usage","referralLsKey","saleId","getCurrentReferralId","refLsKey","ref","ls","get","expires","Date","getTime","computeUsdBalance","refFinance","tokenAccountId","nearPrice","prices","balanceIn","totalOther","balanceOut","totalNear","amountWithFee","round","isBridgeToken","endsWith","isoDate","toISOString","isSaleWhitelisted","sale","whitelistedTokens","has","inTokenAccountId","outTokens","some","outToken","isLowValueSale","sum","usdBalance","distributed","remaining","lte","defaultAccount","balances","near","mapLockupAccount","lockupAccountId","startTimestamp","cliffTimestamp","endTimestamp","startDate","cliffDate","endDate","claimedBalance","started","ended","duration","passedDuration","currentBalance","unclaimedBalance","remainingBalance","hasBalance","getLockupAccount","viewFunction","loadAccount","setAccount","lockupAccount","refresh","balances_of","promises","rawBalances","rawBalance","useAccount","useState","useEffect","then","defaultSales","sales","saleRefreshTimers","addSaleMethods","remainingDuration","farAhead","startTime","currentTime","mapSale","treasuryUnclaimed","inTokenRemaining","inTokenPaidUnclaimed","inTokenPaid","totalShares","parseFloat","endTime","currentDate","subscription","claimedOutBalance","spentInBalance","remainingInBalance","unclaimedOutBalances","shares","mapSubscription","useSales","setSales","scheduleRefresh","localMapSale","fast","fetchSale","get_sale","sale_id","undefined","refreshSale","prev","clearTimeout","setTimeout","hidden","get_sales","rawSales","fetchSales","catch","e","console","log","RemainingDuration","props","time","progress","style","left","right","aria-valuenow","aria-valuemin","aria-valuemax","minWidth","trunc","width","key","initialTime","direction","timeToUpdate","lastUnit","Fragment","Days","formatValue","v","Hours","Minutes","padStart","Seconds","tokens","tokenMatches","label","toLowerCase","symbol","name","isTokenRegistered","storageBalance","total","defaultTokenStorageDeposit","tokenStorageDeposit","storageBalanceBounds","storageDeposit","error","tokenRegisterStorageAction","registration_only","WrappedTokenType","WrappedTokens","hardcodedMetadata","icon","getTokenFetcher","_key","lsKey","localToken","balanceOf","isRegistered","isWrappedToken","isUnlocked","info","status","data","totalSupply","message","set","useToken","useSWR","defaultWhitelistedTokens","Set","defaultRefFinance","pools","poolsByToken","poolsByPair","refContract","usdTokensDecimals","usn","tokenDecimals","usdTokens","entries","acc","value","getRefReturn","pool","tokenIn","amountIn","tokenOut","eq","stable","tokenInIndex","tt","tokenOutIndex","y","stablePoolComputeY","rates","cAmounts","dy","tradeFee","fee","stablePoolGetReturn","getRefInverseReturn","amountOut","cAmountOut","stablePoolGetInverseReturn","gte","stablePoolComputeD","sumX","dPrev","dProd","j","nCoins","leverage","ann","numerator","denominator","xCAmount","indexX","indexY","c","c_amount","idx","nn","yPrev","yNumerator","yDenominator","fetchRefData","get_whitelisted_tokens","list_rated_tokens","ratedTokens","values","r","rate_price","get_deposits","limit","get_number_of_pools","numPools","get_pools","from_index","rawPools","flat","addPools","ps","ots","ot","pair","pool_kind","token_account_ids","index","tokenIndex","amounts","filter","t","total_fee","shares_total_supply","amp","shouldSkip","tokenId","factor","fill","cAmount","wNEAR","otherToken","totalNearInUsdPools","totalUsdInUsdPools","one","refRefreshTimer","useRefFinance","setRefFinance","localMapRef","MutedDecimals","dotPos","charAt","TokenBalance","showUsd","setShowUsd","clickable","onClick","stopPropagation","TokenBadge","tokenOk","title","src","alt","TokenAndBalance","uuid","gkey","SaleInputOutputs","saleEnded","inputBalances","detailed","outputBalances","distributedLabel","remainingLabel","inputLabel","position","bottom","outputLabel","TokenSymbol","View","Rate","view","setView","out","inToken","inAmount","outAmount","price","inversePrice","views","hideInverse","numViews","SaleRate","SalePreview","to","SalesPage","whitelistedOnly","setWhitelistedOnly","displayLowValueSales","setDisplayLowValueSales","sortedSales","sort","allUpcomingSales","currentSalesAndSoon","upcomingSales","endedSales","saleList","allSales","id","checked","onChange","target","htmlFor","getTokenBalancesFetcher","tokenBalance","fetchedBalances","BalanceType","Internal","Wallet","nativeNearBalance","NEAR","Ref","useTokenBalances","currentTokenAccountId","setCurrentTokenAccountId","setTokenBalance","tokenBalances","resetTokenBalance","AccountBalance","setLoading","setBalances","onFetchedBalances","internalBalance","refBalance","setIsUnlocked","isUnwrappable","setIsUnwrappable","canUnwrap","unwrapPossible","expanded","setExpanded","registerAction","unwrapTokenAction","lockedTokenAccountId","withdrawInternal","preventDefault","token_account_id","withdraw_token","withdrawFromRef","token_id","unregister","unwrapToken","disabled","LockupAccount","skywardToken","claimLocked","Account","referralFetcher","request","user","database","password","port","parameters","fetch","method","body","headers","res","json","response","row","predecessor_account_id","AllReferrals","referrals","computeBonus","referralBpt","scope","AccountPage","yourSales","AvailableInput","inputId","isMax","setIsMax","setValue","lastExternalValue","setLastExternalValue","innerValue","setInnerValue","roundLimit","isInvalid","large","flex","autoFocus","toNumber","placeholder","nv","extraLabel","extraLabelRight","getSalePermissionFetcher","permissionsContractId","Subscription","withdrawToWalletLsKey","mode","setMode","extraDeposit","setExtraDeposit","withdrawAmount","setWithdrawAmount","withdrawToWallet","setWithdrawToWallet","depositPermission","useSalePermission","noSub","availableInToken","availableInTokenHuman","subRemainingInBalanceHuman","extraDepositBalance","withdrawAmountBalance","subInToken","subInExtraShares","subInTotalShares","adjustForReferral","referralAmount","resShares","subOutTokens","claimBalance","makeOutRegistered","subscribeToSale","skywardBalance","fromInToken","inBalance","availableAccountAmount","amountFromAccount","Error","receiver_id","memo","msg","referral_id","withdrawFromSale","maxWithdraw","freshSale","freshRemainingIn","maxReceiveAmount","claimOut","sale_claim_out_tokens","rel","href","ReferralList","totalDeposit","ReferralLink","referralLink","referralBonus","getCachedHistoricSale","fetchHistoricSale","PriceHistory","historicSales","setHistoricSales","currentHeight","endBlockHeight","currentBlockHeight","firstBlockHeight","BlockInterval","startBlockHeight","h","step","needFetching","cachedSale","fetchHistoricData","lineData","numData","datasets","backgroundColor","borderColor","reverse","x","animation","responsive","scales","xAxis","minUnit","ticks","major","enabled","yAxis","beginAtZero","statsFetcher","parseInt","participants","Sale","SalePage","useParams","currentReferralId","setReferralId","useLocation","history","useHistory","locationSearch","search","URLSearchParams","delete","defaultTreasury","useTreasury","treasury","setTreasury","get_treasury_balances","get_skyward_circulating_supply","get_listing_fee","skywardCirculatingSupply","listingFee","SkywardVestingSchedule","Treasury","skywardBurnAmountHuman","setSkywardBurnAmountHuman","skywardTokenBalance","setSkywardTokenBalance","availableSkywardBalance","totalVestedAmount","currentTimestamp","availableSkywardBalanceHuman","skywardBurnAmount","selectedTokens","setSelectedTokens","refTokens","receiveBalances","youReceive","youReceiveUsd","usdValue","potentialTokenValueMultiplier","estimatedTreasuryUsdValue","usdPerSkyward","renderBalances","redeemSkyward","receivingTokens","missingTokens","innerBalance","amountFromToken","skyward_amount","whitelistedBalances","otherBalances","skywardBurned","skywardTotalSupply","tabIndex","data-bs-backdrop","data-bs-keyboard","aria-labelledby","data-bs-dismiss","aria-label","justifyContent","data-bs-toggle","data-bs-target","TreasuryPage","selectStyles","singleValue","provided","top","transform","webkitTransform","overflow","margin","option","color","isFocused","TokenSelect","propsFilter","tokenFilter","tokenOptions","loadOptions","inputValue","classNamePrefix","isDisabled","cacheOptions","styles","defaultOptions","onInputChange","onSelectTokenId","CreatSale","setInTokenAccountId","outputTokenId","setOutputTokenId","outAmountHuman","setOutAmountHuman","setFetchedBalances","saleTitle","setSaleTitle","setReferralBpt","allTokens","availableOutBalance","availableOutBalanceHuman","dateRange","setDateRange","minDate","timezoneOffset","getTimezoneOffset","toLocalTimezone","toUTCTimezone","numDays","createSale","balanceInternal","balanceToken","out_tokens","referral_bpt","in_token_account_id","start_time","expectedSaleId","accountTokens","selectsRange","inline","CreateSalePage","EditMode","Slippage","findBestReturn","outTokenAccountId","swapInfo","poolReturn","swapPath","middleTokenAccountId","pool2","pool2Return","expectedAmountOut","updateUrl","Swap","maxSlippage","setMaxSlippage","editMode","setEditMode","inputTokenId","inTokenAmountHuman","setInTokenAmountHuman","setAvailableInToken","setOutTokenAccountId","outTokenAmountHuman","setOutTokenAmountHuman","availableOutToken","setAvailableOutToken","needRecompute","setNeedRecompute","availableOutTokenHuman","inTokenAmount","setInTokenAmount","outTokenAmount","setOutTokenAmount","setSwapInfo","willRecompute","middleAmountIn","findBestInverseReturn","setTokens","priceImpact","priceImpactDiff","inputUsdValue","outputUsdValue","swap","wNearBalance","pool_id","token_in","token_out","min_amount_out","slippage","autoComplete","SwapPage","App","connected","setConnected","signedIn","setSignedIn","signedAccountId","setSignedAccountId","requestSignIn","useCallback","appTitle","logOut","signOut","alert","passProps","withdrawInternalBalances","substr","basename","process","Logo","aria-controls","aria-expanded","aria-current","exact","path"],"mappings":"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","file":"static/js/main.abc0426b.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo_horizontal_brand.188d02ff.png\";","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport { App } from \"./App\";\n\nReactDOM.render( , document.getElementById(\"root\"));\n","import * as nearAPI from \"near-api-js\";\nimport { singletonHook } from \"react-singleton-hook\";\nimport Big from \"big.js\";\nimport { OneNear } from \"./utils\";\nimport { refreshAllowanceObj } from \"../App\";\n\nexport const TGas = Big(10).pow(12);\nexport const MaxGasPerTransaction = TGas.mul(300);\nexport const MaxGasPerTransaction2FA = TGas.mul(220);\nexport const StorageCostPerByte = Big(10).pow(19);\nexport const TokenStorageDeposit = StorageCostPerByte.mul(125);\nexport const BridgeTokenStorageDeposit = StorageCostPerByte.mul(1250);\nexport const MaxStorageDeposit = Big(10).pow(23);\nexport const SkywardRegisterStorageDeposit = StorageCostPerByte.mul(2000);\nexport const SubscribeDeposit = StorageCostPerByte.mul(2000);\nexport const CreateSaleDeposit = OneNear.mul(10).add(\n StorageCostPerByte.mul(5000)\n);\nexport const MinUsdValue = Big(0.1);\n\nexport const randomPublicKey = nearAPI.utils.PublicKey.from(\n \"ed25519:8fWHD35Rjd78yeowShh9GwhRudRtLLsGCRjZtgPjAtw9\"\n);\n\nconst defaultCodeHash = \"11111111111111111111111111111111\";\n\nconst isLocalhost = window.location.hostname === \"localhost\";\nexport const noInternetMode = isLocalhost;\n\nexport const IsMainnet =\n isLocalhost || !!window.location.hostname.match(/app\\d?\\.skyward\\.finance/);\n// const TestnetContract = \"dev-1624326477618-30908433776884\";\nconst TestnetContract = \"skyward.testnet\";\nconst TestNearConfig = {\n networkId: \"testnet\",\n nodeUrl: \"https://rpc.testnet.near.org\",\n archivalNodeUrl: \"https://rpc.testnet.internal.near.org\",\n contractName: TestnetContract,\n lockupAccountIds: [],\n // [...Array(5).keys()].map(\n // (i) => `lockup${i}.${TestnetContract}`\n // ),\n wrapNearAccountId: \"wrap.testnet\",\n skywardTokenAccountId: `token.${TestnetContract}`,\n tokenSwapAccountId: \"token-swap.skyward.testnet\",\n walletUrl: \"https://wallet.testnet.near.org\",\n storageCostPerByte: StorageCostPerByte,\n refContractName: \"ref-finance.testnet\",\n referralId: \"skyward.testnet\",\n noStorageTokens: {\n aurora: true,\n },\n};\nconst MainnetContract = \"skyward.near\";\nexport const MainNearConfig = {\n networkId: \"mainnet\",\n nodeUrl: \"https://rpc.mainnet.near.org\",\n // archivalNodeUrl: \"https://rpc.mainnet.internal.near.org\",\n archivalNodeUrl: \"https://archival-rpc.mainnet.near.org\",\n contractName: MainnetContract,\n lockupAccountIds: [...Array(4).keys()].map(\n (i) => `lockup${i}.${MainnetContract}`\n ),\n wrapNearAccountId: \"wrap.near\",\n skywardTokenAccountId: `token.${MainnetContract}`,\n walletUrl: \"https://wallet.near.org\",\n storageCostPerByte: StorageCostPerByte,\n refContractName: \"v2.ref-finance.near\",\n oldRefFinanceToken: \"token.ref-finance.near\",\n referralId: \"skyward-ref.near\",\n noStorageTokens: {\n \"usn\": true,\n \"meta-pool.near\": true,\n aurora: true,\n },\n};\n\nexport const NearConfig = IsMainnet ? MainNearConfig : TestNearConfig;\nexport const LsKey = NearConfig.contractName + \":v01:\";\n\nfunction wrapContract(account, contractId, options) {\n const nearContract = new nearAPI.Contract(account, contractId, options);\n const { viewMethods = [], changeMethods = [] } = options;\n const contract = {\n account,\n contractId,\n };\n viewMethods.forEach((methodName) => {\n contract[methodName] = nearContract[methodName];\n });\n changeMethods.forEach((methodName) => {\n contract[methodName] = async (...args) => {\n try {\n return await nearContract[methodName](...args);\n } catch (e) {\n const msg = e.toString();\n if (msg.indexOf(\"does not have enough balance\") !== -1) {\n return await refreshAllowanceObj.refreshAllowance();\n }\n throw e;\n }\n };\n });\n return contract;\n}\n\nasync function _initNear() {\n const keyStore = new nearAPI.keyStores.BrowserLocalStorageKeyStore();\n const nearConnection = await nearAPI.connect(\n Object.assign({ deps: { keyStore } }, NearConfig)\n );\n const _near = {};\n\n _near.nearArchivalConnection = nearAPI.Connection.fromConfig({\n networkId: NearConfig.networkId,\n provider: {\n type: \"JsonRpcProvider\",\n args: { url: NearConfig.archivalNodeUrl },\n },\n signer: { type: \"InMemorySigner\", keyStore },\n });\n\n _near.keyStore = keyStore;\n _near.nearConnection = nearConnection;\n\n _near.walletConnection = new nearAPI.WalletConnection(\n nearConnection,\n NearConfig.contractName\n );\n _near.accountId = _near.walletConnection.getAccountId();\n _near.account = _near.walletConnection.account();\n\n _near.contract = wrapContract(_near.account, NearConfig.contractName, {\n viewMethods: [\n \"balance_of\",\n \"balances_of\",\n \"get_num_balances\",\n \"get_subscribed_sales\",\n \"get_account_sales\",\n \"get_sale\",\n \"get_sales\",\n \"get_treasury_balance\",\n \"get_treasury_balances\",\n \"get_treasury_num_balances\",\n \"get_skyward_token_id\",\n \"get_skyward_circulating_supply\",\n \"get_listing_fee\",\n ],\n changeMethods: [\n \"register_token\",\n \"register_tokens\",\n \"withdraw_token\",\n \"donate_token_to_treasury\",\n \"sale_create\",\n \"sale_deposit_out_token\",\n \"sale_deposit_in_token\",\n \"sale_withdraw_in_token\",\n \"sale_distribute_unclaimed_tokens\",\n \"sale_claim_out_tokens\",\n \"redeem_skyward\",\n ],\n });\n\n _near.fetchBlockHash = async () => {\n const block = await nearConnection.connection.provider.block({\n finality: \"final\",\n });\n return nearAPI.utils.serialize.base_decode(block.header.hash);\n };\n\n _near.fetchBlockHeight = async () => {\n const block = await nearConnection.connection.provider.block({\n finality: \"final\",\n });\n return block.header.height;\n };\n\n _near.fetchNextNonce = async () => {\n const accessKeys = await _near.account.getAccessKeys();\n return accessKeys.reduce(\n (nonce, accessKey) => Math.max(nonce, accessKey.access_key.nonce + 1),\n 1\n );\n };\n\n _near.sendTransactions = async (items, callbackUrl) => {\n let [nonce, blockHash, accountState] = await Promise.all([\n _near.fetchNextNonce(),\n _near.fetchBlockHash(),\n _near.account.state(),\n ]);\n\n const maxGasPerTransaction =\n accountState.code_hash === defaultCodeHash\n ? MaxGasPerTransaction\n : MaxGasPerTransaction2FA;\n\n const transactions = [];\n let actions = [];\n let currentReceiverId = null;\n let currentTotalGas = Big(0);\n items.push([null, null]);\n items.forEach(([receiverId, action]) => {\n const actionGas =\n action && action.functionCall ? Big(action.functionCall.gas) : Big(0);\n const newTotalGas = currentTotalGas.add(actionGas);\n if (\n receiverId !== currentReceiverId ||\n newTotalGas.gt(maxGasPerTransaction)\n ) {\n if (currentReceiverId !== null) {\n transactions.push(\n nearAPI.transactions.createTransaction(\n _near.accountId,\n randomPublicKey,\n currentReceiverId,\n nonce++,\n actions,\n blockHash\n )\n );\n actions = [];\n }\n currentTotalGas = actionGas;\n currentReceiverId = receiverId;\n } else {\n currentTotalGas = newTotalGas;\n }\n actions.push(action);\n });\n return await _near.walletConnection.requestSignTransactions(\n transactions,\n callbackUrl\n );\n };\n\n _near.archivalViewCall = async (blockId, contractId, methodName, args) => {\n args = args || {};\n const result = await _near.nearArchivalConnection.provider.query({\n request_type: \"call_function\",\n account_id: contractId,\n method_name: methodName,\n args_base64: Buffer.from(JSON.stringify(args)).toString(\"base64\"),\n block_id: blockId,\n });\n\n return (\n result.result &&\n result.result.length > 0 &&\n JSON.parse(Buffer.from(result.result).toString())\n );\n };\n\n _near.viewCall = async (contractId, methodName, args) => {\n args = args || {};\n const result = await _near.nearConnection.connection.provider.query({\n request_type: \"call_function\",\n account_id: contractId,\n method_name: methodName,\n args_base64: Buffer.from(JSON.stringify(args)).toString(\"base64\"),\n finality: \"optimistic\",\n });\n\n return (\n result.result &&\n result.result.length > 0 &&\n JSON.parse(Buffer.from(result.result).toString())\n );\n };\n\n return _near;\n}\n\nconst defaultNear = Promise.resolve(_initNear());\nexport const useNear = singletonHook(defaultNear, () => {\n return defaultNear;\n});\n","import Big from \"big.js\";\nimport {\n LsKey,\n NearConfig,\n} from \"./near\";\nimport React from \"react\";\nimport ls from \"local-storage\";\n\nconst MinAccountIdLen = 2;\nconst MaxAccountIdLen = 64;\nconst ValidAccountRe = /^(([a-z\\d]+[-_])*[a-z\\d]+\\.)*([a-z\\d]+[-_])*[a-z\\d]+$/;\nexport const OneNear = Big(10).pow(24);\nexport const OneSkyward = Big(10).pow(18);\nconst AccountSafetyMargin = OneNear.div(2);\n\nconst LowUsdValue = Big(10000);\n\nexport const skywardUrl = () =>\n window.location.protocol + \"//\" + window.location.host;\n\nexport const hardcodedWhitelist = {\n 50: true,\n 86: true,\n 94: true,\n};\n\nexport const Loading = (\n \n);\n\nexport function isValidAccountId(accountId) {\n return (\n accountId &&\n accountId.length >= MinAccountIdLen &&\n accountId.length <= MaxAccountIdLen &&\n accountId.match(ValidAccountRe)\n );\n}\n\nconst toCamel = (s) => {\n return s.replace(/([-_][a-z])/gi, ($1) => {\n return $1.toUpperCase().replace(\"-\", \"\").replace(\"_\", \"\");\n });\n};\n\nconst isArray = function (a) {\n return Array.isArray(a);\n};\n\nconst isObject = function (o) {\n return o === Object(o) && !isArray(o) && typeof o !== \"function\";\n};\n\nexport const keysToCamel = function (o) {\n if (isObject(o)) {\n const n = {};\n\n Object.keys(o).forEach((k) => {\n n[toCamel(k)] = keysToCamel(o[k]);\n });\n\n return n;\n } else if (isArray(o)) {\n return o.map((i) => {\n return keysToCamel(i);\n });\n }\n\n return o;\n};\n\nexport const bigMin = (a, b) => {\n if (a && b) {\n return a.lt(b) ? a : b;\n }\n return a || b;\n};\n\nexport const bigToString = (b, p, len) => {\n if (b === null) {\n return \"???\";\n }\n let s = b.abs().toFixed();\n let pos = s.indexOf(\".\");\n p = p || 6;\n len = len || 7;\n if (pos > 0) {\n let ap = Math.min(p, Math.max(len - pos, 0));\n if (ap > 0) {\n ap += 1;\n }\n if (pos + ap < s.length) {\n s = s.substring(0, pos + ap);\n }\n } else {\n pos = s.length;\n }\n for (let i = pos - 4; i >= 0; i -= 3) {\n s = s.slice(0, i + 1) + \",\" + s.slice(i + 1);\n }\n\n if (s === \"0.000000\" && p === 6 && len === 7) {\n return \"<0.000001\";\n }\n\n if (b.lt(0)) {\n s = \"-\" + s;\n }\n\n return s;\n};\n\nexport const dateToString = (d) => {\n return d.toLocaleString(\"en-us\", {\n day: \"numeric\",\n month: \"short\",\n year: \"numeric\",\n });\n};\n\nexport const fromTokenBalance = (token, balance) => {\n return !token || token.invalidAccount || token.notFound || !balance\n ? balance\n : balance.div(Big(10).pow(token.metadata.decimals));\n};\n\nexport const toTokenBalance = (token, balance) => {\n return !token || token.invalidAccount || token.notFound || !balance\n ? balance\n : balance.mul(Big(10).pow(token.metadata.decimals));\n};\n\nexport const availableNearBalance = (account) => {\n if (account && !account.loading && account.state) {\n let balance = Big(account.state.amount).sub(\n Big(account.state.storage_usage).mul(Big(NearConfig.storageCostPerByte))\n );\n if (balance.gt(AccountSafetyMargin)) {\n return balance.sub(AccountSafetyMargin);\n }\n }\n return Big(0);\n};\n\nexport const referralLsKey = (saleId) => {\n return LsKey + \"referral:\" + saleId;\n};\n\nexport const getCurrentReferralId = (saleId) => {\n const refLsKey = referralLsKey(saleId);\n const ref = ls.get(refLsKey);\n if (ref && ref.expires > new Date().getTime()) {\n return ref.referralId;\n }\n return null;\n};\n\nexport const computeUsdBalance = (refFinance, tokenAccountId, balance) => {\n if (refFinance && !refFinance.loading && balance) {\n if (tokenAccountId === NearConfig.wrapNearAccountId) {\n return balance.div(OneNear).mul(refFinance.nearPrice);\n } else if (\n tokenAccountId in refFinance.prices &&\n refFinance.nearPrice.gt(0)\n ) {\n const p = refFinance.prices[tokenAccountId];\n const balanceIn = p.totalOther;\n const balanceOut = p.totalNear;\n let amountWithFee = Big(balance.div(1000));\n const amountOut = amountWithFee\n .mul(balanceOut)\n .div(balanceIn.add(amountWithFee))\n .round(0, 0);\n\n return amountOut.mul(1000).div(OneNear).mul(refFinance.nearPrice);\n }\n }\n return null;\n};\n\nexport const isBridgeToken = (tokenAccountId) => {\n return tokenAccountId.endsWith(\".bridge.near\");\n};\n\nexport const isoDate = (d) =>\n d ? new Date(d).toISOString().substring(0, 10) : \"\";\n\nexport const isSaleWhitelisted = (sale, refFinance) => {\n if (sale.saleId in hardcodedWhitelist) {\n return true;\n }\n if (refFinance && refFinance.whitelistedTokens) {\n if (!refFinance.whitelistedTokens.has(sale.inTokenAccountId)) {\n return false;\n }\n if (\n sale.outTokens.some(\n (outToken) => !refFinance.whitelistedTokens.has(outToken.tokenAccountId)\n )\n ) {\n return false;\n }\n return true;\n }\n return false;\n};\n\nexport const isLowValueSale = (sale, refFinance) => {\n if (sale.saleId in hardcodedWhitelist) {\n return false;\n }\n if (!isSaleWhitelisted(sale, refFinance)) {\n return false;\n }\n if (refFinance) {\n let sum = Big(0);\n sale.outTokens.forEach((outToken) => {\n const usdBalance = computeUsdBalance(\n refFinance,\n outToken.tokenAccountId,\n outToken.distributed.add(outToken.remaining)\n );\n if (sum && usdBalance) {\n sum = sum.add(usdBalance);\n } else {\n sum = null;\n }\n });\n\n if (sum && sum.lte(LowUsdValue)) {\n return true;\n }\n }\n return false;\n};\n","import { singletonHook } from \"react-singleton-hook\";\nimport { useEffect, useState } from \"react\";\nimport { NearConfig, noInternetMode, useNear } from \"./near\";\nimport Big from \"big.js\";\nimport { keysToCamel } from \"./utils\";\n\nconst defaultAccount = {\n loading: true,\n accountId: null,\n state: null,\n balances: {},\n near: null,\n};\n\nconst mapLockupAccount = (account, lockupAccountId) => {\n account = keysToCamel(account);\n account.startTimestamp *= 1000;\n account.cliffTimestamp *= 1000;\n account.endTimestamp *= 1000;\n account.startDate = new Date(account.startTimestamp);\n account.cliffDate = new Date(account.cliffTimestamp);\n account.endDate = new Date(account.endTimestamp);\n account.balance = Big(account.balance);\n account.claimedBalance = Big(account.claimedBalance);\n account.lockupAccountId = lockupAccountId;\n\n account.started = () => new Date().getTime() >= account.startTimestamp;\n account.ended = () => new Date().getTime() >= account.endTimestamp;\n\n account.duration = account.endTimestamp - account.startTimestamp;\n account.passedDuration = () =>\n account.ended()\n ? account.duration\n : account.started()\n ? new Date().getTime() - account.startTimestamp\n : 0;\n account.currentBalance = () =>\n account.ended()\n ? account.balance\n : account.started()\n ? Big(account.passedDuration())\n .mul(account.balance)\n .div(account.duration)\n .round(0, 0)\n : Big(0);\n\n account.unclaimedBalance = () =>\n account.currentBalance().sub(account.claimedBalance);\n account.remainingBalance = account.balance.sub(account.claimedBalance);\n\n account.hasBalance = account.remainingBalance.gt(0);\n\n return account;\n};\n\nconst getLockupAccount = async (near, lockupAccountId) => {\n const account = await near.account.viewFunction(\n lockupAccountId,\n \"get_account\",\n {\n account_id: near.accountId,\n }\n );\n return account && mapLockupAccount(account, lockupAccountId);\n};\n\nconst loadAccount = async (near, setAccount) => {\n const accountId = near.accountId;\n const account = {\n loading: false,\n accountId,\n state: null,\n balances: {},\n lockupAccount: null,\n near,\n refresh: async () => await loadAccount(near, setAccount),\n };\n if (accountId) {\n const promises = await Promise.all([\n near.contract.balances_of({\n account_id: accountId,\n }),\n near.account.state(),\n ...NearConfig.lockupAccountIds.map((lockupAccountId) =>\n getLockupAccount(near, lockupAccountId)\n ),\n ]);\n const rawBalances = promises[0];\n const state = promises[1];\n promises.slice(2).forEach((lockupAccount) => {\n if (lockupAccount) {\n account.lockupAccount = lockupAccount;\n }\n });\n\n rawBalances.forEach(([tokenAccountId, rawBalance]) => {\n account.balances[tokenAccountId] = Big(rawBalance);\n });\n account.state = state;\n }\n\n setAccount(account);\n};\n\nexport const useAccount = singletonHook(defaultAccount, () => {\n const [account, setAccount] = useState(defaultAccount);\n const _near = useNear();\n\n useEffect(() => {\n _near.then(async (near) => {\n try {\n await loadAccount(near, setAccount);\n } catch (e) {\n if (noInternetMode) {\n setAccount({\n loading: false,\n near,\n accountId: \"test.testnet\",\n balances: {},\n });\n }\n }\n });\n }, [_near]);\n\n return account;\n});\n","import { singletonHook } from \"react-singleton-hook\";\nimport { useEffect, useState } from \"react\";\nimport Big from \"big.js\";\nimport { useAccount } from \"./account\";\nimport { keysToCamel } from \"./utils\";\n\nconst defaultSales = {\n loading: true,\n sales: [],\n};\n\nconst OneWeek = 7 * 24 * 60 * 60 * 1000;\n\nconst mapSubscription = (s) => {\n return {\n claimedOutBalance: s.claimedOutBalance.map(Big),\n spentInBalance: Big(s.spentInBalance),\n remainingInBalance: Big(s.remainingInBalance),\n unclaimedOutBalances: s.unclaimedOutBalances.map(Big),\n shares: Big(s.shares),\n referralId: s.referralId,\n };\n};\n\nconst saleRefreshTimers = {};\n\nexport const addSaleMethods = (s) => {\n s.started = () => s.remainingDuration < s.duration;\n s.ended = () => s.remainingDuration === 0;\n s.farAhead = () => !s.started() && s.startTime - s.currentTime > OneWeek;\n return s;\n};\n\nexport const mapSale = (s) => {\n s = keysToCamel(s);\n s.outTokens.forEach((o) => {\n o.remaining = Big(o.remaining);\n o.distributed = Big(o.distributed);\n if (o.treasuryUnclaimed) {\n o.treasuryUnclaimed = Big(o.treasuryUnclaimed);\n }\n });\n s.inTokenRemaining = Big(s.inTokenRemaining);\n s.inTokenPaidUnclaimed = Big(s.inTokenPaidUnclaimed);\n s.inTokenPaid = Big(s.inTokenPaid);\n s.totalShares = Big(s.totalShares);\n s.startTime = parseFloat(s.startTime) / 1e6;\n s.startDate = new Date(s.startTime);\n s.duration = parseFloat(s.duration) / 1e6;\n s.endTime = s.startTime + s.duration;\n s.endDate = new Date(s.endTime);\n s.remainingDuration = parseFloat(s.remainingDuration) / 1e6;\n if (s.currentTime) {\n s.currentTime = parseFloat(s.currentTime) / 1e6;\n s.currentDate = new Date(s.currentTime);\n } else {\n s.currentDate = new Date(s.startTime + s.duration - s.remainingDuration);\n s.currentTime = s.currentDate.getTime();\n }\n if (s.subscription) {\n s.subscription = mapSubscription(s.subscription);\n }\n return addSaleMethods(s);\n};\n\nexport const useSales = singletonHook(defaultSales, () => {\n const [sales, setSales] = useState(defaultSales);\n const account = useAccount();\n\n useEffect(() => {\n if (!account.near) {\n return;\n }\n let scheduleRefresh = null;\n\n const localMapSale = (sale) => {\n sale = mapSale(sale);\n sale.scheduleRefresh = (fast) => scheduleRefresh(sale, fast);\n return sale;\n };\n\n const fetchSale = async (saleId) => {\n return localMapSale(\n await account.near.contract.get_sale({\n sale_id: saleId,\n account_id: account.accountId || undefined,\n })\n );\n };\n const refreshSale = async (saleId) => {\n const sale = await fetchSale(saleId);\n setSales((prev) =>\n Object.assign({}, prev, {\n sales: Object.assign([], prev.sales, { [saleId]: sale }),\n })\n );\n };\n\n scheduleRefresh = (sale, fast) => {\n clearTimeout(saleRefreshTimers[sale.saleId]);\n saleRefreshTimers[sale.saleId] = null;\n if (!sale.ended()) {\n saleRefreshTimers[sale.saleId] = setTimeout(\n async () => {\n if (!document.hidden) {\n await refreshSale(sale.saleId);\n } else {\n scheduleRefresh(sale, fast);\n }\n },\n fast ? 1000 : sale.started() ? 5000 : 30000\n );\n }\n };\n const fetchSales = async () => {\n const rawSales = await account.near.contract.get_sales({\n account_id: account.accountId || undefined,\n });\n const sales = rawSales.map(localMapSale);\n return sales;\n };\n\n fetchSales()\n .then((sales) => {\n setSales({\n loading: false,\n sales,\n fetchSale,\n refreshSale,\n });\n })\n .catch((e) => {\n console.log(e);\n });\n }, [account]);\n\n return sales;\n});\n","import \"./RemainingDuration.scss\";\nimport { dateToString } from \"../../data/utils\";\nimport Timer from \"react-compound-timer\";\nimport React from \"react\";\n\nexport default function RemainingDuration(props) {\n const sale = props.sale;\n const time = new Date().getTime();\n const progress = sale.started()\n ? (1 - sale.remainingDuration / sale.duration) * 100\n : ((sale.startTime - time) / (sale.endTime - time)) * 100;\n\n // const coolDown = Math.max(remainingDuration - refreshRate, 0) + ;\n // callback: () =>\n // setTimeout(\n // async () => {\n // await sales.refreshSale(sale.saleId);\n // },\n // sale.started() ? 500 : 2000\n // ),\n // },\n\n const remainingDuration = sale.started()\n ? sale.remainingDuration\n : sale.startDate - time;\n return (\n
\n
\n
\n {dateToString(sale.startDate)}\n
\n
\n {dateToString(sale.endDate)}\n
\n
\n
\n {sale.started() ? (\n
\n {sale.started() &&
{Math.trunc(progress * 10) / 10}%
}\n
\n ) : (\n <>\n
\n Preparation\n
\n
\n Sale 0%\n
\n >\n )}\n
\n
\n {sale.ended() ? (\n \"Sale has ended\"\n ) : (\n
\n {sale.started() ? \"Sale end in\" : \"Sale starts in\"}{\" \"}\n \n {() => (\n \n \n v > 1 ? `${v} days ` : v ? `1 day ` : \"\"\n }\n />\n :\n `${v}`.padStart(2, \"0\")} />\n :\n `${v}`.padStart(2, \"0\")} />\n \n )}\n \n
\n )}\n
\n
\n );\n}\n","import Big from \"big.js\";\nimport ls from \"local-storage\";\nimport {bigMin, isBridgeToken, isValidAccountId, keysToCamel} from \"./utils\";\nimport useSWR from \"swr\";\nimport { useAccount } from \"./account\";\nimport {BridgeTokenStorageDeposit, LsKey, MaxStorageDeposit, NearConfig, TGas, TokenStorageDeposit} from \"./near\";\nimport * as nearAPI from \"near-api-js\";\n\nconst TokenExpirationDuration = 30 * 60 * 1000;\n\nconst tokens = {};\n\nexport const tokenMatches = (tokenAccountId, label) => {\n const token = tokens[tokenAccountId];\n if (!token || !label) {\n return false;\n }\n label = label.toLowerCase();\n if (token.metadata.symbol.toLowerCase().indexOf(label) >= 0) {\n return true;\n }\n return token.metadata.name.toLowerCase().indexOf(label) >= 0;\n};\n\nexport const isTokenRegistered = async (account, tokenAccountId, accountId) => {\n if (tokenAccountId in NearConfig.noStorageTokens) {\n return true;\n }\n const storageBalance = await account.near.account.viewFunction(\n tokenAccountId,\n \"storage_balance_of\",\n {\n account_id: accountId,\n }\n );\n return storageBalance && storageBalance.total !== \"0\";\n};\n\nexport const defaultTokenStorageDeposit = async (tokenAccountId) => {\n return isBridgeToken(tokenAccountId)\n ? BridgeTokenStorageDeposit\n : TokenStorageDeposit;\n};\n\nexport const tokenStorageDeposit = async (near, tokenAccountId) => {\n try {\n const storageBalanceBounds = await near.account.viewFunction(\n tokenAccountId,\n \"storage_balance_bounds\",\n {}\n );\n const storageDeposit = storageBalanceBounds ? Big(storageBalanceBounds.min || \"0\") : TokenStorageDeposit;\n return bigMin(storageDeposit, MaxStorageDeposit);\n } catch (e) {\n console.error(\"storage_balance_bounds\", e);\n return defaultTokenStorageDeposit(tokenAccountId);\n }\n};\n\nexport const tokenRegisterStorageAction = async (\n account,\n tokenAccountId,\n actions,\n accountId\n) => {\n accountId = accountId || account.accountId;\n if (!(await isTokenRegistered(account, tokenAccountId, accountId))) {\n actions.push([\n tokenAccountId,\n nearAPI.transactions.functionCall(\n \"storage_deposit\",\n {\n account_id: accountId,\n registration_only: true,\n },\n TGas.mul(5).toFixed(0),\n (await tokenStorageDeposit(account.near, tokenAccountId)).toFixed(0)\n ),\n ]);\n }\n};\n\nexport const WrappedTokenType = {\n WrappedNEAR: \"WrappedNEAR\",\n WrappedFT: \"WrappedFT\",\n};\n\nexport const WrappedTokens = {\n [NearConfig.wrapNearAccountId]: WrappedTokenType.WrappedNEAR,\n \"f-aurora.near\": WrappedTokenType.WrappedFT,\n \"skyward-pixeltoken.near\": WrappedTokenType.WrappedFT,\n};\n\n// const tokenBalances = {};\n\nconst hardcodedMetadata = (token, tokenAccountId) => {\n if (!token) {\n return token;\n }\n if (tokenAccountId === NearConfig.wrapNearAccountId) {\n token.metadata.symbol = \"NEAR\";\n token.metadata.icon =\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='16' cy='16' r='16' fill='%23111618'%3E%3C/circle%3E%3Cg clip-path='url(%23clip0000000003)'%3E%3Cpath d='M20.8422 8.84471L17.4978 13.776C17.4501 13.847 17.43 13.9328 17.4411 14.0174C17.4522 14.102 17.4938 14.1798 17.5582 14.2363C17.6225 14.2928 17.7053 14.3243 17.7913 14.3249C17.8772 14.3254 17.9604 14.2951 18.0256 14.2395L21.3178 11.4036C21.3371 11.3865 21.361 11.3753 21.3866 11.3714C21.4122 11.3675 21.4383 11.3711 21.4619 11.3818C21.4855 11.3924 21.5054 11.4096 21.5193 11.4314C21.5331 11.4531 21.5403 11.4783 21.54 11.504V20.3824C21.54 20.4095 21.5316 20.4361 21.5158 20.4583C21.5001 20.4806 21.4779 20.4975 21.4522 20.5068C21.4265 20.516 21.3985 20.5172 21.3721 20.5102C21.3456 20.5031 21.322 20.4882 21.3044 20.4673L11.3533 8.63726C11.1933 8.44956 10.994 8.29873 10.7693 8.19525C10.5446 8.09178 10.2999 8.03815 10.0522 8.03809H9.70444C9.2524 8.03809 8.81887 8.21642 8.49922 8.53386C8.17957 8.8513 8 9.28185 8 9.73078V22.2351C8 22.684 8.17957 23.1145 8.49922 23.432C8.81887 23.7494 9.2524 23.9277 9.70444 23.9277V23.9277C9.99591 23.9278 10.2825 23.8537 10.537 23.7125C10.7914 23.5713 11.0051 23.3677 11.1578 23.1211L14.5022 18.1898C14.5499 18.1188 14.57 18.033 14.5589 17.9484C14.5478 17.8638 14.5062 17.7861 14.4418 17.7295C14.3775 17.673 14.2947 17.6415 14.2087 17.641C14.1228 17.6404 14.0396 17.6707 13.9744 17.7264L10.6822 20.5622C10.6629 20.5794 10.639 20.5906 10.6134 20.5944C10.5878 20.5983 10.5617 20.5947 10.5381 20.5841C10.5145 20.5734 10.4946 20.5562 10.4807 20.5345C10.4669 20.5128 10.4597 20.4875 10.46 20.4618V11.5813C10.46 11.5541 10.4684 11.5276 10.4842 11.5053C10.4999 11.483 10.5221 11.4661 10.5478 11.4568C10.5735 11.4476 10.6015 11.4464 10.6279 11.4534C10.6544 11.4605 10.678 11.4755 10.6956 11.4963L20.6456 23.3286C20.8056 23.5163 21.0049 23.6671 21.2296 23.7706C21.4543 23.874 21.699 23.9277 21.9467 23.9277H22.2944C22.5184 23.9279 22.7401 23.8842 22.947 23.7992C23.154 23.7142 23.342 23.5895 23.5004 23.4324C23.6588 23.2752 23.7844 23.0885 23.8702 22.8831C23.9559 22.6776 24 22.4574 24 22.2351V9.73078C24 9.28185 23.8204 8.8513 23.5008 8.53386C23.1811 8.21642 22.7476 8.03809 22.2956 8.03809C22.0041 8.03801 21.7175 8.11211 21.4631 8.25332C21.2086 8.39453 20.9949 8.59814 20.8422 8.84471V8.84471Z' fill='white'%3E%3C/path%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip00033'%3E%3Crect width='16' height='16' fill='white' transform='translate(8 7.9834)'%3E%3C/rect%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E\";\n }\n if (tokenAccountId === NearConfig.oldRefFinanceToken) {\n token.metadata.symbol = \"REF\";\n token.metadata.name = \"[OLD] Ref Finance Token\";\n }\n return token;\n};\n\nexport const getTokenFetcher = async (_key, tokenAccountId, account) => {\n if (!isValidAccountId(tokenAccountId)) {\n return {\n invalidAccount: true,\n };\n }\n if (tokenAccountId in tokens) {\n return tokens[tokenAccountId];\n }\n const lsKey = LsKey + \"tokens:\" + tokenAccountId;\n const localToken = ls.get(lsKey);\n const time = new Date().getTime();\n\n if (!account) {\n return null;\n }\n\n const contract = {\n balanceOf: async (account, accountId) => {\n return Big(\n await account.near.account.viewFunction(\n tokenAccountId,\n \"ft_balance_of\",\n {\n account_id: accountId,\n }\n )\n );\n },\n isRegistered: async (account, accountId) =>\n isTokenRegistered(account, tokenAccountId, accountId),\n isWrappedToken: tokenAccountId in WrappedTokens,\n isUnlocked: async (account) => {\n if (WrappedTokens[tokenAccountId] === WrappedTokenType.WrappedNEAR) {\n return true;\n }\n if (WrappedTokens[tokenAccountId] === WrappedTokenType.WrappedFT) {\n const info = await account.near.account.viewFunction(\n tokenAccountId,\n \"get_info\"\n );\n if (!info) {\n return false;\n }\n return info.status ? info.status === \"Unlocked\" : true;\n }\n },\n };\n\n if (localToken && localToken.expires > time) {\n const token = Object.assign({}, localToken.data, { contract });\n token.totalSupply = Big(token.totalSupply);\n\n return (tokens[tokenAccountId] = hardcodedMetadata(token, tokenAccountId));\n }\n let token = false;\n try {\n let [metadata, totalSupply] = await Promise.all([\n account.near.account.viewFunction(tokenAccountId, \"ft_metadata\"),\n account.near.account.viewFunction(tokenAccountId, \"ft_total_supply\"),\n ]);\n token = hardcodedMetadata(\n {\n contract,\n metadata: keysToCamel(metadata),\n totalSupply: Big(totalSupply),\n },\n tokenAccountId\n );\n } catch (e) {\n const errString = e.message.toString();\n if (errString.indexOf(\"does not exist while viewing\") < 0) {\n console.error(e);\n return false;\n }\n token = {\n notFound: true,\n };\n return (tokens[tokenAccountId] = token);\n }\n ls.set(lsKey, {\n expires: time + TokenExpirationDuration,\n data: Object.assign({}, token, {\n totalSupply: token.totalSupply.toFixed(0),\n }),\n });\n return (tokens[tokenAccountId] = token);\n};\n\nexport const useToken = (tokenAccountId) => {\n const { data: token } = useSWR(\n [\"token_account_id\", tokenAccountId, useAccount()],\n getTokenFetcher\n );\n return token;\n};\n","import { singletonHook } from \"react-singleton-hook\";\nimport { useEffect, useState } from \"react\";\nimport { NearConfig } from \"./near\";\nimport Big from \"big.js\";\nimport * as nearAPI from \"near-api-js\";\nimport { OneNear } from \"./utils\";\nimport { useAccount } from \"./account\";\n\nconst SimplePool = \"SIMPLE_POOL\";\nconst StablePool = \"STABLE_SWAP\";\nconst RatedPool = \"RATED_SWAP\";\n\nexport const defaultWhitelistedTokens = new Set([\n \"wrap.near\",\n \"a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near\",\n \"dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near\",\n \"6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near\",\n \"c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near\",\n \"111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near\",\n \"c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near\",\n \"token.skyward.near\",\n \"berryclub.ek.near\",\n \"farm.berryclub.ek.near\",\n \"6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near\",\n \"de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near\",\n \"1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near\",\n \"2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near\",\n \"514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near\",\n \"f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near\",\n \"token.v2.ref-finance.near\",\n \"d9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near\",\n \"token.paras.near\",\n \"a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near\",\n \"marmaj.tkn.near\",\n \"meta-pool.near\",\n \"token.cheddar.near\",\n \"52a047ee205701895ee06a375492490ec9c597ce.factory.bridge.near\",\n \"aurora\",\n \"pixeltoken.near\",\n \"dbio.near\",\n \"meta-token.near\",\n]);\n\nconst defaultRefFinance = {\n loading: true,\n pools: {},\n poolsByToken: {},\n poolsByPair: {},\n prices: {},\n balances: {},\n nearPrice: Big(0),\n refContract: null,\n whitelistedTokens: defaultWhitelistedTokens,\n};\n\nconst usdTokensDecimals = {\n \"6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near\": 18,\n \"a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near\": 6,\n \"dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near\": 6,\n usn: 18,\n \"cusd.token.a11bd.near\": 24,\n};\nconst tokenDecimals = Object.assign(\n {\n \"2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near\": 8,\n \"0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near\": 18,\n \"meta-pool.near\": 24,\n \"linear-protocol.near\": 24,\n \"wrap.near\": 24,\n },\n usdTokensDecimals\n);\n\nconst usdTokens = Object.entries(usdTokensDecimals).reduce(\n (acc, [key, value]) => {\n acc[key] = Big(10).pow(value);\n return acc;\n },\n {}\n);\n\nfunction stablePoolGetReturn(pool, tokenIn, amountIn, tokenOut) {\n let tokenInIndex = pool.tt.indexOf(tokenIn);\n let tokenOutIndex = pool.tt.indexOf(tokenOut);\n // Sub 1\n const cAmountIn = amountIn\n .sub(1)\n .mul(Big(10).pow(18 - tokenDecimals[tokenIn]))\n .mul(pool.rates[tokenInIndex])\n .div(OneNear);\n\n let y = stablePoolComputeY(\n pool,\n cAmountIn.add(pool.cAmounts[tokenInIndex]),\n tokenInIndex,\n tokenOutIndex\n );\n\n let dy = pool.cAmounts[tokenOutIndex].sub(y);\n let tradeFee = dy.mul(pool.fee).div(10000).round(0, 0);\n let amountSwapped = dy.sub(tradeFee);\n\n return amountSwapped\n .div(Big(10).pow(18 - tokenDecimals[tokenOut]))\n .mul(OneNear)\n .div(pool.rates[tokenOutIndex])\n .round(0, 0);\n}\n\nfunction stablePoolGetInverseReturn(pool, tokenOut, amountOut, tokenIn) {\n let tokenInIndex = pool.tt.indexOf(tokenIn);\n let tokenOutIndex = pool.tt.indexOf(tokenOut);\n\n const amountOutWithFee = amountOut\n .mul(10000)\n .div(10000 - pool.fee)\n .round(0, 0);\n const cAmountOut = amountOutWithFee\n .mul(Big(10).pow(18 - tokenDecimals[tokenOut]))\n .mul(pool.rates[tokenOutIndex])\n .div(OneNear);\n\n let y = stablePoolComputeY(\n pool,\n pool.cAmounts[tokenOutIndex].sub(cAmountOut),\n tokenOutIndex,\n tokenInIndex\n );\n\n let cAmountIn = y.sub(pool.cAmounts[tokenInIndex]);\n\n // Adding 1 for internal pool rounding\n return cAmountIn\n .div(Big(10).pow(18 - tokenDecimals[tokenIn]))\n .mul(OneNear)\n .div(pool.rates[tokenInIndex])\n .add(1)\n .round(0, 0);\n}\n\nexport function getRefReturn(pool, tokenIn, amountIn, tokenOut) {\n if (!amountIn || amountIn.eq(0)) {\n return Big(0);\n }\n if (\n !(tokenIn in pool.tokens) ||\n !(tokenOut in pool.tokens) ||\n tokenIn === tokenOut\n ) {\n return null;\n }\n if (pool.stable) {\n return stablePoolGetReturn(pool, tokenIn, amountIn, tokenOut);\n }\n const balanceIn = pool.tokens[tokenIn];\n const balanceOut = pool.tokens[tokenOut];\n let amountWithFee = Big(amountIn).mul(Big(10000 - pool.fee));\n return amountWithFee\n .mul(balanceOut)\n .div(Big(10000).mul(balanceIn).add(amountWithFee))\n .round(0, 0);\n}\n\nexport function getRefInverseReturn(pool, tokenOut, amountOut, tokenIn) {\n if (!amountOut || amountOut.eq(0)) {\n return Big(0);\n }\n if (\n !(tokenIn in pool.tokens) ||\n !(tokenOut in pool.tokens) ||\n tokenIn === tokenOut\n ) {\n return null;\n }\n if (pool.stable) {\n return stablePoolGetInverseReturn(pool, tokenOut, amountOut, tokenIn);\n }\n const balanceIn = pool.tokens[tokenIn];\n const balanceOut = pool.tokens[tokenOut];\n if (amountOut.gte(balanceOut)) {\n return null;\n }\n return Big(10000)\n .mul(balanceIn)\n .mul(amountOut)\n .div(Big(10000 - pool.fee).mul(balanceOut.sub(amountOut)))\n .round(0, 3);\n}\n\nfunction stablePoolComputeD(pool) {\n let sumX = pool.cAmounts.reduce((sum, v) => sum.add(v), Big(0));\n if (sumX.eq(0)) {\n return Big(0);\n } else {\n let d = sumX;\n let dPrev;\n\n for (let i = 0; i < 256; ++i) {\n let dProd = d;\n for (let j = 0; j < pool.nCoins; ++j) {\n dProd = dProd.mul(d).div(pool.cAmounts[j].mul(pool.nCoins)).round(0, 0);\n }\n dPrev = d;\n\n let leverage = sumX.mul(pool.ann);\n let numerator = dPrev.mul(dProd.mul(pool.nCoins).add(leverage));\n let denominator = dPrev\n .mul(pool.ann.sub(1))\n .add(dProd.mul(pool.nCoins + 1));\n d = numerator.div(denominator).round(0, 0);\n\n // Equality with the precision of 1\n if (d.gt(dPrev)) {\n if (d.sub(dPrev).lte(1)) {\n break;\n }\n } else if (dPrev.sub(d).lte(1)) {\n break;\n }\n }\n return d;\n }\n}\n\nfunction stablePoolComputeY(pool, xCAmount, indexX, indexY) {\n // invariant\n let d = pool.d;\n let s = xCAmount;\n let c = d.mul(d).div(xCAmount).round(0, 0);\n pool.cAmounts.forEach((c_amount, idx) => {\n if (idx !== indexX && idx !== indexY) {\n s = s.add(c_amount);\n c = c.mul(d).div(c_amount).round(0, 0);\n }\n });\n c = c.mul(d).div(pool.ann.mul(pool.nn)).round(0, 0);\n let b = d.div(pool.ann).round(0, 0).add(s); // d will be subtracted later\n\n // Solve for y by approximating: y**2 + b*y = c\n let yPrev;\n let y = d;\n for (let i = 0; i < 256; ++i) {\n yPrev = y;\n // $ y_{k+1} = \\frac{y_k^2 + c}{2y_k + b - D} $\n let yNumerator = y.pow(2).add(c);\n let yDenominator = y.mul(2).add(b).sub(d);\n y = yNumerator.div(yDenominator).round(0, 0);\n if (y.gt(yPrev)) {\n if (y.sub(yPrev).lte(1)) {\n break;\n }\n } else if (yPrev.sub(y).lte(1)) {\n break;\n }\n }\n return y;\n}\n\nconst fetchRefData = async (account) => {\n const near = account.near;\n const refContract = new nearAPI.Contract(\n near.account,\n NearConfig.refContractName,\n {\n viewMethods: [\n \"get_number_of_pools\",\n \"get_pools\",\n \"get_pool\",\n \"get_return\",\n \"get_deposits\",\n \"get_whitelisted_tokens\",\n \"list_rated_tokens\",\n ],\n changeMethods: [],\n }\n );\n\n const balances = {};\n const whitelistedTokens = new Set(await refContract.get_whitelisted_tokens());\n const ratedTokens = await refContract.list_rated_tokens();\n Object.values(ratedTokens).forEach((r) => {\n r.rate_price = Big(r.rate_price);\n });\n ratedTokens[NearConfig.wrapNearAccountId] = {\n rate_price: OneNear,\n };\n\n if (account.accountId) {\n const rawBalances = await refContract.get_deposits({\n account_id: account.accountId,\n });\n Object.entries(rawBalances).forEach(([key, value]) => {\n balances[key] = Big(value);\n });\n }\n\n const limit = 250;\n // Limit pools for now until we need other prices.\n const numPools = Math.min(10000, await refContract.get_number_of_pools());\n const promises = [];\n for (let i = 0; i < numPools; i += limit) {\n promises.push(refContract.get_pools({ from_index: i, limit }));\n }\n const rawPools = (await Promise.all(promises)).flat();\n\n const poolsByToken = {};\n const poolsByPair = {};\n\n const addPools = (token, pool) => {\n let ps = poolsByToken[token] || [];\n ps.push(pool);\n poolsByToken[token] = ps;\n\n pool.ots[token].forEach((ot) => {\n const pair = `${token}:${ot}`;\n ps = poolsByPair[pair] || [];\n ps.push(pool);\n poolsByPair[pair] = ps;\n });\n };\n\n const pools = {};\n for (let i = 0; i < rawPools.length; ++i) {\n const pool = rawPools[i];\n if (\n pool.pool_kind === SimplePool ||\n pool.pool_kind === StablePool ||\n pool.pool_kind === RatedPool\n ) {\n const tt = pool.token_account_ids;\n const p = {\n stable: pool.pool_kind === StablePool || pool.pool_kind === RatedPool,\n index: i,\n tt,\n tokens: tt.reduce((acc, token, tokenIndex) => {\n acc[token] = Big(pool.amounts[tokenIndex]);\n return acc;\n }, {}),\n ots: tt.reduce((acc, token) => {\n acc[token] = tt.filter((t) => t !== token);\n return acc;\n }, {}),\n fee: pool.total_fee,\n shares: Big(pool.shares_total_supply),\n amp: pool.amp || 0,\n };\n if (p.stable) {\n let shouldSkip = false;\n p.cAmounts = [...pool.amounts].map((amount, idx) => {\n const tokenId = tt[idx];\n if (!(tokenId in tokenDecimals)) {\n console.log(\n `Missing token decimals for token ${tokenId} for pool #${i}`\n );\n shouldSkip = true;\n return 0;\n }\n let factor = Big(10).pow(18 - tokenDecimals[tokenId]);\n return Big(amount).mul(factor);\n });\n if (shouldSkip) {\n continue;\n }\n p.nCoins = p.cAmounts.length;\n if (pool.pool_kind === RatedPool) {\n p.rates = tt.map((tokenId) => {\n if (!(tokenId in ratedTokens)) {\n console.log(\n `Missing token rate for token ${tokenId} for pool #${i}`\n );\n shouldSkip = true;\n }\n return ratedTokens[tokenId].rate_price;\n });\n if (shouldSkip) {\n continue;\n }\n } else {\n p.rates = new Array(p.nCoins).fill(OneNear);\n }\n p.cAmounts = p.cAmounts.map((cAmount, idx) =>\n cAmount.mul(p.rates[idx]).div(OneNear)\n );\n p.nn = Big(Math.pow(p.nCoins, p.nCoins));\n p.ann = Big(p.amp).mul(p.nn);\n p.d = stablePoolComputeD(p);\n }\n\n if (p.shares.gt(0)) {\n pools[p.index] = p;\n p.tt.forEach((t) => addPools(t, p));\n }\n }\n }\n\n const wNEAR = NearConfig.wrapNearAccountId;\n const prices = {};\n\n Object.values(pools).forEach((pool) => {\n if (wNEAR in pool.tokens && !pool.stable) {\n pool.otherToken = pool.ots[wNEAR][0];\n const p = prices[pool.otherToken] || {\n totalNear: Big(0),\n totalOther: Big(0),\n };\n p.totalNear = p.totalNear.add(pool.tokens[wNEAR]);\n p.totalOther = p.totalOther.add(pool.tokens[pool.otherToken]);\n if (p.totalNear.gt(0)) {\n prices[pool.otherToken] = p;\n }\n }\n });\n\n let totalNearInUsdPools = Big(0);\n let totalUsdInUsdPools = Big(0);\n\n Object.entries(usdTokens).forEach(([tokenId, one]) => {\n if (tokenId in prices) {\n const p = prices[tokenId];\n totalNearInUsdPools = totalNearInUsdPools.add(p.totalNear);\n totalUsdInUsdPools = totalUsdInUsdPools.add(\n p.totalOther.mul(OneNear).div(one)\n );\n }\n });\n\n const nearPrice = totalNearInUsdPools.gt(0)\n ? totalUsdInUsdPools.div(totalNearInUsdPools)\n : Big(0);\n\n return {\n loading: false,\n pools,\n poolsByToken,\n poolsByPair,\n nearPrice,\n refContract,\n prices,\n balances,\n whitelistedTokens,\n };\n};\n\nlet refRefreshTimer = null;\n\nexport const useRefFinance = singletonHook(defaultRefFinance, () => {\n const [refFinance, setRefFinance] = useState(defaultRefFinance);\n const account = useAccount();\n\n useEffect(() => {\n if (account && !account.loading) {\n let scheduleRefresh;\n let refresh;\n\n const localMapRef = (ref) => {\n ref.scheduleRefresh = scheduleRefresh;\n ref.refresh = refresh;\n return ref;\n };\n\n refresh = async () => {\n const ref = await fetchRefData(account);\n setRefFinance(localMapRef(ref));\n };\n\n scheduleRefresh = (fast) => {\n clearTimeout(refRefreshTimer);\n refRefreshTimer = setTimeout(\n async () => {\n if (!document.hidden) {\n await refresh();\n } else {\n scheduleRefresh(fast);\n }\n },\n fast ? 5000 : 30000\n );\n };\n\n refresh().catch(console.error);\n }\n }, [account]);\n\n return refFinance;\n});\n","import React from \"react\";\n\nexport default function MutedDecimals(props) {\n const value = props.value;\n\n const dotPos = value.indexOf(\".\");\n if (dotPos > 0) {\n return (\n <>\n {value.charAt(0) === \"<\" ? (\n <>\n {\"<\"} \n {value.substring(1, dotPos)}\n >\n ) : (\n value.substring(0, dotPos)\n )}\n {value.substring(dotPos)} \n >\n );\n }\n return value;\n}\n","import React, { useState } from \"react\";\nimport { useToken } from \"../../data/token\";\nimport {\n bigToString,\n computeUsdBalance,\n fromTokenBalance,\n} from \"../../data/utils\";\nimport { useRefFinance } from \"../../data/refFinance\";\nimport MutedDecimals from \"../common/MutedDecimals\";\n\nexport default function TokenBalance(props) {\n const [showUsd, setShowUsd] = useState(props.showUsd);\n const tokenAccountId = props.tokenAccountId;\n const balance = props.balance;\n const token = useToken(tokenAccountId);\n const refFinance = useRefFinance();\n const usdBalance = computeUsdBalance(refFinance, tokenAccountId, balance);\n\n const clickable = props.clickable && usdBalance;\n\n return (\n {\n if (clickable) {\n e.stopPropagation();\n setShowUsd(!showUsd);\n }\n }}\n >\n {showUsd && ~$ }\n \n \n );\n}\n","import \"./TokenBadge.scss\";\nimport React from \"react\";\nimport { useToken } from \"../../data/token\";\n\nexport default function TokenBadge(props) {\n const tokenAccountId = props.tokenAccountId;\n const token = useToken(tokenAccountId);\n const tokenOk = token && !token.invalidAccount && !token.notFound;\n const name = tokenOk ? token.metadata.name : \"\";\n const icon = tokenOk && token.metadata.icon;\n const symbol = tokenOk ? token.metadata.symbol : tokenAccountId;\n return (\n \n
\n {name}\n
\n
\n {icon &&
}\n
\n {symbol}\n \n
\n
\n );\n}\n","import \"./TokenAndBalance.scss\";\nimport TokenBalance from \"./TokenBalance\";\nimport React, { useState } from \"react\";\nimport TokenBadge from \"./TokenBadge\";\nimport uuid from \"react-uuid\";\n\nexport default function TokenAndBalance(props) {\n const [gkey] = useState(uuid());\n\n return (\n \n
{\" \"}\n
\n {props.balances.map(([label, balance], i) => (\n
\n {label} \n \n
\n ))}\n
\n
\n );\n}\n","import \"./SaleInputOutputs.scss\";\nimport TokenAndBalance from \"../token/TokenAndBalance\";\nimport React, { useState } from \"react\";\nimport uuid from \"react-uuid\";\n\nexport default function SaleInputOutputs(props) {\n const [gkey] = useState(uuid());\n const sale = props.sale || {};\n const saleEnded = props.sale && props.sale.ended();\n\n const inputBalances = saleEnded\n ? [[\"\", sale.inTokenPaid || props.inTokenPaid]]\n : props.detailed\n ? [\n [\"PAID: \", sale.inTokenPaid || props.inTokenPaid],\n [\"REMAINING: \", sale.inTokenRemaining || props.inTokenRemaining],\n ]\n : [[\"\", sale.inTokenRemaining || props.inTokenRemaining]];\n\n const outputBalances = (o) =>\n saleEnded\n ? [[\"\", o.distributed]]\n : props.detailed\n ? [\n [o.distributedLabel || \"DISTRIBUTED: \", o.distributed],\n [o.remainingLabel || \"REMAINING: \", o.remaining],\n ]\n : [[\"\", o.remaining]];\n\n return (\n \n
\n {props.inputLabel || (sale.ended() ? \"Total Paid\" : \"Total Paying\")}\n \n
\n
\n \n {props.outputLabel ||\n (sale.ended() ? \"Total Received\" : \"Total Receiving\")}\n \n \n
\n {(sale.outTokens || props.outTokens).map((o, i) => {\n const key = `${gkey}-out-token-${i}`;\n return (\n
\n );\n })}\n
\n );\n}\n","import { useToken } from \"../../data/token\";\n\nexport default function TokenSymbol(props) {\n const tokenAccountId = props.tokenAccountId;\n const token = useToken(tokenAccountId);\n return !tokenAccountId\n ? \"???\"\n : !token\n ? tokenAccountId\n : token.invalidAccount\n ? `Invalid account Id ${tokenAccountId}`\n : token.notFound\n ? `Token Id ${tokenAccountId} not found`\n : token.metadata.symbol;\n}\n","import \"./Rate.scss\";\nimport React, { useState } from \"react\";\nimport TokenSymbol from \"../token/TokenSymbol\";\nimport Big from \"big.js\";\nimport {\n bigToString,\n computeUsdBalance,\n fromTokenBalance,\n toTokenBalance,\n} from \"../../data/utils\";\nimport { useToken } from \"../../data/token\";\nimport { useRefFinance } from \"../../data/refFinance\";\nimport MutedDecimals from \"./MutedDecimals\";\n\nconst View = {\n Regular: \"Regular\",\n USD: \"USD\",\n Inverse: \"Inverse\",\n};\n\nexport default function Rate(props) {\n const [view, setView] = useState(0);\n const sale = props.sale || {};\n const outTokens = sale.outTokens || props.outTokens;\n const out = outTokens[0];\n const inTokenAccountId = sale.inTokenAccountId || props.inTokenAccountId;\n const inTokenRemaining = sale.inTokenRemaining || props.inTokenRemaining;\n const inToken = useToken(inTokenAccountId);\n const outToken = useToken(out.tokenAccountId);\n\n const inAmount = fromTokenBalance(inToken, inTokenRemaining);\n const outAmount = fromTokenBalance(outToken, out.remaining);\n\n const price = inAmount.gt(0) ? outAmount.div(inAmount) : null;\n const inversePrice = price && price.gt(0) ? Big(1).div(price) : null;\n\n const refFinance = useRefFinance();\n const usdBalance = computeUsdBalance(\n refFinance,\n inTokenAccountId,\n toTokenBalance(inToken, inversePrice)\n );\n\n const views = [View.Regular];\n if (usdBalance) {\n views.push(View.USD);\n }\n if (!props.hideInverse) {\n views.push(View.Inverse);\n }\n\n const numViews = views.length;\n\n return (\n \n
{props.title || \"Rate\"}
\n {price ? (\n
setView((view + 1) % numViews)}\n >\n {views[view] === View.Inverse ? (\n
\n 1 ={\" \"}\n \n \n {\" \"}\n \n
\n ) : views[view] === View.Regular ? (\n
\n 1 ={\" \"}\n \n \n {\" \"}\n \n
\n ) : (\n
\n 1 = ~\n \n \n {\" \"}\n USD\n
\n )}\n
\n ) : (\n
???
\n )}\n
\n );\n}\n","import Rate from \"../common/Rate\";\nimport React from \"react\";\n\nexport default function SaleRate(props) {\n const sale = props.sale;\n return sale.farAhead() ? null : sale.ended() ? (\n \n ) : (\n \n );\n}\n","import \"./Sale.scss\";\nimport \"./SalePreview.scss\";\nimport React, { useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport RemainingDuration from \"./RemainingDuration\";\nimport SaleInputOutputs from \"./SaleInputOutputs\";\nimport SaleRate from \"./SaleRate\";\n\nexport default function SalePreview(props) {\n const sale = props.sale;\n useEffect(() => {\n sale.scheduleRefresh(false);\n }, [sale]);\n return (\n \n
\n
= 0 ? `/sale/${sale.saleId}` : \"#\"}\n className=\"sale-title-link\"\n >\n
{sale.title || \"Noname sale\"} \n \n
\n
\n
\n
\n
\n {sale.saleId >= 0 && (\n
\n \n {sale.subscription ? \"Your subscription\" : \"Details\"}\n \n
\n )}\n
\n
\n );\n}\n","import \"./SalesPage.scss\";\nimport React, { useState } from \"react\";\nimport { useSales } from \"../data/sales\";\nimport uuid from \"react-uuid\";\nimport SalePreview from \"../components/sale/SalePreview\";\nimport { isLowValueSale, isSaleWhitelisted, Loading } from \"../data/utils\";\nimport { useRefFinance } from \"../data/refFinance\";\n\nfunction SalesPage(props) {\n const [gkey] = useState(uuid());\n const sales = useSales();\n\n const [whitelistedOnly, setWhitelistedOnly] = useState(true);\n const [displayLowValueSales, setDisplayLowValueSales] = useState(false);\n\n const refFinance = useRefFinance();\n let sortedSales = [...sales.sales];\n if (refFinance && refFinance.whitelistedTokens && whitelistedOnly) {\n if (displayLowValueSales) {\n sortedSales = sortedSales.filter((sale) =>\n isSaleWhitelisted(sale, refFinance)\n );\n } else {\n sortedSales = sortedSales.filter(\n (sale) =>\n isSaleWhitelisted(sale, refFinance) &&\n !isLowValueSale(sale, refFinance)\n );\n }\n }\n sortedSales.sort((a, b) => a.endDate - b.endDate);\n\n const allUpcomingSales = sortedSales.filter(\n (sale) => !sale.ended() && !sale.started()\n );\n const currentSalesAndSoon = sortedSales.filter(\n (sale) => !sale.ended() && (sale.started() || !sale.farAhead())\n );\n const upcomingSales = allUpcomingSales.filter((sale) => sale.farAhead());\n // Reverse sort, but keep order stable for same time\n sortedSales.sort((a, b) => b.endDate - a.endDate);\n const endedSales = sortedSales.filter((sale) => sale.ended());\n\n const saleList = (sale) => {\n const key = `${gkey}-sale-${sale.saleId}`;\n return ;\n };\n\n const allSales = [\n [\"Ongoing listings or starting soon\", currentSalesAndSoon],\n [\"Upcoming listings\", upcomingSales],\n [\"Completed listings\", endedSales],\n ];\n\n return (\n \n
\n {sales.loading || !refFinance ? (\n
\n
Loading {Loading} \n \n ) : (\n <>\n
\n {allSales.map(([title, sales], i) => {\n return (\n sales.length > 0 && (\n
\n
{title} \n {sales.map(saleList)}\n \n )\n );\n })}\n >\n )}\n
\n
\n );\n}\n\nexport default SalesPage;\n","import useSWR from \"swr\";\nimport { useAccount } from \"./account\";\nimport { NearConfig } from \"./near\";\nimport { availableNearBalance } from \"./utils\";\nimport { BalanceType } from \"../components/account/AccountBalance\";\nimport { useToken } from \"./token\";\nimport { useRefFinance } from \"./refFinance\";\nimport { useEffect, useState } from \"react\";\n\nexport const getTokenBalancesFetcher = async (\n _key,\n tokenAccountId,\n tokenBalance,\n account,\n refFinance\n) => {\n const fetchedBalances = {};\n if (account && !account.loading) {\n if (tokenAccountId in account.balances) {\n const balance = account.balances[tokenAccountId];\n fetchedBalances[BalanceType.Internal] = balance;\n }\n if (tokenBalance) {\n fetchedBalances[BalanceType.Wallet] = tokenBalance;\n }\n if (account.accountId && tokenAccountId === NearConfig.wrapNearAccountId) {\n let nativeNearBalance = availableNearBalance(account);\n fetchedBalances[BalanceType.NEAR] = nativeNearBalance;\n }\n if (refFinance && tokenAccountId in refFinance.balances) {\n const balance = refFinance.balances[tokenAccountId];\n fetchedBalances[BalanceType.Ref] = balance;\n }\n }\n return fetchedBalances;\n};\n\nexport const useTokenBalances = (tokenAccountId) => {\n const account = useAccount();\n const token = useToken(tokenAccountId);\n const [currentTokenAccountId, setCurrentTokenAccountId] = useState(\n tokenAccountId\n );\n const [tokenBalance, setTokenBalance] = useState(null);\n if (currentTokenAccountId !== tokenAccountId) {\n setCurrentTokenAccountId(tokenAccountId);\n setTokenBalance(null);\n }\n\n useEffect(() => {\n if (account.accountId && token && token.metadata && tokenBalance === null) {\n token.contract\n .balanceOf(account, account.accountId)\n .then(setTokenBalance)\n .catch(() => setTokenBalance(false));\n }\n }, [account, tokenBalance, token]);\n\n const { data: tokenBalances } = useSWR(\n [\"token_balances\", tokenAccountId, tokenBalance, account, useRefFinance()],\n getTokenBalancesFetcher\n );\n return {\n tokenBalances,\n resetTokenBalance: () => {\n setTokenBalance(null);\n },\n };\n};\n","import \"./AccountBalance.scss\";\nimport React, { useEffect, useState } from \"react\";\nimport TokenAndBalance from \"../token/TokenAndBalance\";\nimport { useAccount } from \"../../data/account\";\nimport TokenSymbol from \"../token/TokenSymbol\";\nimport {\n tokenRegisterStorageAction,\n useToken,\n WrappedTokens,\n WrappedTokenType,\n} from \"../../data/token\";\nimport { NearConfig, TGas } from \"../../data/near\";\nimport { keysToCamel, Loading } from \"../../data/utils\";\nimport * as nearAPI from \"near-api-js\";\nimport TokenBalance from \"../token/TokenBalance\";\nimport Big from \"big.js\";\nimport { useTokenBalances } from \"../../data/tokenBalances\";\n\nexport const BalanceType = {\n Internal: \"INTERNAL\",\n Wallet: \"WALLET\",\n NEAR: \"NEAR\",\n Ref: \"REF FINANCE\",\n};\n\nexport function AccountBalance(props) {\n const tokenAccountId = props.tokenAccountId;\n\n const [loading, setLoading] = useState(false);\n const [balances, setBalances] = useState([]);\n\n const account = useAccount();\n const token = useToken(tokenAccountId);\n\n const onFetchedBalances = props.onFetchedBalances;\n\n const { tokenBalances, resetTokenBalance } = useTokenBalances(tokenAccountId);\n useEffect(() => {\n if (tokenBalances) {\n const balances = [];\n Object.entries(tokenBalances).forEach(([key, balance]) => {\n if (balance && balance.gt(0)) {\n balances.push([`${key}: `, balance]);\n }\n });\n setBalances(balances);\n if (onFetchedBalances) {\n onFetchedBalances(tokenBalances);\n }\n }\n }, [tokenBalances, onFetchedBalances]);\n\n const internalBalance =\n (tokenBalances && tokenBalances[BalanceType.Internal]) || Big(0);\n const refBalance =\n (tokenBalances && tokenBalances[BalanceType.Ref]) || Big(0);\n const tokenBalance =\n (tokenBalances && tokenBalances[BalanceType.Wallet]) || Big(0);\n\n const [isUnlocked, setIsUnlocked] = useState(null);\n const [isUnwrappable, setIsUnwrappable] = useState(false);\n\n useEffect(() => {\n if (isUnlocked === null && token && account.near) {\n if (token.contract.isWrappedToken) {\n setIsUnwrappable(true);\n token.contract.isUnlocked(account).then(setIsUnlocked);\n } else {\n setIsUnlocked(false);\n }\n }\n }, [isUnlocked, token, account]);\n\n const canUnwrap = tokenBalance.gt(0) && isUnlocked;\n const unwrapPossible = tokenBalance.gt(0) && isUnwrappable;\n\n const [expanded, setExpanded] = useState(false);\n\n useEffect(() => {\n setExpanded(unwrapPossible);\n }, [unwrapPossible]);\n\n const clickable =\n props.clickable &&\n (internalBalance.gt(0) || refBalance.gt(0) || unwrapPossible);\n\n const registerAction = (actions) =>\n tokenRegisterStorageAction(account, tokenAccountId, actions);\n\n const unwrapTokenAction = async (actions, balance) => {\n if (canUnwrap) {\n if (WrappedTokens[tokenAccountId] === WrappedTokenType.WrappedNEAR) {\n const tokenBalance = await token.contract.balanceOf(\n account,\n account.accountId\n );\n actions.push([\n NearConfig.wrapNearAccountId,\n nearAPI.transactions.functionCall(\n \"near_withdraw\",\n {\n amount: tokenBalance.add(balance).toFixed(0),\n },\n TGas.mul(10).toFixed(0),\n 1\n ),\n ]);\n } else if (WrappedTokens[tokenAccountId] === WrappedTokenType.WrappedFT) {\n const info = keysToCamel(\n await account.near.account.viewFunction(tokenAccountId, \"get_info\")\n );\n const lockedTokenAccountId = info.lockedTokenAccountId;\n await tokenRegisterStorageAction(\n account,\n lockedTokenAccountId,\n actions\n );\n actions.push([\n tokenAccountId,\n nearAPI.transactions.functionCall(\n \"unwrap\",\n {},\n TGas.mul(50).toFixed(0),\n 1\n ),\n ]);\n }\n }\n };\n\n const withdrawInternal = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n const actions = [];\n await registerAction(actions);\n\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"withdraw_token\",\n {\n token_account_id: tokenAccountId,\n },\n TGas.mul(40).toFixed(0),\n 0\n ),\n ]);\n\n await unwrapTokenAction(actions, internalBalance);\n\n if (actions.length === 1) {\n // simple\n await account.near.contract.withdraw_token(\n {\n token_account_id: tokenAccountId,\n },\n TGas.mul(40).toFixed(0),\n 0\n );\n } else {\n await account.near.sendTransactions(actions);\n return;\n }\n await account.refresh();\n resetTokenBalance();\n setLoading(false);\n };\n\n const withdrawFromRef = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n const actions = [];\n await registerAction(actions);\n\n actions.push([\n NearConfig.refContractName,\n nearAPI.transactions.functionCall(\n \"withdraw\",\n {\n token_id: tokenAccountId,\n amount: refBalance.toFixed(0),\n unregister: false,\n },\n TGas.mul(70).toFixed(0),\n 1\n ),\n ]);\n\n await unwrapTokenAction(actions, refBalance);\n await account.near.sendTransactions(actions);\n };\n\n const unwrapToken = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n const actions = [];\n await registerAction(actions);\n\n await unwrapTokenAction(actions, Big(0));\n await account.near.sendTransactions(actions);\n };\n\n return (\n \n
clickable && setExpanded(!expanded)}\n >\n \n
\n {expanded && (\n
\n {internalBalance.gt(0) && (\n withdrawInternal(e)}\n >\n {loading && Loading}\n Withdraw{\" \"}\n {\" \"}\n to wallet\n \n )}\n {refBalance.gt(0) && (\n withdrawFromRef(e)}\n >\n {loading && Loading}\n Withdraw{\" \"}\n {\" \"}\n from REF Finance\n to wallet\n \n )}\n {unwrapPossible && (\n unwrapToken(e)}\n >\n {loading && Loading}\n Unwrap{\" \"}\n {\" \"}\n \n \n )}\n
\n )}\n
\n );\n}\n","import React, { useState } from \"react\";\nimport { dateToString, Loading } from \"../../data/utils\";\nimport Timer from \"react-compound-timer\";\nimport TokenBalance from \"../token/TokenBalance\";\nimport {\n NearConfig,\n SkywardRegisterStorageDeposit,\n TGas,\n} from \"../../data/near\";\nimport TokenSymbol from \"../token/TokenSymbol\";\nimport * as nearAPI from \"near-api-js\";\nimport {tokenStorageDeposit, useToken} from \"../../data/token\";\n\nexport default function LockupAccount(props) {\n const [loading, setLoading] = useState(false);\n const account = props.account;\n const lockupAccount = account.lockupAccount;\n const time = new Date().getTime();\n\n const progress = lockupAccount.started()\n ? (lockupAccount.passedDuration() / lockupAccount.duration) * 100\n : ((lockupAccount.startTimestamp - time) /\n (lockupAccount.endTimestamp - time)) *\n 100;\n\n const remainingDuration = lockupAccount.started()\n ? lockupAccount.duration - lockupAccount.passedDuration()\n : lockupAccount.startDate - time;\n\n const unclaimedBalance = lockupAccount.unclaimedBalance();\n const remainingBalance = lockupAccount.remainingBalance;\n\n const skywardToken = useToken(NearConfig.skywardTokenAccountId);\n\n const claimLocked = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n const actions = [];\n\n if (!(NearConfig.skywardTokenAccountId in account.balances)) {\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"register_token\",\n {\n token_account_id: NearConfig.skywardTokenAccountId,\n },\n TGas.mul(10).toFixed(0),\n SkywardRegisterStorageDeposit.toFixed(0)\n ),\n ]);\n }\n\n if (\n !(await skywardToken.contract.isRegistered(account, account.accountId))\n ) {\n actions.push([\n NearConfig.skywardTokenAccountId,\n nearAPI.transactions.functionCall(\n \"storage_deposit\",\n {\n account_id: account.accountId,\n registration_only: true,\n },\n TGas.mul(5).toFixed(0),\n (await tokenStorageDeposit(account.near, NearConfig.skywardTokenAccountId)).toFixed(\n 0\n )\n ),\n ]);\n }\n\n actions.push([\n lockupAccount.lockupAccountId,\n nearAPI.transactions.functionCall(\n \"claim\",\n {},\n TGas.mul(60).toFixed(0),\n 0\n ),\n ]);\n\n await account.near.sendTransactions(actions);\n };\n\n return (\n \n
\n
\n {dateToString(lockupAccount.startDate)}\n
\n
\n {dateToString(lockupAccount.endDate)}\n
\n
\n
\n {lockupAccount.started() ? (\n
\n {lockupAccount.started() && (\n
{Math.trunc(progress * 10) / 10}%
\n )}\n
\n ) : (\n <>\n
\n Locked\n
\n
\n Release 0%\n
\n >\n )}\n
\n
\n {lockupAccount.ended() ? (\n \"Fully unlocked\"\n ) : (\n
\n {lockupAccount.started()\n ? \"Remaining duration\"\n : \"Unlock starts in\"}{\" \"}\n \n {() => (\n \n \n v > 1 ? `${v} days ` : v ? `1 day ` : \"\"\n }\n />\n :\n `${v}`.padStart(2, \"0\")} />\n :\n `${v}`.padStart(2, \"0\")} />\n \n )}\n \n
\n )}\n
\n {remainingBalance.gt(0) && (\n
\n
\n Remaining locked balance:{\" \"}\n \n
\n
\n claimLocked(e)}\n >\n {loading && Loading}\n Claim{\" \"}\n {\" \"}\n {\" \"}\n to wallet\n \n
\n
\n )}\n
\n );\n}\n","import React, { useState } from \"react\";\nimport { useAccount } from \"../../data/account\";\nimport uuid from \"react-uuid\";\nimport { AccountBalance } from \"./AccountBalance\";\nimport { Loading } from \"../../data/utils\";\nimport LockupAccount from \"./LockupAccount\";\nimport { useRefFinance } from \"../../data/refFinance\";\n\nexport default function Account(props) {\n const [gkey] = useState(uuid());\n const account = useAccount();\n const refFinance = useRefFinance();\n\n const tokens = Object.assign(\n {},\n account && !account.loading ? account.balances : {},\n refFinance ? refFinance.balances : {}\n );\n\n const balances = Object.keys(tokens).map((tokenAccountId) => (\n \n ));\n return (\n <>\n {account.lockupAccount && account.lockupAccount.hasBalance && (\n \n
\n
$SKYWARD Lockup \n \n \n
\n )}\n \n {account.loading ? (\n
{Loading} loading...
\n ) : (\n
\n
Balances \n
{balances}
\n
\n )}\n
\n >\n );\n}\n","import React, { useState } from \"react\";\nimport { useAccount } from \"../../data/account\";\nimport useSWR from \"swr\";\nimport Big from \"big.js\";\nimport uuid from \"react-uuid\";\nimport TokenBalance from \"../token/TokenBalance\";\nimport TokenSymbol from \"../token/TokenSymbol\";\nimport { useSales } from \"../../data/sales\";\n\nconst referralFetcher = async (_key, accountId) => {\n if (!accountId) {\n return null;\n }\n let request = {\n user: \"public_readonly\",\n host: \"mainnet.db.explorer.indexer.near.dev\",\n database: \"mainnet_explorer\",\n password: \"nearprotocol\",\n port: 5432,\n parameters: [accountId],\n query:\n \"select (args->'args_json'->>'sale_id')::int sale_id, predecessor_account_id, SUM(CAST(args->'args_json'->>'amount' as numeric)) amount from action_receipt_actions join receipts using(receipt_id) join execution_outcomes using(receipt_id) where action_kind = 'FUNCTION_CALL' and receiver_account_id = 'skyward.near' and args->>'method_name' = 'sale_deposit_in_token' and args->'args_json'->>'referral_id' = $1 and status = 'SUCCESS_VALUE' group by sale_id, predecessor_account_id order by sale_id, amount desc\",\n };\n\n const res = await fetch(`https://rest.nearapi.org/explorer`, {\n method: \"POST\",\n body: JSON.stringify(request),\n headers: {\n \"Content-type\": \"application/json; charset=UTF-8\",\n },\n });\n\n const response = await res.json();\n\n return response.map((row) => ({\n saleId: row.sale_id,\n accountId: row.predecessor_account_id,\n amount: Big(row.amount),\n }));\n};\n\nexport default function AllReferrals(props) {\n const sales = useSales();\n const account = useAccount();\n const [gkey] = useState(uuid());\n\n const { data: referrals } = useSWR(\n [\"all-referrals\", account && account.accountId],\n referralFetcher\n );\n\n if (!(account && account.accountId) || !sales) {\n return false;\n }\n\n const computeBonus = (sale, amount) =>\n sale && sale.inTokenPaid.gt(0)\n ? amount\n .mul(sale.outTokens[0].distributed.add(sale.outTokens[0].remaining))\n .div(sale.inTokenPaid)\n .mul(sale.outTokens[0].referralBpt)\n .div(20000)\n : Big(0);\n\n return referrals && referrals.length > 0 ? (\n \n
\n
Referral bonuses \n
\n
\n \n \n Listing \n Referee account ID \n Amount deposited \n Estimated bonus \n \n \n \n {referrals.map(({ saleId, accountId, amount }, i) => {\n const sale = sales.sales[saleId];\n const outToken = sale && sale.outTokens[0];\n return (\n sale && (\n \n {saleId} \n {accountId} \n \n {\" \"}\n \n \n \n {\" \"}\n \n \n \n )\n );\n })}\n \n
\n
\n
\n
\n ) : (\n <>>\n );\n}\n","import React, { useState } from \"react\";\nimport Account from \"../components/account/Account\";\nimport { useSales } from \"../data/sales\";\nimport SalePreview from \"../components/sale/SalePreview\";\nimport uuid from \"react-uuid\";\nimport AllReferrals from \"../components/account/AllReferrals\";\n\nexport default function AccountPage(props) {\n const [gkey] = useState(uuid());\n const sales = useSales();\n\n const yourSales = [...sales.sales].filter((sale) => !!sale.subscription);\n yourSales.sort((a, b) => b.endDate - a.endDate);\n\n return (\n \n
\n
\n {yourSales.length > 0 && (\n
\n
Your subscriptions \n {yourSales.map((sale) => {\n const key = `${gkey}-sale-${sale.saleId}`;\n return ;\n })}\n \n )}\n
\n
\n
\n );\n}\n","import { bigToString } from \"../../data/utils\";\nimport Big from \"big.js\";\nimport React, { useEffect, useState } from \"react\";\nimport uuid from \"react-uuid\";\nimport \"./AvailableInput.scss\";\n\nexport default function AvailableInput(props) {\n const [inputId] = useState(props.id || uuid());\n const [isMax, setIsMax] = useState(false);\n const limit = props.limit;\n const value = props.value;\n const setValue = props.setValue;\n\n const [lastExternalValue, setLastExternalValue] = useState(value);\n const [innerValue, setInnerValue] = useState(value);\n\n useEffect(() => {\n if (\n value !== lastExternalValue &&\n (!value || !lastExternalValue || !Big(value).eq(lastExternalValue))\n ) {\n setIsMax(false);\n setLastExternalValue(value);\n if (!value || !innerValue || !Big(value).eq(Big(innerValue) || Big(0))) {\n setInnerValue(value);\n }\n }\n }, [value, lastExternalValue, innerValue]);\n\n useEffect(() => {\n if (limit) {\n const roundLimit = limit.round(6, 0);\n if (isMax && !roundLimit.eq(value || Big(0))) {\n setInnerValue(roundLimit);\n setLastExternalValue(roundLimit);\n setValue(roundLimit);\n }\n }\n }, [isMax, value, limit, setValue]);\n\n const isInvalid = (limit || Big(0)).lt(value || Big(0));\n return (\n \n
\n
{\n e.preventDefault();\n setIsMax(false);\n let v = value;\n const nv = e.target.value;\n if (nv.length > 0) {\n try {\n v = Big(nv);\n if (v.lt(0)) {\n v = v.mul(-1);\n setInnerValue(v);\n } else {\n setInnerValue(nv);\n }\n } catch (e) {\n setInnerValue(value);\n }\n } else {\n v = null;\n setInnerValue(nv);\n }\n setLastExternalValue(value);\n setValue(v);\n }}\n />\n
\n {props.label || \"Available\"}{\" \"}\n {bigToString(limit)} \n {props.extraLabel}\n \n
\n {props.extraLabelRight}\n
\n
\n
setIsMax(true)}\n >\n MAX\n \n
\n );\n}\n","import useSWR from \"swr\";\nimport { useAccount } from \"./account\";\n\nexport const getSalePermissionFetcher = async (\n _key,\n saleId,\n permissionsContractId,\n account\n) => {\n if (!permissionsContractId) {\n return true;\n }\n if (!account || account.loading) {\n return false;\n }\n try {\n const res = await account.near.viewCall(\n permissionsContractId,\n \"is_approved\",\n {\n account_id: account.accountId,\n sale_id: saleId,\n }\n );\n return !!res;\n } catch (e) {\n // failed\n }\n return false;\n};\n\nexport const useSalePermission = (sale) => {\n const { data: depositPermission } = useSWR(\n [\"sale_permission\", sale.saleId, sale.permissionsContractId, useAccount()],\n getSalePermissionFetcher\n );\n return depositPermission;\n};\n","import \"./Sale.scss\";\nimport \"./SalePreview.scss\";\nimport React, { useState } from \"react\";\nimport SaleInputOutputs from \"./SaleInputOutputs\";\nimport Rate from \"../common/Rate\";\nimport Big from \"big.js\";\nimport TokenSymbol from \"../token/TokenSymbol\";\nimport {\n bigMin,\n bigToString,\n fromTokenBalance,\n getCurrentReferralId,\n isBridgeToken,\n isLowValueSale,\n isSaleWhitelisted,\n Loading,\n toTokenBalance,\n} from \"../../data/utils\";\nimport {tokenRegisterStorageAction, tokenStorageDeposit, useToken} from \"../../data/token\";\nimport { useAccount } from \"../../data/account\";\nimport {\n IsMainnet,\n LsKey,\n NearConfig,\n SkywardRegisterStorageDeposit,\n SubscribeDeposit,\n TGas,\n} from \"../../data/near\";\nimport * as nearAPI from \"near-api-js\";\nimport AvailableInput from \"../common/AvailableInput\";\nimport ls from \"local-storage\";\nimport TokenBalance from \"../token/TokenBalance\";\nimport { useSales } from \"../../data/sales\";\nimport { useTokenBalances } from \"../../data/tokenBalances\";\nimport { BalanceType } from \"../account/AccountBalance\";\nimport { useRefFinance } from \"../../data/refFinance\";\nimport { useSalePermission } from \"../../data/salePermission\";\n\nconst DepositMode = \"Deposit\";\nconst WithdrawMode = \"Withdrawal\";\n\nexport default function Subscription(props) {\n const withdrawToWalletLsKey = LsKey + \"withdrawToWallet\";\n\n const [mode, setMode] = useState(null);\n const [loading, setLoading] = useState(false);\n const [extraDeposit, setExtraDeposit] = useState(null);\n const [withdrawAmount, setWithdrawAmount] = useState(null);\n const [withdrawToWallet, setWithdrawToWallet] = useState(\n ls.get(withdrawToWalletLsKey) || false\n );\n\n const sale = props.sale;\n const sales = useSales();\n\n const account = useAccount();\n const inToken = useToken(sale.inTokenAccountId);\n\n const refFinance = useRefFinance();\n\n const depositPermission = useSalePermission(sale);\n\n const subscription = sale.subscription || {\n claimedOutBalance: sale.outTokens.map(() => Big(0)),\n spentInBalance: Big(0),\n remainingInBalance: Big(0),\n unclaimedOutBalances: sale.outTokens.map(() => Big(0)),\n shares: Big(0),\n noSub: true,\n };\n\n let availableInToken = Big(0);\n const { tokenBalances } = useTokenBalances(sale.inTokenAccountId);\n\n if (tokenBalances) {\n Object.entries(tokenBalances).forEach(([key, balance]) => {\n if (balance && key !== BalanceType.Ref) {\n availableInToken = availableInToken.add(balance);\n }\n });\n }\n const availableInTokenHuman = fromTokenBalance(inToken, availableInToken);\n const subRemainingInBalanceHuman = fromTokenBalance(\n inToken,\n subscription.remainingInBalance\n );\n\n let extraDepositBalance = toTokenBalance(inToken, extraDeposit || Big(0));\n if (extraDepositBalance.gt(availableInToken)) {\n extraDepositBalance = availableInToken;\n }\n let withdrawAmountBalance = toTokenBalance(inToken, withdrawAmount || Big(0));\n if (withdrawAmountBalance.gt(subscription.remainingInBalance)) {\n withdrawAmountBalance = subscription.remainingInBalance;\n }\n\n const subInToken = subscription.remainingInBalance\n .add(extraDepositBalance)\n .sub(withdrawAmountBalance);\n\n const subInExtraShares =\n sale.totalShares.eq(0) || sale.inTokenRemaining.eq(0)\n ? extraDepositBalance\n : sale.totalShares\n .mul(extraDepositBalance.sub(withdrawAmountBalance))\n .div(sale.inTokenRemaining);\n\n const subInTotalShares = subscription.shares.add(subInExtraShares);\n\n const adjustForReferral = (balance, subscription, outToken) => {\n if (!outToken.referralBpt) {\n return balance;\n }\n const referralAmount = balance.mul(outToken.referralBpt).div(10000);\n if (subscription.referralId) {\n return balance.sub(referralAmount.div(2));\n } else {\n return balance.sub(referralAmount);\n }\n };\n\n const resShares = sale.totalShares.add(subInExtraShares);\n\n const subOutTokens = sale.outTokens.map((o, i) => {\n return {\n tokenAccountId: o.tokenAccountId,\n remainingLabel: \"EXPECTED: \",\n distributedLabel: \"RECEIVED: \",\n remaining: resShares.gt(0)\n ? subInTotalShares.mul(o.remaining).div(resShares)\n : subInToken.gt(0)\n ? Big(o.remaining)\n : Big(0),\n distributed: adjustForReferral(\n subscription.claimedOutBalance[i].add(\n subscription.unclaimedOutBalances[i]\n ),\n subscription,\n o\n ),\n };\n });\n\n let claimBalance = adjustForReferral(\n subscription.unclaimedOutBalances[0],\n subscription,\n sale.outTokens[0]\n );\n\n const makeOutRegistered = async (actions) => {\n const outTokens = sale.outTokens.map((o) => o.tokenAccountId);\n for (let i = 0; i < outTokens.length; i++) {\n await tokenRegisterStorageAction(account, outTokens[i], actions);\n }\n };\n\n const subscribeToSale = async (e) => {\n e.preventDefault();\n setLoading(true);\n const amount = extraDepositBalance;\n const actions = [];\n\n let referralId = getCurrentReferralId(sale.saleId) || undefined;\n if (referralId === account.accountId) {\n referralId = undefined;\n }\n\n const skywardBalance =\n sale.inTokenAccountId in account.balances\n ? account.balances[sale.inTokenAccountId]\n : Big(0);\n\n const fromInToken = amount.gt(skywardBalance)\n ? amount.sub(skywardBalance)\n : Big(0);\n\n await makeOutRegistered(actions);\n\n if (!(sale.inTokenAccountId in account.balances)) {\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"register_token\",\n {\n token_account_id: sale.inTokenAccountId,\n },\n TGas.mul(10).toFixed(0),\n SkywardRegisterStorageDeposit.toFixed(0)\n ),\n ]);\n }\n const inBalance = tokenBalances[BalanceType.Wallet] || Big(0);\n let remainingInBalance = fromInToken.sub(bigMin(fromInToken, inBalance));\n\n await tokenRegisterStorageAction(account, sale.inTokenAccountId, actions);\n\n if (sale.inTokenAccountId === NearConfig.wrapNearAccountId) {\n // wrap NEAR\n if (remainingInBalance.gt(0)) {\n const availableAccountAmount =\n tokenBalances[BalanceType.NEAR] || Big(0);\n const amountFromAccount = bigMin(\n availableAccountAmount,\n remainingInBalance\n );\n if (amountFromAccount.gt(0)) {\n remainingInBalance = remainingInBalance.sub(amountFromAccount);\n actions.push([\n sale.inTokenAccountId,\n nearAPI.transactions.functionCall(\n \"near_deposit\",\n {},\n TGas.mul(5).toFixed(0),\n amountFromAccount.toFixed(0)\n ),\n ]);\n }\n }\n }\n\n if (remainingInBalance.gt(0)) {\n throw new Error(\n `Remaining balance ${remainingInBalance.toFixed(0)} is greater than 0`\n );\n }\n\n await tokenRegisterStorageAction(\n account,\n sale.inTokenAccountId,\n actions,\n NearConfig.contractName\n );\n\n if (fromInToken.gt(0)) {\n actions.push([\n sale.inTokenAccountId,\n nearAPI.transactions.functionCall(\n \"ft_transfer_call\",\n {\n receiver_id: NearConfig.contractName,\n amount: fromInToken.toFixed(0),\n memo: `Subscribing to Skyward sale #${sale.saleId}`,\n msg: '\"AccountDeposit\"',\n },\n TGas.mul(50).toFixed(0),\n 1\n ),\n ]);\n }\n\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"sale_deposit_in_token\",\n {\n sale_id: sale.saleId,\n amount: amount.toFixed(0),\n referral_id: referralId,\n },\n TGas.mul(200).toFixed(0),\n SubscribeDeposit.toFixed(0)\n ),\n ]);\n\n await account.near.sendTransactions(actions);\n };\n\n const withdrawFromSale = async (e) => {\n e.preventDefault();\n setLoading(true);\n const maxWithdraw = withdrawAmount.gte(\n subRemainingInBalanceHuman.round(6, 0)\n );\n let amount = withdrawAmountBalance;\n const actions = [];\n\n const freshSale = await sales.fetchSale(sale.saleId);\n const freshRemainingIn = freshSale.subscription.remainingInBalance;\n const maxReceiveAmount = freshRemainingIn\n .mul(\n Big((freshSale.remainingDuration - 60e3) / freshSale.remainingDuration)\n )\n .round();\n\n await makeOutRegistered(actions);\n\n if (maxWithdraw) {\n amount = maxReceiveAmount;\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"sale_withdraw_in_token\",\n {\n sale_id: sale.saleId,\n },\n TGas.mul(30).toFixed(0),\n 1\n ),\n ]);\n } else {\n if (amount.gt(maxReceiveAmount)) {\n throw new Error(\"Not enough tokens\");\n }\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"sale_withdraw_in_token_exact\",\n {\n sale_id: sale.saleId,\n amount: amount.toFixed(0),\n },\n TGas.mul(30).toFixed(0),\n 1\n ),\n ]);\n }\n\n if (withdrawToWallet) {\n if (!(await inToken.contract.isRegistered(account, account.accountId))) {\n actions.push([\n sale.inTokenAccountId,\n nearAPI.transactions.functionCall(\n \"storage_deposit\",\n {\n account_id: account.accountId,\n registration_only: true,\n },\n TGas.mul(5).toFixed(0),\n (await tokenStorageDeposit(account.near, sale.inTokenAccountId)).toFixed(0)\n ),\n ]);\n }\n\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"withdraw_token\",\n {\n token_account_id: sale.inTokenAccountId,\n amount: amount.toFixed(0),\n },\n TGas.mul(40).toFixed(0),\n 0\n ),\n ]);\n\n if (sale.inTokenAccountId === NearConfig.wrapNearAccountId) {\n actions.push([\n sale.inTokenAccountId,\n nearAPI.transactions.functionCall(\n \"near_withdraw\",\n {\n amount: amount.toFixed(0),\n },\n TGas.mul(10).toFixed(0),\n 1\n ),\n ]);\n }\n }\n\n await account.near.sendTransactions(actions);\n };\n\n const claimOut = async (e) => {\n e.preventDefault();\n setLoading(true);\n await account.near.contract.sale_claim_out_tokens(\n {\n sale_id: sale.saleId,\n },\n TGas.mul(60).toFixed(0)\n );\n const actions = [];\n await makeOutRegistered(actions);\n const outTokens = sale.outTokens.map((o) => o.tokenAccountId);\n if (actions.length > 0) {\n outTokens.forEach((tokenAccountId) => {\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"withdraw_token\",\n {\n token_account_id: tokenAccountId,\n },\n TGas.mul(40).toFixed(0),\n 0\n ),\n ]);\n });\n\n await account.near.sendTransactions(actions);\n } else {\n for (let i = 0; i < outTokens.length; i++) {\n await account.near.contract.withdraw_token(\n {\n token_account_id: outTokens[i],\n },\n TGas.mul(40).toFixed(0),\n 0\n );\n }\n await sales.refreshSale(sale.saleId);\n setLoading(false);\n }\n };\n\n return account && account.accountId ? (\n (!sale.ended() || !subscription.noSub) && (\n \n
\n {!isSaleWhitelisted(sale, refFinance) && (\n
\n \n Danger! This listing contains tokens not whitelisted by REF\n Finance.\n \n \n Investing in this sale may result in receiving illiquid tokens\n and/or complete lose of funds.\n \n Please do your own research before you deposit funds into this\n listing.\n \n
\n )}\n {sale.farAhead() && (\n
\n Warning! This sale will begin in more than one week! \n \n Don't deposit{\" \"}\n now. There\n will be enough time to deposit before the sale begins.\n \n
\n )}\n {isLowValueSale(sale, refFinance) && (\n
\n Warning! The value of listed tokens is very low! \n \n Investing in this sale may result in partial lose of funds.\n \n Please do your own research before you deposit funds into this\n listing.\n \n
\n )}\n\n
\n {!sale.ended() && (\n
\n )}\n
\n {!mode ? (\n <>\n {!sale.ended() && depositPermission === false && (\n
\n
\n Your account doesn't have permission to participate in this\n sale\n \n
\n Listing URL:{\" \"}\n
\n {sale.url}\n \n
\n Permissions contract account ID is:{\" \"}\n
{sale.permissionsContractId} \n
\n )}\n
\n {!sale.ended() && (\n <>\n setMode(DepositMode)}\n >\n Deposit{\" \"}\n \n \n\n setMode(WithdrawMode)}\n >\n Withdraw{\" \"}\n \n \n >\n )}\n claimOut(e)}\n >\n {loading && Loading}\n Claim{\" \"}\n {\" \"}\n \n \n
\n >\n ) : mode === DepositMode ? (\n
\n
\n Deposit{\" \"}\n \n \n {\" \"}\n to receive{\" \"}\n \n \n {\" \"}\n \n (once the sale starts{\" \"}\n \n \n {\" \"}\n will be exchanging to{\" \"}\n \n \n \n )\n \n \n
setExtraDeposit(v)}\n limit={availableInTokenHuman}\n />\n \n
subscribeToSale(e)}\n >\n {loading && Loading}\n Deposit {extraDeposit && bigToString(extraDeposit)}{\" \"}\n to\n exchange for{\" \"}\n \n \n
{\n setExtraDeposit(null);\n setMode(null);\n }}\n >\n Cancel\n \n {IsMainnet &&\n sale.inTokenAccountId !== NearConfig.wrapNearAccountId && (\n
\n Buy \n \n )}\n {IsMainnet && isBridgeToken(sale.inTokenAccountId) && (\n
\n Bridge{\" \"}\n from\n Ethereum\n \n )}\n
\n \n ) : mode === WithdrawMode ? (\n
\n
\n Withdraw{\" \"}\n \n \n {\" \"}\n from sale\n \n
setWithdrawAmount(v)}\n limit={subRemainingInBalanceHuman}\n />\n \n {\n ls.set(withdrawToWalletLsKey, e.target.checked);\n setWithdrawToWallet(e.target.checked);\n }}\n />\n \n Withdraw to Wallet\n \n {\" \"}\n (if checked, the token will be also transferred from the\n internal balance to the wallet)\n \n \n
\n\n \n withdrawFromSale(e)}\n >\n {loading && Loading}\n Withdraw {withdrawAmount && bigToString(withdrawAmount)}{\" \"}\n \n \n {\n setWithdrawAmount(null);\n setMode(null);\n }}\n >\n Cancel\n \n
\n \n ) : (\n \"\"\n )}\n
\n
\n )\n ) : (\n Sign in to subscribe to this sale
\n );\n}\n","import React, { useState } from \"react\";\nimport { useAccount } from \"../../data/account\";\nimport useSWR from \"swr\";\nimport Big from \"big.js\";\nimport uuid from \"react-uuid\";\nimport TokenBalance from \"../token/TokenBalance\";\nimport TokenSymbol from \"../token/TokenSymbol\";\n\nconst referralFetcher = async (_key, saleId, accountId) => {\n if (!accountId) {\n return null;\n }\n let request = {\n user: \"public_readonly\",\n host: \"mainnet.db.explorer.indexer.near.dev\",\n database: \"mainnet_explorer\",\n password: \"nearprotocol\",\n port: 5432,\n parameters: [saleId, accountId],\n query:\n \"select predecessor_account_id, SUM(CAST(args->'args_json'->>'amount' as numeric)) amount from action_receipt_actions join receipts using(receipt_id) join execution_outcomes using(receipt_id) where action_kind = 'FUNCTION_CALL' and receiver_account_id = 'skyward.near' and args->>'method_name' = 'sale_deposit_in_token' and (args->'args_json'->>'sale_id')::int = $1 and args->'args_json'->>'referral_id' = $2 and status = 'SUCCESS_VALUE' group by predecessor_account_id order by amount desc\",\n };\n\n const res = await fetch(`https://rest.nearapi.org/explorer`, {\n method: \"POST\",\n body: JSON.stringify(request),\n headers: {\n \"Content-type\": \"application/json; charset=UTF-8\",\n },\n });\n\n const response = await res.json();\n\n return response.map((row) => ({\n accountId: row.predecessor_account_id,\n amount: Big(row.amount),\n }));\n};\n\nexport default function ReferralList(props) {\n const sale = props.sale;\n const account = useAccount();\n const [gkey] = useState(uuid());\n\n const { data: referrals } = useSWR(\n [\"referrals\", sale.saleId, account && account.accountId],\n referralFetcher\n );\n\n if (!(account && account.accountId) || !sale) {\n return false;\n }\n\n const totalDeposit = referrals\n ? referrals.reduce((s, { amount }) => s.add(amount), Big(0))\n : Big(0);\n\n const outToken = sale.outTokens[0];\n const referralBpt = outToken.referralBpt;\n\n const computeBonus = (amount) =>\n sale.inTokenPaid.gt(0)\n ? amount\n .mul(outToken.distributed.add(outToken.remaining))\n .div(sale.inTokenPaid)\n .mul(referralBpt)\n .div(20000)\n : Big(0);\n\n return referrals ? (\n <>\n \n
\n \n Note, the estimated amounts below may be less than the actual\n amounts. The withdrawals by referees are not accounted.\n \n
\n
\n Total amount deposited by your referees:{\" \"}\n {\" \"}\n \n
\n
\n Estimated total bonus:{\" \"}\n {\" \"}\n {\" \"}\n
\n
\n {referrals.length > 0 && (\n \n
\n \n \n # \n Referee account ID \n Amount deposited \n Estimated bonus \n \n \n \n {referrals.map(({ accountId, amount }, i) => (\n \n {i + 1} \n {accountId} \n \n {\" \"}\n \n \n \n {\" \"}\n \n \n \n ))}\n \n
\n
\n )}\n >\n ) : (\n <>>\n );\n}\n","import React from \"react\";\nimport { useAccount } from \"../../data/account\";\nimport TokenSymbol from \"../token/TokenSymbol\";\nimport { skywardUrl } from \"../../data/utils\";\nimport ReferralList from \"./ReferralList\";\n\nexport default function ReferralLink(props) {\n const sale = props.sale;\n const account = useAccount();\n if (!(account && account.accountId)) {\n return false;\n }\n\n const referralLink =\n skywardUrl() + `/sale/${sale.saleId}?r=${account.accountId}`;\n\n const referralBonus = sale.outTokens[0].referralBpt / 100;\n\n return (\n \n
\n
\n Referral bonus for this listing is {referralBonus}% \n
\n
\n \n Your referral link \n \n false}\n />\n
\n
\n Earn 50% commission from the referral pool for you and your invited\n friends. Invite your friends to join the sale through the referral\n link and get rewards when your friends participate in the sale. The\n more {\" \"}\n your friends receive, the more reward you and your friends get.\n
\n
\n
\n
\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport \"chartjs-adapter-moment\";\n\nimport { Line } from \"react-chartjs-2\";\nimport { useAccount } from \"../../data/account\";\nimport { LsKey, NearConfig } from \"../../data/near\";\nimport { mapSale } from \"../../data/sales\";\nimport { useToken } from \"../../data/token\";\nimport { fromTokenBalance } from \"../../data/utils\";\nimport ls from \"local-storage\";\n\nconst UnknownHistorySize = 24 * 4;\nconst MaxHistorySize = 24 * 14;\nconst MaxNumberToDisplay = 48;\nconst BlockInterval = 3600;\nconst truncBlockHeight = (h) => Math.trunc(h / BlockInterval) * BlockInterval;\n\nconst getCachedHistoricSale = (saleId, blockId) => {\n const lsKey = `${LsKey}hs:${saleId}:${blockId}`;\n let sale = ls.get(lsKey);\n if (sale !== null) {\n return sale ? mapSale(sale) : null;\n }\n return false;\n};\n\nconst fetchHistoricSale = async (near, saleId, blockId) => {\n const lsKey = `${LsKey}hs:${saleId}:${blockId}`;\n let sale = await near\n .archivalViewCall(blockId, NearConfig.contractName, \"get_sale\", {\n sale_id: saleId,\n })\n .catch((e) => false);\n if (sale !== false) {\n ls.set(lsKey, sale || false);\n if (sale) {\n sale = mapSale(sale);\n }\n }\n return sale;\n};\n\nexport default function PriceHistory(props) {\n const sale = props.sale;\n\n const [historicSales, setHistoricSales] = useState(false);\n\n const account = useAccount();\n useEffect(() => {\n if (historicSales === false && account && account.near) {\n setHistoricSales([]);\n const fetchHistoricData = async () => {\n const near = account.near;\n const currentHeight = sale.endBlockHeight || sale.currentBlockHeight;\n const firstBlockHeight = Math.max(\n currentHeight - BlockInterval * MaxHistorySize,\n sale.startBlockHeight ||\n currentHeight - BlockInterval * UnknownHistorySize\n );\n let height = truncBlockHeight(currentHeight);\n const step =\n BlockInterval *\n Math.max(\n 1,\n Math.trunc(\n Math.trunc((height - firstBlockHeight) / BlockInterval) /\n MaxNumberToDisplay\n )\n );\n const sales = [];\n let promises = [];\n let needFetching = 0;\n while (height > firstBlockHeight) {\n const cachedSale = getCachedHistoricSale(sale.saleId, height);\n if (cachedSale === false) {\n promises.push(fetchHistoricSale(near, sale.saleId, height));\n ++needFetching;\n } else {\n promises.push(Promise.resolve(cachedSale));\n }\n height -= step;\n if (needFetching === 10) {\n sales.push(...(await Promise.all(promises)));\n needFetching = 0;\n promises = [];\n setHistoricSales(sales);\n }\n }\n if (promises.length > 0) {\n sales.push(...(await Promise.all(promises)));\n setHistoricSales(sales);\n }\n };\n fetchHistoricData();\n }\n }, [historicSales, account, sale]);\n\n const inToken = useToken(sale.inTokenAccountId);\n const outToken = useToken(sale.outTokens[0].tokenAccountId);\n\n let lineData = false;\n let options = false;\n let numData = 0;\n if (historicSales && inToken && outToken) {\n const datasets = [\n {\n data: [],\n label: `Before sale started (no tokens sold) ${outToken.metadata.symbol} / ${inToken.metadata.symbol}`,\n fill: false,\n backgroundColor: \"#bbbbbb\",\n borderColor: \"#bbbbbb22\",\n },\n ];\n [sale, ...historicSales].reverse().forEach((sale, i) => {\n if (!sale) {\n return;\n }\n const x = Math.min(sale.endDate, sale.currentDate);\n\n const inAmount = fromTokenBalance(inToken, sale.inTokenRemaining);\n const outAmount = fromTokenBalance(outToken, sale.outTokens[0].remaining);\n const price = outAmount.gt(0) ? inAmount.div(outAmount) : null;\n\n if (price) {\n numData += 1;\n if (sale.started()) {\n if (datasets.length === 1) {\n datasets.push({\n data: [],\n label: `${outToken.metadata.symbol} / ${inToken.metadata.symbol}`,\n fill: false,\n backgroundColor: \"#8766ac\",\n borderColor: \"#8766ac22\",\n });\n }\n }\n datasets[sale.started() ? 1 : 0].data.push({\n x,\n y: price.toNumber(),\n });\n }\n });\n lineData = {\n datasets,\n };\n\n options = {\n animation: false,\n responsive: true,\n scales: {\n xAxis: {\n type: \"time\",\n time: {\n minUnit: \"hour\",\n },\n ticks: {\n major: {\n enabled: true,\n },\n },\n },\n yAxis: {\n min: 0,\n ticks: {\n beginAtZero: true,\n },\n },\n },\n };\n }\n\n return (\n lineData &&\n numData > 1 && (\n \n )\n );\n}\n","import React from \"react\";\nimport useSWR from \"swr\";\n\nconst statsFetcher = async (_key, saleId) => {\n let request = {\n user: \"public_readonly\",\n host: \"mainnet.db.explorer.indexer.near.dev\",\n database: \"mainnet_explorer\",\n password: \"nearprotocol\",\n port: 5432,\n parameters: [saleId],\n query:\n \"SELECT COUNT(DISTINCT receipt_predecessor_account_id) as total_participants FROM action_receipt_actions WHERE action_receipt_actions.receipt_receiver_account_id = 'skyward.near' AND ((action_receipt_actions.args->'args_json')->>'sale_id')::int = $1 AND action_receipt_actions.args->>'method_name' = 'sale_deposit_in_token'\",\n };\n\n const res = await fetch(`https://rest.nearapi.org/explorer`, {\n method: \"POST\",\n body: JSON.stringify(request),\n headers: {\n \"Content-type\": \"application/json; charset=UTF-8\",\n },\n });\n\n const response = await res.json();\n\n return parseInt(response[0][\"total_participants\"], 10);\n};\n\nexport default function SaleRate(props) {\n const { data: participants } = useSWR(\n [\"participants\", props.sale.saleId],\n statsFetcher\n );\n\n return (\n \n Total number of participants: {participants >= 0 ? participants : \"???\"}\n
\n );\n}\n","import \"./Sale.scss\";\nimport \"./SalePreview.scss\";\nimport React, { useEffect } from \"react\";\nimport RemainingDuration from \"./RemainingDuration\";\nimport SaleInputOutputs from \"./SaleInputOutputs\";\nimport Subscription from \"./Subscription\";\nimport ReferralLink from \"./ReferralLink\";\nimport PriceHistory from \"./PriceHistory\";\nimport SaleRate from \"./SaleRate\";\nimport SaleStats from \"./SaleStats\";\nimport { IsMainnet } from \"../../data/near\";\n\nexport default function Sale(props) {\n const sale = props.sale;\n useEffect(() => {\n sale.scheduleRefresh(true);\n }, [sale]);\n\n return (\n <>\n \n
\n
\n {sale.title || \"Noname sale\"}\n \n \n \n \n {IsMainnet && }\n \n \n \n
\n \n {!sale.farAhead() && }\n \n >\n );\n}\n","import React, { useState } from \"react\";\nimport { useSales } from \"../data/sales\";\nimport { useParams } from \"react-router\";\nimport Sale from \"../components/sale/Sale\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport ls from \"local-storage\";\nimport { getCurrentReferralId, referralLsKey } from \"../data/utils\";\nimport { useAccount } from \"../data/account\";\n\nfunction SalePage(props) {\n let { saleId } = useParams();\n\n const sales = useSales();\n\n saleId = parseInt(saleId);\n const sale = sales.sales[saleId];\n\n const currentReferralId = getCurrentReferralId(saleId);\n const [referralId, setReferralId] = useState(currentReferralId);\n\n const location = useLocation();\n const history = useHistory();\n const account = useAccount();\n\n const locationSearch = location.search;\n const query = new URLSearchParams(locationSearch);\n const r = query.get(\"r\");\n if (r) {\n setReferralId(r);\n query.delete(\"r\");\n location.search = query.toString();\n history.replace(location);\n }\n\n if (account && !account.loading && referralId !== currentReferralId) {\n if (!account.accountId || account.accountId !== referralId) {\n console.log(\"New referral\", referralId);\n ls.set(referralLsKey(saleId), {\n referralId,\n expires: new Date().getTime() + 7 * 24 * 60 * 60 * 1000,\n });\n }\n }\n\n return (\n \n
\n
\n {sales.loading ? (\n \"Loading\"\n ) : sale ? (\n \n ) : (\n \"Sale not found\"\n )}\n
\n
\n
\n );\n}\n\nexport default SalePage;\n","import { singletonHook } from \"react-singleton-hook\";\nimport { useEffect, useState } from \"react\";\nimport { useNear } from \"./near\";\nimport Big from \"big.js\";\n\nconst defaultTreasury = {\n loading: true,\n balances: {},\n};\n\nexport const useTreasury = singletonHook(defaultTreasury, () => {\n const [treasury, setTreasury] = useState(defaultTreasury);\n const _near = useNear();\n\n useEffect(() => {\n _near.then(async (near) => {\n let [\n rawBalances,\n skywardCirculatingSupply,\n listingFee,\n ] = await Promise.all([\n near.contract.get_treasury_balances(),\n near.contract.get_skyward_circulating_supply(),\n near.contract.get_listing_fee(),\n ]);\n skywardCirculatingSupply = Big(skywardCirculatingSupply);\n listingFee = Big(listingFee);\n const balances = {};\n rawBalances.forEach(([tokenAccountId, rawBalance]) => {\n balances[tokenAccountId] = Big(rawBalance);\n });\n\n setTreasury({\n loading: false,\n balances,\n skywardCirculatingSupply,\n listingFee,\n });\n });\n }, [_near]);\n return treasury;\n});\n","import React, { useEffect, useState } from \"react\";\nimport uuid from \"react-uuid\";\nimport TokenAndBalance from \"../token/TokenAndBalance\";\nimport { useTreasury } from \"../../data/treasury\";\nimport {\n MinUsdValue,\n NearConfig,\n SkywardRegisterStorageDeposit,\n TGas,\n} from \"../../data/near\";\nimport {\n bigMin,\n bigToString,\n computeUsdBalance,\n fromTokenBalance,\n Loading,\n OneSkyward,\n toTokenBalance,\n} from \"../../data/utils\";\nimport TokenSymbol from \"../token/TokenSymbol\";\nimport AvailableInput from \"../common/AvailableInput\";\nimport { useAccount } from \"../../data/account\";\nimport Big from \"big.js\";\nimport {isTokenRegistered, tokenStorageDeposit, useToken, WrappedTokens} from \"../../data/token\";\nimport TokenBalance from \"../token/TokenBalance\";\nimport * as nearAPI from \"near-api-js\";\nimport { defaultWhitelistedTokens, useRefFinance } from \"../../data/refFinance\";\nimport MutedDecimals from \"../common/MutedDecimals\";\n\nconst DefaultMode = \"DefaultMode\";\nconst RedeemMode = \"RedeemMode\";\n\nconst SkywardVestingSchedule = [\n {\n startTimestamp: 1627776000000,\n endTimestamp: 1630454400000,\n amount: Big(\"10000000000000000000000\"),\n },\n {\n startTimestamp: 1640995200000,\n endTimestamp: 1656633600000,\n amount: Big(\"90000000000000000000000\"),\n },\n {\n startTimestamp: 1625097600000,\n endTimestamp: 162509760000 + 604800000,\n amount: Big(\"250000000000000000000000\"),\n },\n {\n startTimestamp: 1627776000000,\n endTimestamp: 1627776000000 + 604800000,\n amount: Big(\"200000000000000000000000\"),\n },\n {\n startTimestamp: 1630454400000,\n endTimestamp: 1630454400000 + 604800000,\n amount: Big(\"150000000000000000000000\"),\n },\n {\n startTimestamp: 1633046400000,\n endTimestamp: 1633046400000 + 604800000,\n amount: Big(\"100000000000000000000000\"),\n },\n {\n startTimestamp: 1635724800000,\n endTimestamp: 1635724800000 + 604800000,\n amount: Big(\"100000000000000000000000\"),\n },\n {\n startTimestamp: 1638316800000,\n endTimestamp: 1638316800000 + 604800000,\n amount: Big(\"100000000000000000000000\"),\n },\n];\n\nexport default function Treasury(props) {\n const [mode, setMode] = useState(DefaultMode);\n const [loading, setLoading] = useState(false);\n const [gkey] = useState(uuid());\n const [skywardBurnAmountHuman, setSkywardBurnAmountHuman] = useState(null);\n const [skywardTokenBalance, setSkywardTokenBalance] = useState(null);\n\n const treasury = useTreasury();\n const account = useAccount();\n const skywardToken = useToken(NearConfig.skywardTokenAccountId);\n const refFinance = useRefFinance();\n\n let availableSkywardBalance = Big(0);\n let totalVestedAmount = Big(0);\n const currentTimestamp = new Date().getTime();\n SkywardVestingSchedule.forEach(({ startTimestamp, endTimestamp, amount }) => {\n totalVestedAmount = totalVestedAmount.add(\n currentTimestamp <= startTimestamp\n ? Big(0)\n : currentTimestamp >= endTimestamp\n ? amount\n : Big(currentTimestamp - startTimestamp)\n .mul(amount)\n .div(endTimestamp - startTimestamp)\n .round(0, 0)\n );\n });\n\n if (account && !account.loading && account.accountId) {\n if (NearConfig.skywardTokenAccountId in account.balances) {\n availableSkywardBalance = availableSkywardBalance.add(\n account.balances[NearConfig.skywardTokenAccountId]\n );\n }\n if (skywardToken) {\n if (skywardTokenBalance !== null) {\n availableSkywardBalance = availableSkywardBalance.add(\n skywardTokenBalance\n );\n } else {\n skywardToken.contract\n .balanceOf(account, account.accountId)\n .then((v) => setSkywardTokenBalance(v));\n }\n }\n }\n const availableSkywardBalanceHuman = fromTokenBalance(\n skywardToken,\n availableSkywardBalance\n );\n\n const skywardBurnAmount = skywardBurnAmountHuman\n ? bigMin(\n toTokenBalance(skywardToken, skywardBurnAmountHuman),\n availableSkywardBalance\n )\n : Big(0);\n\n const [selectedTokens, setSelectedTokens] = useState(null);\n\n useEffect(() => {\n if (\n selectedTokens === null &&\n account &&\n account.accountId &&\n !account.loading &&\n treasury.balances &&\n !treasury.loading\n ) {\n const refTokens = [...defaultWhitelistedTokens].reduce((a, v) => {\n a[v] = true;\n return a;\n }, {});\n\n const selectedTokens = Object.assign(\n {},\n WrappedTokens,\n refTokens,\n account.balances\n );\n Object.keys(selectedTokens).forEach((tokenAccountId) => {\n if (\n !(tokenAccountId in treasury.balances) ||\n treasury.balances[tokenAccountId].eq(0)\n ) {\n delete selectedTokens[tokenAccountId];\n }\n });\n setSelectedTokens(selectedTokens);\n }\n }, [account, selectedTokens, treasury]);\n\n const receiveBalances = [];\n\n const balances =\n treasury && !treasury.loading\n ? Object.entries(treasury.balances)\n .map(([tokenAccountId, balance]) => {\n let youReceive = treasury.skywardCirculatingSupply.gt(0)\n ? skywardBurnAmount\n .mul(balance)\n .div(treasury.skywardCirculatingSupply)\n .round(0, 0)\n : Big(0);\n const youReceiveUsd =\n computeUsdBalance(refFinance, tokenAccountId, youReceive) ||\n Big(0);\n if (\n (selectedTokens && tokenAccountId in selectedTokens) ||\n youReceiveUsd.gt(MinUsdValue)\n ) {\n receiveBalances.push([tokenAccountId, youReceive]);\n } else {\n youReceive = Big(0);\n }\n const balances = (skywardBurnAmount.gt(0)\n ? [\n [\"YOU WILL RECEIVE \", youReceive],\n [\"TREASURY \", balance],\n ]\n : [\n [\n \"PER SKYWARD \",\n treasury.skywardCirculatingSupply.gt(0)\n ? balance\n .mul(OneSkyward)\n .div(treasury.skywardCirculatingSupply)\n : Big(0),\n ],\n [\"TOTAL \", balance],\n ]\n ).filter(([label, balance]) => balance && balance.gt(0));\n const usdValue =\n computeUsdBalance(refFinance, tokenAccountId, balance) || Big(0);\n return {\n tokenAccountId,\n balances,\n balance,\n usdValue,\n };\n })\n .filter(({ balance }) => balance && balance.gt(0))\n : [];\n\n balances.sort((a, b) => b.usdValue.toNumber() - a.usdValue.toNumber());\n const potentialTokenValueMultiplier = (new Date().getTime() - 1611083139130) / 31536000000;\n const estimatedTreasuryUsdValue = balances.reduce(\n (p, b) => p.add(b.usdValue),\n Big(0)\n ).mul(potentialTokenValueMultiplier);\n const usdPerSkyward = toTokenBalance(\n skywardToken,\n estimatedTreasuryUsdValue.div(treasury.skywardCirculatingSupply || Big(1))\n );\n\n const renderBalances = (balances) =>\n balances.map(({ tokenAccountId, balances }) => {\n const key = `${gkey}-treasuryBalance-${tokenAccountId}`;\n return (\n \n );\n });\n\n const redeemSkyward = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n const actions = [];\n // Registering all token if needed\n const receivingTokens = receiveBalances.map(\n ([tokenAccountId, balance]) => tokenAccountId\n );\n const missingTokens = [\n NearConfig.skywardTokenAccountId,\n ...receivingTokens,\n ].filter((tokenAccountId) => !(tokenAccountId in account.balances));\n if (missingTokens.length > 0) {\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"register_tokens\",\n {\n token_account_ids: missingTokens,\n },\n TGas.mul(200).toFixed(0),\n SkywardRegisterStorageDeposit.mul(missingTokens.length).toFixed(0)\n ),\n ]);\n }\n\n const innerBalance =\n account.balances[NearConfig.skywardTokenAccountId] || Big(0);\n // Depositing SKYWARD token if needed\n if (skywardBurnAmount.gt(innerBalance)) {\n const amountFromToken = skywardBurnAmount.sub(innerBalance);\n actions.push([\n NearConfig.skywardTokenAccountId,\n nearAPI.transactions.functionCall(\n \"ft_transfer_call\",\n {\n receiver_id: NearConfig.contractName,\n amount: amountFromToken.toFixed(0),\n memo: `Deposit to redeem from Treasury`,\n msg: '\"AccountDeposit\"',\n },\n TGas.mul(50).toFixed(0),\n 1\n ),\n ]);\n }\n\n // Redeeming skyward\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"redeem_skyward\",\n {\n skyward_amount: skywardBurnAmount.toFixed(0),\n token_account_ids: receivingTokens,\n },\n TGas.mul(200).toFixed(0),\n 1\n ),\n ]);\n\n // Registering for receiving tokens\n for (let i = 0; i < receivingTokens.length; i++) {\n if (\n !(await isTokenRegistered(\n account,\n receivingTokens[i],\n account.accountId\n ))\n ) {\n actions.push([\n receivingTokens[i],\n nearAPI.transactions.functionCall(\n \"storage_deposit\",\n {\n account_id: account.accountId,\n registration_only: true,\n },\n TGas.mul(5).toFixed(0),\n (await tokenStorageDeposit(account.near, receivingTokens[i])).toFixed(0)\n ),\n ]);\n }\n }\n\n // Withdrawing\n receiveBalances.forEach(([tokenAccountId, balance]) => {\n if (tokenAccountId === NearConfig.wrapNearAccountId) {\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"withdraw_token\",\n {\n token_account_id: tokenAccountId,\n },\n TGas.mul(40).toFixed(0),\n 0\n ),\n ]);\n actions.push([\n tokenAccountId,\n nearAPI.transactions.functionCall(\n \"near_withdraw\",\n {\n amount: balance.mul(0.9999).round(0, 0).toFixed(0),\n },\n TGas.mul(10).toFixed(0),\n 1\n ),\n ]);\n }\n });\n\n await account.near.sendTransactions(actions);\n };\n\n const whitelistedBalances = balances.filter((b) =>\n refFinance.whitelistedTokens.has(b.tokenAccountId)\n );\n const otherBalances = balances.filter(\n (b) => !refFinance.whitelistedTokens.has(b.tokenAccountId)\n );\n const skywardBurned =\n treasury && !treasury.loading\n ? totalVestedAmount.sub(treasury.skywardCirculatingSupply)\n : Big(0);\n const skywardTotalSupply = Big(10).pow(24).sub(skywardBurned);\n\n return (\n \n {treasury.loading ? (\n
{Loading} loading...
\n ) : (\n
\n
Treasury \n
\n \n
\n {estimatedTreasuryUsdValue.gt(0) && (\n
\n * Treasury total value locked:{\" \"}\n \n ~$ \n \n \n
\n )}\n {usdPerSkyward.gt(0) && (\n
\n * Per{\" \"}\n {\" \"}\n token:{\" \"}\n \n ~$ \n \n \n
\n )}\n
\n {account && account.accountId && mode === DefaultMode ? (\n
setMode(RedeemMode)}\n >\n Redeem{\" \"}\n \n \n ) : (\n mode === RedeemMode && (\n
\n
\n
\n
\n
\n
\n Confirm{\" \"}\n {\" \"}\n redeem\n \n \n \n
\n
\n You will pay (it will be burned):\n
\n {\" \"}\n \n \n \n
\n You will receive:\n {receiveBalances.map(\n ([tokenAccountId, balance]) => {\n const key = `${gkey}-receiveKey-${tokenAccountId}`;\n return (\n
\n {\" \"}\n \n \n );\n }\n )}\n \n
\n
\n \n {loading && Loading}\n Redeem{\" \"}\n {\" \"}\n \n \n \n Cancel\n \n
\n
\n
\n
\n
\n Redeeming{\" \"}\n \n \n
setSkywardBurnAmountHuman(v)}\n limit={availableSkywardBalanceHuman}\n />\n \n \n Redeem{\" \"}\n {skywardBurnAmountHuman &&\n bigToString(skywardBurnAmountHuman)}{\" \"}\n \n \n {\n setSkywardBurnAmountHuman(null);\n setMode(DefaultMode);\n }}\n >\n Cancel\n \n
\n \n )\n )}\n
\n
\n {whitelistedBalances.length > 0 && (\n <>\n
Treasury Tokens whitelisted on REF
\n
{renderBalances(whitelistedBalances)}
\n
\n >\n )}\n
Other Treasury Tokens
\n
{renderBalances(otherBalances)}
\n
\n )}\n
\n );\n}\n","import React from \"react\";\nimport Treasury from \"../components/treasury/Treasury\";\n\nexport default function TreasuryPage(props) {\n return (\n \n );\n}\n","import React from \"react\";\nimport AsyncSelect from \"react-select/async\";\nimport TokenBadge from \"./TokenBadge\";\nimport \"./TokenSelect.scss\";\nimport { tokenMatches } from \"../../data/token\";\n\nconst selectStyles = {\n singleValue: (provided, state) => ({\n ...provided,\n position: \"relative\",\n top: 0,\n transform: \"none\",\n webkitTransform: \"none\",\n overflow: \"auto\",\n margin: \"0.25rem\",\n }),\n option: (provided, state) => ({\n ...provided,\n color: \"default\",\n backgroundColor: state.isFocused ? \"#684e8322\" : \"default\",\n }),\n};\n\nexport default function TokenSelect(props) {\n const propsFilter = props.tokenFilter || (() => true);\n const tokenFilter = (option) => propsFilter(option.value);\n\n const tokens = props.tokens;\n\n const tokenOptions = tokens\n .map((tokenAccountId) => ({\n value: tokenAccountId,\n label: ,\n }))\n .filter(tokenFilter);\n\n const loadOptions = async (inputValue) => {\n return [\n {\n value: inputValue,\n label: ,\n },\n ...tokenOptions.filter((option) => {\n if (option.value === inputValue) {\n return false;\n }\n const matches = tokenMatches(option.value, inputValue);\n return matches;\n }),\n ].filter(tokenFilter);\n };\n\n const handleInputChange = (value) => {\n return value;\n };\n\n const onSelectTokenId = (option) => {\n if (props.onSelectTokenId) {\n props.onSelectTokenId(option.value);\n }\n };\n\n const value = props.value\n ? {\n value: props.value,\n label: ,\n }\n : null;\n\n return (\n \n );\n}\n","import React, { useState } from \"react\";\nimport { useAccount } from \"../../data/account\";\nimport TokenSelect from \"../token/TokenSelect\";\nimport { AccountBalance, BalanceType } from \"../account/AccountBalance\";\nimport AvailableInput from \"../common/AvailableInput\";\nimport {tokenStorageDeposit, useToken} from \"../../data/token\";\nimport Big from \"big.js\";\nimport {\n fromTokenBalance,\n isoDate,\n Loading,\n skywardUrl,\n toTokenBalance,\n} from \"../../data/utils\";\nimport SalePreview from \"../sale/SalePreview\";\nimport { addSaleMethods, useSales } from \"../../data/sales\";\nimport DatePicker from \"react-datepicker\";\nimport \"./CreateSale.scss\";\n\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport {\n CreateSaleDeposit,\n NearConfig,\n SkywardRegisterStorageDeposit,\n TGas,\n} from \"../../data/near\";\nimport * as nearAPI from \"near-api-js\";\nimport { useTreasury } from \"../../data/treasury\";\nimport { useRefFinance } from \"../../data/refFinance\";\n\nconst OneDay = 24 * 60 * 60 * 1000;\nconst OneWeek = 7 * OneDay;\n\nexport default function CreatSale(props) {\n const account = useAccount();\n const sales = useSales();\n const refFinance = useRefFinance();\n const treasury = useTreasury();\n\n const [loading, setLoading] = useState(false);\n const [inTokenAccountId, setInTokenAccountId] = useState(null);\n const [outputTokenId, setOutputTokenId] = useState(null);\n\n const [outAmountHuman, setOutAmountHuman] = useState(null);\n const [fetchedBalances, setFetchedBalances] = useState(null);\n\n const [saleTitle, setSaleTitle] = useState(\"\");\n const [referralBpt, setReferralBpt] = useState(100);\n\n const outToken = useToken(outputTokenId);\n\n const allTokens = Object.assign(\n {},\n account && !account.loading ? account.balances : {},\n refFinance ? refFinance.balances : {},\n treasury ? treasury.balances : {}\n );\n\n let availableOutBalance = Big(0);\n if (fetchedBalances) {\n Object.values(fetchedBalances).forEach((balance) => {\n if (balance) {\n availableOutBalance = availableOutBalance.add(balance);\n }\n });\n }\n const availableOutBalanceHuman = fromTokenBalance(\n outToken,\n availableOutBalance\n );\n\n let outAmount = toTokenBalance(outToken, outAmountHuman || Big(0));\n if (outAmount.gt(availableOutBalance)) {\n outAmount = availableOutBalance;\n }\n\n const [dateRange, setDateRange] = useState([null, null]);\n const [startDate, endDate] = dateRange;\n\n const minDate = new Date(\n Math.trunc(new Date().getTime() / OneDay + 8) * OneDay\n );\n\n const timezoneOffset = new Date().getTimezoneOffset() * 60 * 1000;\n\n const toLocalTimezone = (d) =>\n d ? new Date(d.getTime() + timezoneOffset) : null;\n const toUTCTimezone = (d) =>\n d ? new Date(d.getTime() - timezoneOffset) : null;\n\n const startTime = startDate ? startDate.getTime() : minDate.getTime();\n const duration =\n endDate && startDate\n ? endDate.getTime() - startDate.getTime() + OneDay\n : OneWeek;\n const numDays = Math.trunc(duration / OneDay);\n const endTime = startTime + duration;\n\n const sale = addSaleMethods({\n saleId: -1,\n title: saleTitle,\n inTokenAccountId,\n outTokens: [\n {\n tokenAccountId: outputTokenId,\n remaining: outAmount,\n distributed: Big(0),\n referralBpt,\n },\n ],\n inTokenRemaining: Big(0),\n inTokenPaidUnclaimed: Big(0),\n inTokenPaid: Big(0),\n totalShares: Big(0),\n startTime,\n startDate: new Date(startTime),\n duration,\n endTime,\n endDate: new Date(endTime),\n remainingDuration: endTime - new Date().getTime(),\n currentDate: new Date(),\n });\n sale.scheduleRefresh = () => {};\n\n const createSale = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n let amount = outAmount;\n const balanceInternal = fetchedBalances[BalanceType.Internal] || Big(0);\n const amountFromToken = balanceInternal.gte(amount)\n ? Big(0)\n : amount.sub(balanceInternal);\n\n const actions = [];\n if (!(outputTokenId in account.balances)) {\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"register_token\",\n {\n token_account_id: outputTokenId,\n },\n TGas.mul(10).toFixed(0),\n SkywardRegisterStorageDeposit.toFixed(0)\n ),\n ]);\n }\n\n if (outputTokenId === NearConfig.wrapNearAccountId) {\n if (!(await outToken.contract.isRegistered(account, account.accountId))) {\n actions.push([\n outputTokenId,\n nearAPI.transactions.functionCall(\n \"storage_deposit\",\n {\n account_id: account.accountId,\n registration_only: true,\n },\n TGas.mul(5).toFixed(0),\n (await tokenStorageDeposit(account.near, outputTokenId)).toFixed(0)\n ),\n ]);\n }\n // wrap NEAR\n const balanceToken = fetchedBalances[BalanceType.Wallet] || Big(0);\n if (amountFromToken.gt(balanceToken)) {\n const amountFromAccount = amountFromToken.sub(balanceToken);\n actions.push([\n sale.inTokenAccountId,\n nearAPI.transactions.functionCall(\n \"near_deposit\",\n {},\n TGas.mul(5).toFixed(0),\n amountFromAccount.toFixed(0)\n ),\n ]);\n }\n }\n\n if (\n !(await outToken.contract.isRegistered(account, NearConfig.contractName))\n ) {\n actions.push([\n outputTokenId,\n nearAPI.transactions.functionCall(\n \"storage_deposit\",\n {\n account_id: NearConfig.contractName,\n registration_only: true,\n },\n TGas.mul(5).toFixed(0),\n (await tokenStorageDeposit(account.near, outputTokenId)).toFixed(0)\n ),\n ]);\n }\n\n if (amountFromToken.gt(0)) {\n actions.push([\n outputTokenId,\n nearAPI.transactions.functionCall(\n \"ft_transfer_call\",\n {\n receiver_id: NearConfig.contractName,\n amount: amountFromToken.toFixed(0),\n memo: `Deposit to create a Skyward Finance sale`,\n msg: '\"AccountDeposit\"',\n },\n TGas.mul(50).toFixed(0),\n 1\n ),\n ]);\n }\n\n actions.push([\n NearConfig.contractName,\n nearAPI.transactions.functionCall(\n \"sale_create\",\n {\n sale: {\n title: saleTitle,\n out_tokens: [\n {\n token_account_id: outputTokenId,\n balance: outAmount.toFixed(0),\n referral_bpt: referralBpt,\n },\n ],\n in_token_account_id: inTokenAccountId,\n start_time: Big(startTime).mul(1000000).toFixed(0),\n duration: Big(duration).mul(1000000).toFixed(0),\n },\n },\n TGas.mul(200).toFixed(0),\n CreateSaleDeposit.toFixed(0)\n ),\n ]);\n\n const expectedSaleId = sales.sales.length;\n\n await account.near.sendTransactions(\n actions,\n skywardUrl() + `/sale/${expectedSaleId}`\n );\n };\n\n const accountTokens = account ? Object.keys(account.balances) : [];\n\n return (\n <>\n \n
\n
Create a new Listing \n
\n Listing title \n setSaleTitle(e.target.value)}\n placeholder=\"$NEW token sale\"\n />\n
\n
\n \n Input token{\" \"}\n (a token you want to receive) \n \n tokenAccountId !== outputTokenId}\n onSelectTokenId={setInTokenAccountId}\n />\n
\n {inTokenAccountId && (\n
\n \n Output token{\" \"}\n (a token you want to offer) \n \n \n tokenAccountId !== inTokenAccountId\n }\n onSelectTokenId={setOutputTokenId}\n />\n
\n )}\n {outputTokenId && (\n
\n
Output token amount \n
\n
setOutAmountHuman(v)}\n limit={availableOutBalanceHuman}\n />\n \n )}\n {outAmount.gt(0) && (\n <>\n
\n \n Referral fee {referralBpt / 100}% {\" \"}\n \n (the referral fee will come from the output amount)\n \n \n setReferralBpt(parseInt(e.target.value))}\n />\n
\n
\n \n Sale starts on {isoDate(startTime)} {\" \"}\n at 00:00 UTC and ends on{\" \"}\n {isoDate(endTime)} {\" \"}\n at 00:00 UTC for the\n duration of{\" \"}\n \n {numDays} day\n {numDays > 1 ? \"s \" : \" \"}\n \n \n \n setDateRange([\n toUTCTimezone(startDate),\n toUTCTimezone(endDate),\n ])\n }\n inline\n />\n
\n >\n )}\n {startDate && endDate && (\n
\n \n Preview Listing\n \n
\n )}\n
\n
\n \n
\n
\n
\n
\n Create a listing for 10 NEAR\n \n \n \n
\n \n
\n
\n \n {loading && Loading}\n Create a listing\n \n \n Cancel\n \n
\n
\n
\n
\n Listing preview \n \n \n
\n >\n );\n}\n","import React from \"react\";\nimport CreatSale from \"../components/createSale/CreateSale\";\n\nexport default function CreateSalePage(props) {\n return (\n \n );\n}\n","import { useAccount } from \"../../data/account\";\nimport {\n getRefInverseReturn,\n getRefReturn,\n useRefFinance,\n} from \"../../data/refFinance\";\nimport React, { useEffect, useState } from \"react\";\nimport TokenSelect from \"../token/TokenSelect\";\nimport AvailableInput from \"../common/AvailableInput\";\nimport Big from \"big.js\";\nimport { useTokenBalances } from \"../../data/tokenBalances\";\nimport {\n bigMin,\n bigToString,\n computeUsdBalance,\n fromTokenBalance,\n Loading,\n toTokenBalance,\n} from \"../../data/utils\";\nimport { tokenRegisterStorageAction, useToken } from \"../../data/token\";\nimport \"./Swap.scss\";\nimport { NearConfig, TGas } from \"../../data/near\";\nimport Rate from \"../common/Rate\";\nimport TokenBalance from \"../token/TokenBalance\";\nimport { useHistory } from \"react-router-dom\";\nimport MutedDecimals from \"../common/MutedDecimals\";\nimport uuid from \"react-uuid\";\nimport TokenSymbol from \"../token/TokenSymbol\";\nimport * as nearAPI from \"near-api-js\";\nimport { BalanceType } from \"../account/AccountBalance\";\n\nconst EditMode = {\n None: \"None\",\n Input: \"Input\",\n Output: \"Output\",\n};\n\nconst Slippage = [0, 0.001, 0.005, 0.02];\n\nconst findBestReturn = (\n refFinance,\n inTokenAccountId,\n outTokenAccountId,\n amountIn\n) => {\n let swapInfo = {\n amountIn,\n amountOut: Big(0),\n };\n if (refFinance && !refFinance.loading) {\n // Computing path\n Object.values(refFinance.poolsByToken[inTokenAccountId] || {}).forEach(\n (pool) => {\n // 1 token\n if (outTokenAccountId in pool.tokens) {\n const poolReturn =\n getRefReturn(pool, inTokenAccountId, amountIn, outTokenAccountId) || Big(0);\n\n if (poolReturn.gt(swapInfo.amountOut)) {\n swapInfo = {\n amountIn,\n amountOut: poolReturn,\n pools: [pool],\n swapPath: [inTokenAccountId, outTokenAccountId]\n };\n }\n } else {\n // 2 tokens\n pool.ots[inTokenAccountId].forEach((middleTokenAccountId) => {\n const pair = `${middleTokenAccountId}:${outTokenAccountId}`;\n let poolReturn = false;\n Object.values(refFinance.poolsByPair[pair] || {}).forEach((pool2) => {\n poolReturn =\n poolReturn === false\n ? getRefReturn(pool, inTokenAccountId, amountIn, middleTokenAccountId)\n : poolReturn;\n if (!poolReturn) {\n return;\n }\n const pool2Return =\n getRefReturn(pool2, middleTokenAccountId, poolReturn, outTokenAccountId) || Big(0);\n if (pool2Return.gt(swapInfo.amountOut)) {\n swapInfo = {\n amountIn,\n amountOut: pool2Return,\n pools: [pool, pool2],\n swapPath: [inTokenAccountId, middleTokenAccountId, outTokenAccountId]\n };\n }\n });\n });\n }\n }\n );\n }\n return Object.assign(swapInfo, {\n inTokenAccountId,\n outTokenAccountId,\n expectedAmountOut: Big(0),\n });\n};\n\nconst findBestInverseReturn = (\n refFinance,\n inTokenAccountId,\n outTokenAccountId,\n availableInToken,\n outAmount\n) => {\n let swapInfo = {\n amountIn: availableInToken,\n amountOut: Big(0),\n };\n if (refFinance && !refFinance.loading) {\n // Computing path\n Object.values(refFinance.poolsByToken[outTokenAccountId] || {}).forEach(\n (pool) => {\n // 1 token\n if (inTokenAccountId in pool.tokens) {\n const amountIn = getRefInverseReturn(\n pool,\n outTokenAccountId,\n outAmount,\n inTokenAccountId\n );\n if (!amountIn) {\n return;\n }\n\n if (amountIn.lt(swapInfo.amountIn)) {\n swapInfo = {\n amountIn,\n amountOut: outAmount,\n pools: [pool],\n swapPath: [inTokenAccountId, outTokenAccountId]\n };\n }\n } else {\n // 2 tokens\n pool.ots[outTokenAccountId].forEach((middleTokenAccountId) => {\n const pair = `${middleTokenAccountId}:${inTokenAccountId}`;\n let middleAmountIn = false;\n Object.values(refFinance.poolsByPair[pair] || {}).forEach((pool2) => {\n middleAmountIn =\n middleAmountIn === false\n ? getRefInverseReturn(pool, outTokenAccountId, outAmount, middleTokenAccountId)\n : middleAmountIn;\n if (!middleAmountIn) {\n return;\n }\n const amountIn = getRefInverseReturn(\n pool2,\n middleTokenAccountId,\n middleAmountIn,\n inTokenAccountId\n );\n if (!amountIn) {\n return;\n }\n if (amountIn.lt(swapInfo.amountIn)) {\n swapInfo = {\n amountIn,\n amountOut: outAmount,\n pools: [pool2, pool],\n swapPath: [inTokenAccountId, middleTokenAccountId, outTokenAccountId]\n };\n }\n });\n });\n }\n }\n );\n }\n return Object.assign(swapInfo, {\n inTokenAccountId,\n outTokenAccountId,\n expectedAmountOut: outAmount,\n });\n};\n\nconst updateUrl = (history, inTokenAccountId, outTokenAccountId) => {\n history.replace(`/swap/${inTokenAccountId}/${outTokenAccountId}`);\n};\n\nexport default function Swap(props) {\n const [gkey] = useState(uuid());\n\n const account = useAccount();\n const refFinance = useRefFinance();\n const history = useHistory();\n\n const [loading, setLoading] = useState(false);\n const [maxSlippage, setMaxSlippage] = useState(0.005);\n const [editMode, setEditMode] = useState(EditMode.None);\n\n const [inTokenAccountId, setInTokenAccountId] = useState(\n props.inputTokenId || NearConfig.wrapNearAccountId\n );\n const [inTokenAmountHuman, setInTokenAmountHuman] = useState(null);\n const inToken = useToken(inTokenAccountId);\n const { tokenBalances } = useTokenBalances(inTokenAccountId);\n\n const [availableInToken, setAvailableInToken] = useState(null);\n useEffect(() => {\n if (tokenBalances) {\n setAvailableInToken(\n (tokenBalances[BalanceType.Wallet] || Big(0)).add(\n tokenBalances[BalanceType.NEAR] || Big(0)\n )\n );\n }\n }, [tokenBalances]);\n\n const availableInTokenHuman = fromTokenBalance(inToken, availableInToken);\n\n const [outTokenAccountId, setOutTokenAccountId] = useState(\n props.outputTokenId || NearConfig.skywardTokenAccountId\n );\n const outToken = useToken(outTokenAccountId);\n const [outTokenAmountHuman, setOutTokenAmountHuman] = useState(null);\n\n const [availableOutToken, setAvailableOutToken] = useState(Big(0));\n const [needRecompute, setNeedRecompute] = useState(true);\n\n useEffect(() => {\n if (refFinance && !refFinance.loading) {\n refFinance.scheduleRefresh(true);\n setNeedRecompute(true);\n }\n }, [refFinance]);\n\n useEffect(() => {\n const swapInfo = findBestReturn(\n refFinance,\n inTokenAccountId,\n outTokenAccountId,\n availableInToken\n );\n setAvailableOutToken(swapInfo.amountOut);\n }, [availableInToken, refFinance, inTokenAccountId, outTokenAccountId]);\n\n const availableOutTokenHuman = fromTokenBalance(outToken, availableOutToken);\n\n const [inTokenAmount, setInTokenAmount] = useState(null);\n const [outTokenAmount, setOutTokenAmount] = useState(null);\n const [swapInfo, setSwapInfo] = useState(null);\n\n useEffect(() => {\n if (editMode === EditMode.Input) {\n setInTokenAmount(\n bigMin(\n availableInToken,\n toTokenBalance(inToken, inTokenAmountHuman || Big(0))\n )\n );\n }\n }, [editMode, availableInToken, inToken, inTokenAmountHuman]);\n\n useEffect(() => {\n if (editMode === EditMode.Output) {\n setOutTokenAmount(\n bigMin(\n availableOutToken,\n toTokenBalance(outToken, outTokenAmountHuman || Big(0))\n )\n );\n }\n }, [editMode, availableOutToken, outToken, outTokenAmountHuman]);\n\n useEffect(() => {\n const willRecompute =\n needRecompute ||\n swapInfo === null ||\n (editMode === EditMode.Input &&\n !swapInfo.amountIn.eq(inTokenAmount || Big(0))) ||\n (editMode === EditMode.Output &&\n !swapInfo.expectedAmountOut.eq(outTokenAmount || Big(0))) ||\n swapInfo.inTokenAccountId !== inTokenAccountId ||\n swapInfo.outTokenAccountId !== outTokenAccountId;\n setNeedRecompute(false);\n if (editMode === EditMode.Input && inTokenAmount && willRecompute) {\n const swapInfo = findBestReturn(\n refFinance,\n inTokenAccountId,\n outTokenAccountId,\n inTokenAmount\n );\n setOutTokenAmount(swapInfo.amountOut);\n setSwapInfo(swapInfo);\n\n setOutTokenAmountHuman(\n fromTokenBalance(outToken, swapInfo.amountOut).round(6, 0)\n );\n } else if (\n editMode === EditMode.Output &&\n outTokenAmount &&\n willRecompute\n ) {\n const swapInfo = findBestInverseReturn(\n refFinance,\n inTokenAccountId,\n outTokenAccountId,\n availableInToken,\n outTokenAmount\n );\n setSwapInfo(swapInfo);\n setInTokenAmount(swapInfo.amountIn);\n\n setInTokenAmountHuman(\n fromTokenBalance(inToken, swapInfo.amountIn).round(6, 0)\n );\n }\n }, [\n editMode,\n needRecompute,\n swapInfo,\n refFinance,\n inTokenAccountId,\n inToken,\n inTokenAmount,\n inTokenAmountHuman,\n availableInToken,\n outTokenAccountId,\n outToken,\n outTokenAmount,\n outTokenAmountHuman,\n ]);\n\n const [tokens, setTokens] = useState([]);\n\n useEffect(() => {\n setTokens(\n [\n ...new Set([\n ...Object.keys(\n Object.assign(\n {},\n account && !account.loading ? account.balances : {},\n refFinance ? refFinance.balances : {}\n )\n ),\n ...(refFinance ? refFinance.whitelistedTokens : []),\n ]),\n ].filter(\n (tokenId) =>\n tokenId === NearConfig.wrapNearAccountId ||\n (refFinance && tokenId in refFinance.prices)\n )\n );\n }, [refFinance, account]);\n\n const reverseDirection = (e) => {\n e.preventDefault();\n if (loading) {\n return;\n }\n setInTokenAccountId(outTokenAccountId);\n setInTokenAmountHuman(outTokenAmountHuman);\n setInTokenAmount(outTokenAmount);\n setOutTokenAccountId(inTokenAccountId);\n setOutTokenAmountHuman(inTokenAmountHuman);\n setOutTokenAmount(inTokenAmount);\n if (editMode === EditMode.Input) {\n setEditMode(EditMode.Output);\n } else if (editMode === EditMode.Output) {\n setEditMode(EditMode.Input);\n }\n setNeedRecompute(true);\n updateUrl(history, outTokenAccountId, inTokenAccountId);\n };\n\n let priceImpact = Big(0);\n let priceImpactDiff = Big(0);\n if (refFinance && swapInfo && swapInfo.pools) {\n const inputUsdValue = computeUsdBalance(\n refFinance,\n swapInfo.inTokenAccountId,\n swapInfo.amountIn\n );\n const outputUsdValue = computeUsdBalance(\n refFinance,\n swapInfo.outTokenAccountId,\n swapInfo.amountOut\n );\n\n priceImpact =\n inputUsdValue && inputUsdValue.gt(0)\n ? outputUsdValue.div(inputUsdValue).sub(1)\n : Big(0);\n\n priceImpactDiff = outputUsdValue.sub(inputUsdValue);\n }\n\n const swap = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n const actions = [];\n await tokenRegisterStorageAction(\n account,\n swapInfo.outTokenAccountId,\n actions\n );\n\n if (swapInfo.inTokenAccountId === NearConfig.wrapNearAccountId) {\n await tokenRegisterStorageAction(\n account,\n swapInfo.inTokenAccountId,\n actions\n );\n\n const wNearBalance = tokenBalances[BalanceType.Wallet] || Big(0);\n\n if (wNearBalance.lt(swapInfo.amountIn)) {\n actions.push([\n NearConfig.wrapNearAccountId,\n nearAPI.transactions.functionCall(\n \"near_deposit\",\n {},\n TGas.mul(5).toFixed(0),\n swapInfo.amountIn.sub(wNearBalance).toFixed(0)\n ),\n ]);\n }\n }\n\n let tokenId = swapInfo.inTokenAccountId;\n\n actions.push([\n swapInfo.inTokenAccountId,\n nearAPI.transactions.functionCall(\n \"ft_transfer_call\",\n {\n receiver_id: NearConfig.refContractName,\n amount: swapInfo.amountIn.toFixed(0),\n msg: JSON.stringify({\n referral_id: NearConfig.referralId,\n actions: swapInfo.pools.map((pool, idx) => {\n const tokenIn = tokenId;\n tokenId = swapInfo.swapPath[idx + 1];\n return {\n pool_id: pool.index,\n token_in: tokenIn,\n token_out: tokenId,\n min_amount_out:\n tokenId === swapInfo.outTokenAccountId\n ? swapInfo.amountOut\n .mul(1.0 - maxSlippage)\n .round(0, 0)\n .toFixed(0)\n : \"0\",\n };\n }),\n }),\n },\n TGas.mul(250).toFixed(0),\n 1\n ),\n ]);\n\n await account.near.sendTransactions(actions);\n };\n\n return (\n <>\n \n
\n Warning! The swap feature is still in development. It may contain bugs\n and may result in partial loss of funds.\n \n
\n This UI allows to swap any two tokens and also finds the best available\n execution path to maximize return.\n
\n The trades are executed on REF Finance contract using Instant swap\n feature.\n
\n Please report any issues to{\" \"}\n
\n Skyward Flight\n {\" \"}\n telegram.\n
\n \n
\n
[BETA] Swap \n
\n
\n tokenAccountId !== outTokenAccountId\n }\n onSelectTokenId={(v) => {\n setNeedRecompute(true);\n updateUrl(history, v, outTokenAccountId);\n setInTokenAccountId(v);\n }}\n />\n\n {\n setEditMode(EditMode.Input);\n setInTokenAmountHuman(v);\n }}\n limit={availableInTokenHuman}\n extraLabel={\n \n {\" (\"}\n \n )\n \n }\n extraLabelRight={\n inTokenAmount &&\n inTokenAmountHuman && (\n \n )\n }\n />\n \n
\n \n
\n
\n
\n tokenAccountId !== inTokenAccountId\n }\n onSelectTokenId={(v) => {\n setNeedRecompute(true);\n updateUrl(history, inTokenAccountId, v);\n setOutTokenAccountId(v);\n }}\n />\n\n {\n setNeedRecompute(true);\n setEditMode(EditMode.Output);\n setOutTokenAmountHuman(v);\n }}\n limit={availableOutTokenHuman}\n extraLabel={\n \n {\" (\"}\n \n )\n \n }\n extraLabelRight={\n outTokenAmount &&\n outTokenAmountHuman && (\n \n )\n }\n />\n \n
\n
Max slippage \n
\n
\n {Slippage.map((slippage) => {\n let key = `${gkey}-slippage-${slippage}`;\n return (\n \n setMaxSlippage(slippage)}\n />\n {`${slippage * 100}%`} \n \n );\n })}\n
\n
\n
\n {swapInfo && swapInfo.pools && (\n
\n
Swap details \n
\n
\n
\n
Price Impact
\n
\n \n \n {\"$ \"}\n \n \n ({bigToString(priceImpact.mul(100), 2)}%)\n \n
\n
\n
\n
Path
\n
\n {swapInfo.swapPath.map((tokenAccountId, i) => (\n \n {i ? <> → > : \"\"}\n \n \n ))}\n
\n
\n
\n \n {loading && Loading}\n Swap{priceImpact.lt(-0.02) ? \" (high price impact)\" : \"\"}\n \n
\n
\n )}\n
\n
\n >\n );\n}\n","import React from \"react\";\nimport Swap from \"../components/swap/Swap\";\nimport { useParams } from \"react-router-dom\";\n\nexport default function SwapPage(props) {\n const { inputTokenId, outputTokenId } = useParams();\n\n return (\n \n );\n}\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport \"error-polyfill\";\nimport \"bootstrap-icons/font/bootstrap-icons.css\";\nimport \"bootstrap/dist/js/bootstrap.bundle\";\nimport \"./App.scss\";\nimport Logo from \"./images/logo_horizontal_brand.png\";\nimport SalesPage from \"./pages/SalesPage\";\nimport { BrowserRouter as Router, Link, Route, Switch } from \"react-router-dom\";\nimport AccountPage from \"./pages/AccountPage\";\nimport { IsMainnet, NearConfig, TGas, useNear } from \"./data/near\";\nimport SalePage from \"./pages/SalePage\";\nimport TreasuryPage from \"./pages/TreasuryPage\";\nimport CreateSalePage from \"./pages/CreateSalePage\";\nimport { useAccount } from \"./data/account\";\nimport { isTokenRegistered } from \"./data/token\";\nimport SwapPage from \"./pages/SwapPage\";\n\nconst swapEnabled = true;\nexport const refreshAllowanceObj = {};\n\nexport function App(props) {\n const [connected, setConnected] = useState(false);\n const [signedIn, setSignedIn] = useState(false);\n const [signedAccountId, setSignedAccountId] = useState(null);\n\n const _near = useNear();\n\n const requestSignIn = useCallback(\n async (e) => {\n e && e.preventDefault();\n const appTitle = \"Skyward Finance\";\n const near = await _near;\n\n await near.walletConnection.requestSignIn(\n NearConfig.contractName,\n appTitle\n );\n return false;\n },\n [_near]\n );\n\n const logOut = useCallback(async () => {\n const near = await _near;\n near.walletConnection.signOut();\n near.accountId = null;\n setSignedIn(false);\n setSignedAccountId(null);\n }, [_near]);\n\n const refreshAllowance = useCallback(async () => {\n alert(\n \"You're out of access key allowance. Please sign in again to refresh the allowance\"\n );\n await logOut();\n await requestSignIn();\n }, [logOut, requestSignIn]);\n refreshAllowanceObj.refreshAllowance = refreshAllowance;\n\n useEffect(() => {\n _near.then((near) => {\n setSignedIn(!!near.accountId);\n setSignedAccountId(near.accountId);\n setConnected(true);\n });\n }, [_near]);\n\n const passProps = {\n refreshAllowance: () => refreshAllowance(),\n signedAccountId,\n signedIn,\n connected,\n };\n\n const account = useAccount();\n\n useEffect(() => {\n if (account && !account.loading && account.accountId) {\n const withdrawInternalBalances = async () => {\n let result = false;\n const balances = Object.entries(account.balances);\n for (let i = 0; i < balances.length; ++i) {\n const [tokenAccountId, balance] = balances[i];\n if (\n balance.gt(0) &&\n tokenAccountId !== NearConfig.wrapNearAccountId &&\n (await isTokenRegistered(\n account,\n tokenAccountId,\n account.accountId\n ))\n ) {\n await account.near.contract.withdraw_token(\n {\n token_account_id: tokenAccountId,\n },\n TGas.mul(40).toFixed(0),\n 0\n );\n result = true;\n }\n }\n return result;\n };\n withdrawInternalBalances().then((res) => {\n if (res) {\n account.refresh();\n }\n });\n }\n }, [account]);\n\n const header = !connected ? (\n \n Connecting...{\" \"}\n \n
\n ) : signedIn ? (\n \n logOut()}>\n Sign out (\n {signedAccountId.length > 16\n ? signedAccountId.substr(0, 6) +\n \"...\" +\n signedAccountId.substr(signedAccountId.length - 6)\n : signedAccountId}\n )\n \n
\n ) : (\n \n requestSignIn(e)}\n >\n Sign in with NEAR Wallet\n \n
\n );\n\n return (\n \n
\n \n \n
\n \n \n
\n \n \n
\n
\n \n \n Listings\n \n \n {signedIn && (\n \n \n Account\n \n \n )}\n \n \n Treasury\n \n \n {signedIn && (\n \n \n Create a Listing\n \n \n )}\n {swapEnabled && signedIn && (\n \n \n [BETA] Swap\n \n \n )}\n \n
\n
\n
\n \n {!IsMainnet && (\n \n This is a testnet version of the Skyward Finance app. There is no\n ERC-20 token.\n
\n )}\n\n \n \n \n \n {signedIn && (\n \n \n \n )}\n \n \n \n \n \n \n {signedIn && (\n \n \n \n )}\n {signedIn && (\n \n \n \n )}\n \n \n
\n );\n}\n"],"sourceRoot":""}