├── .babelrc ├── .changeset └── config.json ├── .dockerignore ├── .github ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml └── workflows │ ├── cd.yaml │ ├── ci.yaml │ └── pull_request_template.md ├── .gitignore ├── .husky ├── commit-msg └── pre-push ├── .nvmrc ├── .validate-branch-namerc.js ├── .vscode └── settings.json ├── .yarn └── install-state.gz ├── .yarnrc.yml ├── Dockerfile ├── Dockerfile.local ├── LICENSE ├── README.md ├── apps ├── evm │ ├── .env.template │ ├── .gitignore │ ├── .graphclientrc.yml │ ├── .storybook │ │ ├── main.ts │ │ └── preview.tsx │ ├── .stylelintrc.js │ ├── CHANGELOG.md │ ├── README.md │ ├── __mocks__ │ │ ├── @venusprotocol │ │ │ └── chains.ts │ │ └── zustand.ts │ ├── codegen.config.ts │ ├── i18next-parser.config.js │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── _redirects │ │ ├── logo.svg │ │ └── manifest.json │ ├── src │ │ ├── App │ │ │ ├── ChainUpgradeHandler │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── MuiThemeProvider │ │ │ │ ├── index.tsx │ │ │ │ └── muiTheme.ts │ │ │ ├── Routes │ │ │ │ ├── PageSuspense │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── ThemeHandler │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── __mocks__ │ │ │ ├── CSSStub.js │ │ │ ├── api │ │ │ │ ├── pools.json │ │ │ │ ├── voteSummary.json │ │ │ │ ├── voterAccounts.json │ │ │ │ ├── voterDetails.json │ │ │ │ ├── voterHistory.json │ │ │ │ └── voters.json │ │ │ ├── contracts │ │ │ │ ├── legacyPoolComptroller.ts │ │ │ │ ├── poolLens.ts │ │ │ │ ├── prime.ts │ │ │ │ ├── venusLens.ts │ │ │ │ ├── xvsVault.ts │ │ │ │ └── xvsVesting.ts │ │ │ ├── models │ │ │ │ ├── address.ts │ │ │ │ ├── asset.ts │ │ │ │ ├── assetsInAccount.ts │ │ │ │ ├── chains.ts │ │ │ │ ├── contractTransaction.ts │ │ │ │ ├── marketSnapshots.ts │ │ │ │ ├── pancakeSwapPairs.ts │ │ │ │ ├── pools.ts │ │ │ │ ├── primeEstimation.ts │ │ │ │ ├── proposals.ts │ │ │ │ ├── remoteProposals.ts │ │ │ │ ├── swaps.ts │ │ │ │ ├── tokenBalances.ts │ │ │ │ ├── tokenCombinations.ts │ │ │ │ ├── tokens.ts │ │ │ │ ├── transactionData.ts │ │ │ │ ├── transactionReceipt.ts │ │ │ │ ├── vTokenApySimulations.ts │ │ │ │ ├── vTokenBalanceTreasury.ts │ │ │ │ ├── vTokenBalancesAccount.ts │ │ │ │ ├── vTokens.ts │ │ │ │ ├── vaults.ts │ │ │ │ ├── voterAccounts.ts │ │ │ │ ├── voterDetails.ts │ │ │ │ ├── voterHistory.ts │ │ │ │ └── voters.ts │ │ │ └── subgraph │ │ │ │ ├── bscProposals.json │ │ │ │ └── nonBscProposals.json │ │ ├── assets │ │ │ ├── img │ │ │ │ ├── primeLogo.svg │ │ │ │ ├── venusLogo.svg │ │ │ │ └── venusLogoWithText.svg │ │ │ ├── proposals │ │ │ │ └── vip-123.json │ │ │ └── styles │ │ │ │ └── index.css │ │ ├── clients │ │ │ ├── api │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mutations │ │ │ │ │ ├── useApproveToken │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useBorrow │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useBridgeXvs │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useCancelProposal │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useClaimPrimeToken │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useClaimRewards │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── formatToCalls │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── useCreateProposal │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useEnterMarket │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useExecuteProposal │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useExecuteWithdrawalFromXvsVault │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useExitMarket │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useMintVai │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useQueueProposal │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useRepay │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useRepayVai │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useRequestWithdrawalFromXvsVault │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── useSetVoteDelegate │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useStakeInVaiVault │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useStakeInVault │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useStakeInXvsVault │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useSupply │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useSwapTokens │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useSwapTokensAndRepay │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useSwapTokensAndSupply │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useUpdatePoolDelegateStatus │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ ├── index.spec.ts.snap │ │ │ │ │ │ │ │ └── useUpdatePoolDelegateStatus.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useVote │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── useWithdraw │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── useWithdrawFromVaiVault │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ ├── queries │ │ │ │ │ ├── getAddressDomainName │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetAddressDomainName.ts │ │ │ │ │ ├── getAllowance │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetAllowance.ts │ │ │ │ │ ├── getBalanceOf │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetBalanceOf.ts │ │ │ │ │ ├── getBlockNumber │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetBlockNumber.ts │ │ │ │ │ ├── getCurrentVotes │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetCurrentVotes.ts │ │ │ │ │ ├── getHypotheticalPrimeApys │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetHypotheticalPrimeApys.ts │ │ │ │ │ ├── getIsAddressAuthorized │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetIsAddressAuthorized.ts │ │ │ │ │ ├── getLatestAppVersion │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── useGetLatestAppVersion.ts │ │ │ │ │ ├── getLatestProposalIdByProposer │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetLatestProposalIdByProposer.ts │ │ │ │ │ ├── getMarketHistory │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetMarketHistory.ts │ │ │ │ │ ├── getMintableVai │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetMintableVai.ts │ │ │ │ │ ├── getPancakeSwapPairs │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ ├── generateTokenCombinationIds.spec.ts.snap │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ ├── generateTokenCombinationIds.spec.ts │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── formatToPairs.ts │ │ │ │ │ │ ├── generateTokenCombinationIds.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetPancakeSwapPairs.ts │ │ │ │ │ ├── getPaymasterInfo │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetPaymasterInfo.ts │ │ │ │ │ ├── getPendingRewards │ │ │ │ │ │ ├── __testUtils__ │ │ │ │ │ │ │ └── fakeData.ts │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── formatOutput │ │ │ │ │ │ │ ├── formatRewardSummaryData.ts │ │ │ │ │ │ │ ├── formatToExternalPendingRewardGroup.ts │ │ │ │ │ │ │ ├── formatToIsolatedPoolPendingRewardGroup.ts │ │ │ │ │ │ │ ├── formatToLegacyPoolPendingRewardGroup.ts │ │ │ │ │ │ │ ├── formatToPrimePendingRewardGroup.ts │ │ │ │ │ │ │ ├── formatToVaultPendingRewardGroup.ts │ │ │ │ │ │ │ ├── formatToVestingVaultPendingRewardGroup.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── getApiTokenPrice │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── getMerklUserRewards │ │ │ │ │ │ │ ├── formatMerklRewardsResponse.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetPendingRewards.ts │ │ │ │ │ ├── getPoolDelegateApprovalStatus │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetPoolDelegateApprovalStatus.ts │ │ │ │ │ ├── getPoolLiquidationIncentive │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetPoolLiquidationIncentive.ts │ │ │ │ │ ├── getPrimeDistributionForMarket │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetPrimeDistributionForMarket.ts │ │ │ │ │ ├── getPrimeStatus │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetPrimeStatus.ts │ │ │ │ │ ├── getPrimeToken │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetPrimeToken.ts │ │ │ │ │ ├── getProposal │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── useGetCachedProposal │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── useGetProposal.ts │ │ │ │ │ ├── getProposalEta │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetProposalEta.ts │ │ │ │ │ ├── getProposalMinQuorumVotes │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetProposalMinQuorumVotes.ts │ │ │ │ │ ├── getProposalState │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetProposalState.ts │ │ │ │ │ ├── getProposalThreshold │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetProposalThreshold.ts │ │ │ │ │ ├── getProposals │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetProposals.ts │ │ │ │ │ ├── getTokenBalances │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetTokenBalances.ts │ │ │ │ │ ├── getTokenUsdPrice │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetTokenUsdPrice.ts │ │ │ │ │ ├── getUserVaiBorrowBalance │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetUserVaiBorrowBalance.ts │ │ │ │ │ ├── getVTokenApySimulations │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── formatCurrentUtilizationRate.ts │ │ │ │ │ │ ├── formatToApySnapshots.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetVTokenApySimulations.ts │ │ │ │ │ ├── getVTokenBalance │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVTokenBalance.ts │ │ │ │ │ ├── getVTokenInterestRateModel │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVTokenInterestRateModel.ts │ │ │ │ │ ├── getVTokenUtilizationRate │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVTokenUtilizationRate.ts │ │ │ │ │ ├── getVTokens │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVTokens.ts │ │ │ │ │ ├── getVaiRepayApr │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVaiRepayApr.ts │ │ │ │ │ ├── getVaiTreasuryPercentage │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVaiTreasuryPercentage.ts │ │ │ │ │ ├── getVaiVaultPaused │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVaiVaultPaused.ts │ │ │ │ │ ├── getVaiVaultUserInfo │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVaiVaultUserInfo.ts │ │ │ │ │ ├── getVenusVaiVaultDailyRate │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVenusVaiVaultDailyRate.ts │ │ │ │ │ ├── getVoteDelegateAddress │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVoteDelegateAddress.ts │ │ │ │ │ ├── getVoteReceipt │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetVoteReceipt.ts │ │ │ │ │ ├── getVoteSummary │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ ├── formatToVoteSummary.ts │ │ │ │ │ │ ├── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetVoteSummary.ts │ │ │ │ │ ├── getVoterAccounts │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ ├── formatVoterAccountResponse.ts │ │ │ │ │ │ ├── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetVoterAccounts.ts │ │ │ │ │ ├── getVoterDetails │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ ├── formatVoterDetailsResponse.ts │ │ │ │ │ │ ├── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetVoterDetails.ts │ │ │ │ │ ├── getVoterHistory │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ ├── formatToProposal.ts │ │ │ │ │ │ ├── formatVoterHistoryResponse.ts │ │ │ │ │ │ ├── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetVoterHistory.ts │ │ │ │ │ ├── getVoters │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ ├── formatToVoters.ts │ │ │ │ │ │ ├── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ └── useGetVoters.ts │ │ │ │ │ ├── getXvsBridgeFeeEstimation │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsBridgeFeeEstimation.ts │ │ │ │ │ ├── getXvsBridgeMintStatus │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsBridgeMintStatus.ts │ │ │ │ │ ├── getXvsBridgeStatus │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsBridgeStatus.ts │ │ │ │ │ ├── getXvsVaultLockedDeposits │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsVaultLockedDeposits.ts │ │ │ │ │ ├── getXvsVaultPaused │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsVaultPaused.ts │ │ │ │ │ ├── getXvsVaultPendingWithdrawalsBalance │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── getXvsVaultPoolCount │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsVaultPoolCount.ts │ │ │ │ │ ├── getXvsVaultPoolInfo │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsVaultPoolInfo.ts │ │ │ │ │ ├── getXvsVaultTotalAllocationPoints │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsVaultTotalAllocationPoints.ts │ │ │ │ │ ├── getXvsVaultUserInfo │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsVaultUserInfo.ts │ │ │ │ │ ├── getXvsVaultUserPendingWithdrawalsFromBeforeUpgrade │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsVaultUserPendingWithdrawalsFromBeforeUpgrade.ts │ │ │ │ │ ├── getXvsVaultsTotalDailyDistributedXvs │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── useGetXvsVaultsTotalDailyDistributedXvs.ts │ │ │ │ │ ├── useGetAsset │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── useGetPool │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── useGetPools │ │ │ │ │ │ ├── __testUtils__ │ │ │ │ │ │ │ └── fakeData.ts │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ ├── index.prime.spec.ts.snap │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ ├── index.prime.spec.ts │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── getPools │ │ │ │ │ │ │ ├── appendPrimeSimulationDistributions │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── formatOutput │ │ │ │ │ │ │ │ ├── formatDistributions │ │ │ │ │ │ │ │ │ ├── formatRewardDistribution │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ │ └── isDistributingRewards │ │ │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── getApiPools │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ └── pointDistributions │ │ │ │ │ │ │ │ │ ├── asterPoints.svg │ │ │ │ │ │ │ │ │ ├── ethenaPoints.svg │ │ │ │ │ │ │ │ │ ├── etherfiPoints.svg │ │ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ │ │ ├── kelpMiles.svg │ │ │ │ │ │ │ │ │ └── solvPoints.svg │ │ │ │ │ │ │ ├── getUserCollateralAddresses │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── getUserPrimeApys │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ ├── getUserTokenBalances │ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── useGetPrimeEstimation │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── useGetVaults │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── useGetVaiVault.ts │ │ │ │ │ │ └── useGetVestingVaults │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── useGetXvsVaultPoolBalances.ts │ │ │ │ │ │ └── useGetXvsVaultPools.ts │ │ │ │ └── queryClient.ts │ │ │ └── subgraph │ │ │ │ ├── __mocks__ │ │ │ │ └── index.ts │ │ │ │ ├── gql │ │ │ │ └── generated │ │ │ │ │ ├── governanceBsc.ts │ │ │ │ │ └── governanceNonBsc.ts │ │ │ │ ├── index.ts │ │ │ │ ├── queries │ │ │ │ ├── governanceBsc │ │ │ │ │ ├── fragments │ │ │ │ │ │ └── bscProposal.graphql │ │ │ │ │ ├── getBscProposal │ │ │ │ │ │ ├── getBscProposal.graphql │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── getBscProposals │ │ │ │ │ │ ├── getBscProposals.graphql │ │ │ │ │ │ └── index.ts │ │ │ │ └── governanceNonBsc │ │ │ │ │ ├── fragments │ │ │ │ │ └── nonBscProposal.graphql │ │ │ │ │ └── getNonBscProposals │ │ │ │ │ ├── getNonBscProposals.graphql │ │ │ │ │ └── index.ts │ │ │ │ └── utilities │ │ │ │ ├── enrichRemoteProposals │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ └── index.spec.ts │ │ │ │ └── index.ts │ │ │ │ └── formatToProposal │ │ │ │ ├── __tests__ │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ └── index.spec.ts │ │ │ │ ├── formatToProposalActions │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ └── index.spec.ts │ │ │ │ └── index.ts │ │ │ │ ├── formatToRemoteProposal │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ └── index.spec.ts │ │ │ │ ├── getRemoteProposalState │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ ├── components │ │ │ ├── Accordion │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── AccordionAnimatedContent │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── AccountHealthBar │ │ │ │ └── index.tsx │ │ │ ├── ActiveVotingProgress │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.tsx │ │ │ ├── ApprovalSteps │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── ApproveTokenSteps │ │ │ │ ├── index.spec.tsx │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Apy │ │ │ │ ├── BoostTooltip │ │ │ │ │ ├── Distribution │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── stars.svg │ │ │ │ ├── PrimeBadge │ │ │ │ │ ├── PrimeApy │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── PrimeIcon │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── primeLogo.svg │ │ │ │ │ ├── SimulationText │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── ButtonGroup │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.tsx │ │ │ ├── Card │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Carousel │ │ │ │ ├── CarouselItem │ │ │ │ │ └── index.tsx │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── CellGroup │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Checkbox │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── Chip │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.ts │ │ │ │ └── types.ts │ │ │ ├── Countdown │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Delimiter │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Dropdown │ │ │ │ ├── index.tsx │ │ │ │ ├── renderLabel.tsx │ │ │ │ └── types.ts │ │ │ ├── EllipseAddress │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.ts │ │ │ │ └── types.ts │ │ │ ├── ErrorState │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── HealthFactor │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── formatHealthFactorToReadableValue │ │ │ │ │ └── index.ts │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── HealthFactorPill │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Icon │ │ │ │ ├── icons │ │ │ │ │ ├── arrowRight.tsx │ │ │ │ │ ├── arrowShaft.tsx │ │ │ │ │ ├── arrowUp.tsx │ │ │ │ │ ├── arrowUpFull.tsx │ │ │ │ │ ├── attention.tsx │ │ │ │ │ ├── bin.tsx │ │ │ │ │ ├── blueArrowRight.tsx │ │ │ │ │ ├── bridge.tsx │ │ │ │ │ ├── burger.tsx │ │ │ │ │ ├── check.tsx │ │ │ │ │ ├── checkInline.tsx │ │ │ │ │ ├── checkboxBorder.tsx │ │ │ │ │ ├── checked.tsx │ │ │ │ │ ├── chevronLeft.tsx │ │ │ │ │ ├── chevronRight.tsx │ │ │ │ │ ├── circledVenus.tsx │ │ │ │ │ ├── close.tsx │ │ │ │ │ ├── closeRounded.tsx │ │ │ │ │ ├── comment.tsx │ │ │ │ │ ├── convert.tsx │ │ │ │ │ ├── copy.tsx │ │ │ │ │ ├── countdown.tsx │ │ │ │ │ ├── dashboard.tsx │ │ │ │ │ ├── discord.tsx │ │ │ │ │ ├── document.tsx │ │ │ │ │ ├── dots.tsx │ │ │ │ │ ├── ensLogo.tsx │ │ │ │ │ ├── eth.tsx │ │ │ │ │ ├── exclamation.tsx │ │ │ │ │ ├── fee.tsx │ │ │ │ │ ├── fire.tsx │ │ │ │ │ ├── fourDots.tsx │ │ │ │ │ ├── gas.tsx │ │ │ │ │ ├── gasSad.tsx │ │ │ │ │ ├── gasSlashed.tsx │ │ │ │ │ ├── gauge.tsx │ │ │ │ │ ├── github.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── infinity.tsx │ │ │ │ │ ├── info.tsx │ │ │ │ │ ├── lido.tsx │ │ │ │ │ ├── lightening.tsx │ │ │ │ │ ├── link.tsx │ │ │ │ │ ├── loading.tsx │ │ │ │ │ ├── logoMobile.tsx │ │ │ │ │ ├── longArrow.tsx │ │ │ │ │ ├── magnifier.tsx │ │ │ │ │ ├── mark.tsx │ │ │ │ │ ├── market.tsx │ │ │ │ │ ├── mask.tsx │ │ │ │ │ ├── notice.tsx │ │ │ │ │ ├── open.tsx │ │ │ │ │ ├── person.tsx │ │ │ │ │ ├── predictions.tsx │ │ │ │ │ ├── shield.tsx │ │ │ │ │ ├── sort.tsx │ │ │ │ │ ├── spaceIdLogo.tsx │ │ │ │ │ ├── telegram.tsx │ │ │ │ │ ├── vaiOutline.tsx │ │ │ │ │ ├── vault.tsx │ │ │ │ │ ├── venus.tsx │ │ │ │ │ ├── vote.tsx │ │ │ │ │ ├── wallet.tsx │ │ │ │ │ └── x.tsx │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── InfoIcon │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── LabeledInlineContent │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── LabeledProgressBar │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.tsx │ │ │ ├── LabeledProgressCircle │ │ │ │ └── index.tsx │ │ │ ├── LayeredValues │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── MarkdownEditor │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── MarkdownViewer │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Modal │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── Notice │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ ├── Page │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Pagination │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.ts │ │ │ │ └── usePagination.ts │ │ │ ├── Pill │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── ProgressBar │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── ProgressCircle │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── RiskAcknowledgementToggle │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Select │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── mark.svg │ │ │ │ └── types.ts │ │ │ ├── SelectTokenTextField │ │ │ │ ├── TokenList │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── __testUtils__ │ │ │ │ │ └── testUtils.ts │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.ts │ │ │ │ └── testIdGetters.ts │ │ │ ├── SpendingLimit │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Table │ │ │ │ ├── Head.tsx │ │ │ │ ├── TableCards.tsx │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── storiesUtils.tsx │ │ │ │ ├── styles.ts │ │ │ │ └── types.ts │ │ │ ├── Tabs │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.tsx │ │ │ ├── TagGroup │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── TextField │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── Toggle │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── TokenGroup │ │ │ │ ├── index.stories.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── TokenIcon │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── TokenIconWithSymbol │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── TokenTextField │ │ │ │ ├── index.spec.tsx │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Tooltip │ │ │ │ ├── TooltipContent │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── Username │ │ │ │ ├── UsernameSpan.tsx │ │ │ │ └── index.tsx │ │ │ ├── ValueUpdate │ │ │ │ ├── index.stories.tsx │ │ │ │ └── index.tsx │ │ │ ├── charts │ │ │ │ ├── ApyChart │ │ │ │ │ ├── formatToReadableDate.ts │ │ │ │ │ ├── index.stories.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── InterestRateChart │ │ │ │ │ ├── index.stories.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── TooltipContent │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ └── styles.ts │ │ │ └── index.ts │ │ ├── config │ │ │ ├── apiUrls.ts │ │ │ ├── envVariables.ts │ │ │ ├── index.ts │ │ │ ├── rpcUrls.ts │ │ │ └── subgraphUrls.ts │ │ ├── constants │ │ │ ├── address.ts │ │ │ ├── automaticallyGeneratedFileWarningMessage.ts │ │ │ ├── compoundMantissa.ts │ │ │ ├── createProposalThresholdMantissa.ts │ │ │ ├── defaultRefetchInterval.ts │ │ │ ├── functionKey.ts │ │ │ ├── gasLess.ts │ │ │ ├── governance.ts │ │ │ ├── healthFactor.ts │ │ │ ├── indexedVotingSupportNames.ts │ │ │ ├── layerZero.ts │ │ │ ├── layout.ts │ │ │ ├── maxUint256.ts │ │ │ ├── numbers.ts │ │ │ ├── placeholderKey.ts │ │ │ ├── prime.ts │ │ │ ├── production.ts │ │ │ ├── routing.ts │ │ │ ├── smartContractPercentageDecimal.ts │ │ │ ├── swap.ts │ │ │ ├── time.ts │ │ │ ├── transactionTimeout.ts │ │ │ └── xvsSnapshotUrl.ts │ │ ├── containers │ │ │ ├── AccountData │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ ├── index.prime.spec.tsx.snap │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ ├── index.prime.spec.tsx │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useGetValues.ts │ │ │ ├── AddTokenToWalletButton │ │ │ │ └── index.tsx │ │ │ ├── AmountForm │ │ │ │ ├── index.tsx │ │ │ │ └── validationSchema.ts │ │ │ ├── AppVersionChecker │ │ │ │ └── index.tsx │ │ │ ├── AssetAccessor │ │ │ │ ├── DisabledActionNotice │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── ChainExplorerLink │ │ │ │ └── index.tsx │ │ │ ├── ConnectWallet │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── CopyAddressButton │ │ │ │ └── index.tsx │ │ │ ├── Form │ │ │ │ ├── FormikMarkdownEditor.tsx │ │ │ │ ├── FormikSelectField.tsx │ │ │ │ ├── FormikSubmitButton.tsx │ │ │ │ ├── FormikTextField.tsx │ │ │ │ ├── FormikTokenTextField.tsx │ │ │ │ ├── RhfSubmitButton │ │ │ │ │ ├── ApproveTokenSteps │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── RhfTokenTextField.tsx │ │ │ │ └── index.ts │ │ │ ├── GaslessChecker │ │ │ │ └── index.tsx │ │ │ ├── Layout │ │ │ │ ├── ClaimRewardButton │ │ │ │ │ ├── ClaimRewardsContent │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── ExternalRewardGroup │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── InternalRewardGroup │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── RewardGroupContent │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── RewardGroupFrame │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── __testUtils__ │ │ │ │ │ │ └── fakeData.ts │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── types.ts │ │ │ │ │ └── useGetGroups.ts │ │ │ │ ├── ConnectButton │ │ │ │ │ ├── PrimeButton │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Footer │ │ │ │ │ ├── IconLink │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── Header │ │ │ │ │ ├── MarketInfo │ │ │ │ │ │ ├── AddTokenToWalletDropdown │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── DropdownToggleButton │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── GoToTokenContractDropdown │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── TokenDropdownOption │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── UtilizationRate │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── TopBar │ │ │ │ │ │ ├── Breadcrumbs │ │ │ │ │ │ │ ├── PoolName │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── VTokenSymbol │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ChainSelect │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── GaslessStatus │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── MdUpControls │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── XsControls │ │ │ │ │ │ │ ├── NavLink │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── unichainBackground.svg │ │ │ │ │ ├── useIsOnLidoMarketPage │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── useIsOnMarketPage │ │ │ │ │ │ └── index.tsx │ │ │ │ ├── ScrollToTop │ │ │ │ │ └── index.tsx │ │ │ │ ├── Sidebar │ │ │ │ │ ├── NavLink │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── TestEnvWarning │ │ │ │ │ └── index.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── store.ts │ │ │ │ ├── testIds.ts │ │ │ │ ├── types.ts │ │ │ │ └── useGetMenuItems.tsx │ │ │ ├── Link │ │ │ │ └── index.tsx │ │ │ ├── MarketLoader │ │ │ │ └── index.tsx │ │ │ ├── MarketTable │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.ts │ │ │ │ ├── types.ts │ │ │ │ └── useGenerateColumns.tsx │ │ │ ├── PoolStats │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── PrimeStatusBanner │ │ │ │ ├── NoPrimeTokensLeftWarning │ │ │ │ │ └── index.tsx │ │ │ │ ├── PrimeTokensLeft │ │ │ │ │ └── index.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── formatWaitingPeriod.ts │ │ │ │ ├── index.tsx │ │ │ │ └── testIds.ts │ │ │ ├── ProposalCard │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── ReadableActionSignature │ │ │ │ ├── formatSignature.ts │ │ │ │ ├── getContractName.ts │ │ │ │ └── index.tsx │ │ │ ├── Redirect │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── ResendPayingGasModal │ │ │ │ ├── Modal │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── store │ │ │ │ │ └── index.ts │ │ │ │ └── types.ts │ │ │ ├── SwitchChain │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── SwitchChainNotice │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ └── TokenAnnouncement │ │ │ │ └── index.tsx │ │ ├── hooks │ │ │ ├── __mocks__ │ │ │ │ └── useGetSwapTokenUserBalances.ts │ │ │ ├── responsive.ts │ │ │ ├── useCollateral │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── useConvertDollarsToCents │ │ │ │ └── index.ts │ │ │ ├── useConvertMantissaToReadableTokenString.ts │ │ │ ├── useCopyToClipboard.ts │ │ │ ├── useDebounceValue.ts │ │ │ ├── useDelegateApproval │ │ │ │ └── index.ts │ │ │ ├── useFormatPercentageToReadableValue.ts │ │ │ ├── useFormatTo │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.ts │ │ │ ├── useFormatTokensToReadableValue.ts │ │ │ ├── useGetChainMetadata │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── useGetContractAddress │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── useGetCurrentRoutePath │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── useGetHypotheticalUserPrimeApys │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.ts │ │ │ ├── useGetSwapInfo │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.ts │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ ├── formatToSwap.spec.ts.snap │ │ │ │ │ │ ├── index.spec.tsx.snap │ │ │ │ │ │ └── useGetTokenCombinations.spec.tsx.snap │ │ │ │ │ ├── formatToSwap.spec.ts │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ ├── useGetTokenCombinations.spec.tsx │ │ │ │ │ └── wrapToken.spec.ts │ │ │ │ ├── formatToSwap.ts │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ ├── useGetTokenCombinations.ts │ │ │ │ └── wrapToken.ts │ │ │ ├── useGetSwapTokenUserBalances.ts │ │ │ ├── useGetVTreasuryContractAddress │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.ts │ │ │ ├── useHealthFactor │ │ │ │ └── index.ts │ │ │ ├── useImageAccentColor │ │ │ │ ├── __tests__ │ │ │ │ │ ├── alpaca.png │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── useIsFeatureEnabled │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.ts │ │ │ │ └── index.tsx │ │ │ ├── useIsMounted.ts │ │ │ ├── useIsOnUnichain │ │ │ │ └── index.tsx │ │ │ ├── useIsProposalExecutable │ │ │ │ └── index.tsx │ │ │ ├── useNavigate │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.ts │ │ │ ├── useNow │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.ts │ │ │ ├── usePrimeCalculatorPagePath │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ │ ├── useSendTransaction │ │ │ │ ├── __tests__ │ │ │ │ │ ├── index.gaslessTransactions.spec.tsx │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── index.ts │ │ │ │ ├── sendTransaction │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── useTrackTransaction │ │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── waitForTransaction │ │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── waitForSafeWalletTransaction │ │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ ├── getSafeWalletTransaction │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ ├── useTokenApproval │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── useUrlPagination │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.ts │ │ │ └── useUserChainSettings │ │ │ │ ├── __tests__ │ │ │ │ └── index.spec.tsx │ │ │ │ └── index.tsx │ │ ├── index.tsx │ │ ├── initializeLibraries │ │ │ ├── bigNumber.ts │ │ │ ├── index.ts │ │ │ └── yup │ │ │ │ ├── index.ts │ │ │ │ └── yup-extensions.d.ts │ │ ├── libs │ │ │ ├── analytics │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useAnalytics.ts │ │ │ ├── contracts │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.ts │ │ │ │ ├── __testUtils__ │ │ │ │ │ └── fakeConfig.ts │ │ │ │ ├── config │ │ │ │ │ ├── externalAbis │ │ │ │ │ │ ├── Erc20.json │ │ │ │ │ │ ├── Maximillion.json │ │ │ │ │ │ ├── Multicall3.json │ │ │ │ │ │ ├── PancakePairV2.json │ │ │ │ │ │ ├── PoolLens.json │ │ │ │ │ │ ├── VBnb.json │ │ │ │ │ │ └── ZyFiVault.json │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── scripts │ │ │ │ │ └── generateContractRecords │ │ │ │ │ │ ├── generateContracts │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ ├── generateAbis │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ │ ├── handleBarsHelpers.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── templates │ │ │ │ │ │ │ │ ├── abiTemplate.hbs │ │ │ │ │ │ │ │ └── index.hbs │ │ │ │ │ │ ├── generateAddressList │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ └── index.ts │ │ │ │ └── utilities │ │ │ │ │ ├── getAbsolutePath │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ │ │ └── getContractAddress │ │ │ │ │ └── index.ts │ │ │ ├── errors │ │ │ │ ├── ErrorBoundary │ │ │ │ │ └── index.tsx │ │ │ │ ├── SentryErrorInfo │ │ │ │ │ └── index.tsx │ │ │ │ ├── VError.ts │ │ │ │ ├── __mocks__ │ │ │ │ │ └── transactionErrors.ts │ │ │ │ ├── contractErrors.ts │ │ │ │ ├── handleError │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ ├── formatVErrorToReadableString.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── importProposalErrorPhrases.ts │ │ │ │ ├── index.ts │ │ │ │ ├── interactionErrorPhrases.ts │ │ │ │ ├── logError.ts │ │ │ │ ├── transactionErrorPhrases.ts │ │ │ │ ├── transactionErrors.ts │ │ │ │ └── unexpectedErrorPhrases.ts │ │ │ ├── notifications │ │ │ │ ├── NotificationCenter │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── testIds.ts │ │ │ │ ├── __mocks__ │ │ │ │ │ └── models │ │ │ │ │ │ └── notifications.ts │ │ │ │ ├── index.ts │ │ │ │ ├── store │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── types.ts │ │ │ │ ├── types.ts │ │ │ │ └── utilities │ │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ ├── tokens │ │ │ │ ├── .gitignore │ │ │ │ ├── README.md │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.ts │ │ │ │ ├── hooks │ │ │ │ │ ├── useGetSwapTokens │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── useGetToken │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── useGetTokens │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ └── index.ts │ │ │ │ ├── img │ │ │ │ │ ├── underlyingTokens │ │ │ │ │ │ ├── aave.svg │ │ │ │ │ │ ├── ada.svg │ │ │ │ │ │ ├── alpaca.png │ │ │ │ │ │ ├── angle.svg │ │ │ │ │ │ ├── ankr.svg │ │ │ │ │ │ ├── ankrBNB.svg │ │ │ │ │ │ ├── arb.svg │ │ │ │ │ │ ├── asBnb.svg │ │ │ │ │ │ ├── babyDoge.svg │ │ │ │ │ │ ├── bal.svg │ │ │ │ │ │ ├── bch.svg │ │ │ │ │ │ ├── beth.svg │ │ │ │ │ │ ├── bifi.png │ │ │ │ │ │ ├── bnb.svg │ │ │ │ │ │ ├── bnbx.png │ │ │ │ │ │ ├── bsw.svg │ │ │ │ │ │ ├── btcb.svg │ │ │ │ │ │ ├── btt.svg │ │ │ │ │ │ ├── busd.svg │ │ │ │ │ │ ├── cake.svg │ │ │ │ │ │ ├── carrot.png │ │ │ │ │ │ ├── cbbtc.svg │ │ │ │ │ │ ├── crv.png │ │ │ │ │ │ ├── crvUsd.png │ │ │ │ │ │ ├── dai.svg │ │ │ │ │ │ ├── doge.svg │ │ │ │ │ │ ├── dot.svg │ │ │ │ │ │ ├── eBtc.png │ │ │ │ │ │ ├── eigen.svg │ │ │ │ │ │ ├── eth.svg │ │ │ │ │ │ ├── eura.svg │ │ │ │ │ │ ├── ezEth.png │ │ │ │ │ │ ├── fdusd.svg │ │ │ │ │ │ ├── fil.svg │ │ │ │ │ │ ├── floki.svg │ │ │ │ │ │ ├── frax.svg │ │ │ │ │ │ ├── gmBtcUsdc.svg │ │ │ │ │ │ ├── gmWEthUsdc.svg │ │ │ │ │ │ ├── lbtc.svg │ │ │ │ │ │ ├── link.svg │ │ │ │ │ │ ├── lisUSD.png │ │ │ │ │ │ ├── ltc.svg │ │ │ │ │ │ ├── luna.svg │ │ │ │ │ │ ├── matic.svg │ │ │ │ │ │ ├── nft.png │ │ │ │ │ │ ├── op.svg │ │ │ │ │ │ ├── planet.svg │ │ │ │ │ │ ├── ptClisBNB.svg │ │ │ │ │ │ ├── ptSUsdE.svg │ │ │ │ │ │ ├── ptSolvBtc.svg │ │ │ │ │ │ ├── ptUsdE.svg │ │ │ │ │ │ ├── ptWeeth.png │ │ │ │ │ │ ├── pufEth.png │ │ │ │ │ │ ├── raca.png │ │ │ │ │ │ ├── rsEth.svg │ │ │ │ │ │ ├── sFrax.svg │ │ │ │ │ │ ├── sUsdE.svg │ │ │ │ │ │ ├── sUsds.svg │ │ │ │ │ │ ├── sd.svg │ │ │ │ │ │ ├── sfrxEth.svg │ │ │ │ │ │ ├── slisBNB.png │ │ │ │ │ │ ├── sol.svg │ │ │ │ │ │ ├── solvBtc.png │ │ │ │ │ │ ├── stkBNB.svg │ │ │ │ │ │ ├── sxp.svg │ │ │ │ │ │ ├── tBtc.svg │ │ │ │ │ │ ├── the.svg │ │ │ │ │ │ ├── trx.svg │ │ │ │ │ │ ├── tusd.svg │ │ │ │ │ │ ├── twt.svg │ │ │ │ │ │ ├── uni.svg │ │ │ │ │ │ ├── usd1.png │ │ │ │ │ │ ├── usdc.svg │ │ │ │ │ │ ├── usdcNative.svg │ │ │ │ │ │ ├── usdd.svg │ │ │ │ │ │ ├── usde.svg │ │ │ │ │ │ ├── usds.svg │ │ │ │ │ │ ├── usdt.svg │ │ │ │ │ │ ├── ust.svg │ │ │ │ │ │ ├── vai.svg │ │ │ │ │ │ ├── vrt.svg │ │ │ │ │ │ ├── wSuperOEthB.svg │ │ │ │ │ │ ├── wUsdm.png │ │ │ │ │ │ ├── wbeth.svg │ │ │ │ │ │ ├── wbnb.svg │ │ │ │ │ │ ├── wbtc.svg │ │ │ │ │ │ ├── weEth.svg │ │ │ │ │ │ ├── weeths.svg │ │ │ │ │ │ ├── weth.svg │ │ │ │ │ │ ├── win.svg │ │ │ │ │ │ ├── woo.svg │ │ │ │ │ │ ├── wstEth.svg │ │ │ │ │ │ ├── xSolvBtc.svg │ │ │ │ │ │ ├── xrp.svg │ │ │ │ │ │ ├── xvs.svg │ │ │ │ │ │ ├── yvusdc.svg │ │ │ │ │ │ ├── yvusds.svg │ │ │ │ │ │ ├── yvusdt.svg │ │ │ │ │ │ ├── yvweth.svg │ │ │ │ │ │ ├── zk.svg │ │ │ │ │ │ └── zkEth.svg │ │ │ │ │ └── vTokens │ │ │ │ │ │ ├── vAaveCore.svg │ │ │ │ │ │ ├── vAdaCore.svg │ │ │ │ │ │ ├── vAlpacaDefi.svg │ │ │ │ │ │ ├── vAnkrBnbDefi.svg │ │ │ │ │ │ ├── vAnkrBnbLsBnb.svg │ │ │ │ │ │ ├── vAnkrDefi.svg │ │ │ │ │ │ ├── vArbCore.svg │ │ │ │ │ │ ├── vArbLsEth.svg │ │ │ │ │ │ ├── vBabyDogeMeme.svg │ │ │ │ │ │ ├── vBchCore.svg │ │ │ │ │ │ ├── vBethCore.svg │ │ │ │ │ │ ├── vBnbCore.svg │ │ │ │ │ │ ├── vBnbLsBnb.svg │ │ │ │ │ │ ├── vBnbXLsBnb.svg │ │ │ │ │ │ ├── vBswDefi.svg │ │ │ │ │ │ ├── vBtcCore.svg │ │ │ │ │ │ ├── vBttTron.svg │ │ │ │ │ │ ├── vBusdCore.svg │ │ │ │ │ │ ├── vCakeCore.svg │ │ │ │ │ │ ├── vCbBtcCore.svg │ │ │ │ │ │ ├── vCrvCurve.png │ │ │ │ │ │ ├── vCrvUsdCore.png │ │ │ │ │ │ ├── vCrvUsdCurve.png │ │ │ │ │ │ ├── vDaiCore.svg │ │ │ │ │ │ ├── vDogeCore.svg │ │ │ │ │ │ ├── vDotCore.svg │ │ │ │ │ │ ├── vEBtcCore.svg │ │ │ │ │ │ ├── vEigenCore.svg │ │ │ │ │ │ ├── vEthCore.svg │ │ │ │ │ │ ├── vEthLsEth.svg │ │ │ │ │ │ ├── vEuraStablecoins.svg │ │ │ │ │ │ ├── vEzEthLsEth.svg │ │ │ │ │ │ ├── vFDUsdCore.svg │ │ │ │ │ │ ├── vFilCore.svg │ │ │ │ │ │ ├── vFlokiGamefi.svg │ │ │ │ │ │ ├── vFraxCore.svg │ │ │ │ │ │ ├── vGmBtc.svg │ │ │ │ │ │ ├── vGmEth.svg │ │ │ │ │ │ ├── vLBtcCore.svg │ │ │ │ │ │ ├── vLinkCore.svg │ │ │ │ │ │ ├── vLtcCore.svg │ │ │ │ │ │ ├── vLunaCore.svg │ │ │ │ │ │ ├── vMaticCore.svg │ │ │ │ │ │ ├── vOpCore.svg │ │ │ │ │ │ ├── vPlanetDefi.svg │ │ │ │ │ │ ├── vPtWeethDec24LsEth.svg │ │ │ │ │ │ ├── vPufEthLsEth.png │ │ │ │ │ │ ├── vRacaGamefi.svg │ │ │ │ │ │ ├── vRsEthLsEth.svg │ │ │ │ │ │ ├── vSFraxCore.svg │ │ │ │ │ │ ├── vSfrxEthLsEth.svg │ │ │ │ │ │ ├── vSlisBnbLsBnb.svg │ │ │ │ │ │ ├── vSolvBtcCore.svg │ │ │ │ │ │ ├── vStkBnbLsBnb.svg │ │ │ │ │ │ ├── vSxpCore.svg │ │ │ │ │ │ ├── vTrxCore.svg │ │ │ │ │ │ ├── vTrxTron.svg │ │ │ │ │ │ ├── vTusdCore.svg │ │ │ │ │ │ ├── vTwtCore.svg │ │ │ │ │ │ ├── vTwtDefi.svg │ │ │ │ │ │ ├── vUniCore.svg │ │ │ │ │ │ ├── vUsdcBridgedCore.svg │ │ │ │ │ │ ├── vUsdcCore.svg │ │ │ │ │ │ ├── vUsdcLsEth.svg │ │ │ │ │ │ ├── vUsddDefi.svg │ │ │ │ │ │ ├── vUsddGamefi.svg │ │ │ │ │ │ ├── vUsddStablecoins.svg │ │ │ │ │ │ ├── vUsddTron.svg │ │ │ │ │ │ ├── vUsdtCore.svg │ │ │ │ │ │ ├── vUsdtDefi.svg │ │ │ │ │ │ ├── vUsdtGamefi.svg │ │ │ │ │ │ ├── vUsdtLsEth.svg │ │ │ │ │ │ ├── vUsdtMeme.svg │ │ │ │ │ │ ├── vUsdtStablecoins.svg │ │ │ │ │ │ ├── vUsdtTron.svg │ │ │ │ │ │ ├── vUstCore.svg │ │ │ │ │ │ ├── vWBethCore.svg │ │ │ │ │ │ ├── vWBnbCore.svg │ │ │ │ │ │ ├── vWBtcCore.svg │ │ │ │ │ │ ├── vWUsdm.svg │ │ │ │ │ │ ├── vWbtcLsEth.svg │ │ │ │ │ │ ├── vWeEthLsEth.svg │ │ │ │ │ │ ├── vWeEthSLsEth.svg │ │ │ │ │ │ ├── vWethCore.svg │ │ │ │ │ │ ├── vWethLsEth.svg │ │ │ │ │ │ ├── vWinTron.svg │ │ │ │ │ │ ├── vWstEthLsEth.svg │ │ │ │ │ │ ├── vXvsCore.svg │ │ │ │ │ │ ├── vZkCore.svg │ │ │ │ │ │ ├── vlisUsdStablecoins.svg │ │ │ │ │ │ └── xXrpCore.svg │ │ │ │ ├── index.ts │ │ │ │ ├── infos │ │ │ │ │ ├── commonTokens │ │ │ │ │ │ ├── arbitrumOne.ts │ │ │ │ │ │ ├── arbitrumSepolia.ts │ │ │ │ │ │ ├── baseMainnet.ts │ │ │ │ │ │ ├── baseSepolia.ts │ │ │ │ │ │ ├── berachainBepolia.ts │ │ │ │ │ │ ├── berachainMainnet.ts │ │ │ │ │ │ ├── bscMainnet.ts │ │ │ │ │ │ ├── bscTestnet.ts │ │ │ │ │ │ ├── ethereum.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── opBnbMainnet.ts │ │ │ │ │ │ ├── opBnbTestnet.ts │ │ │ │ │ │ ├── optimismMainnet.ts │ │ │ │ │ │ ├── optimismSepolia.ts │ │ │ │ │ │ ├── sepolia.ts │ │ │ │ │ │ ├── unichainMainnet.ts │ │ │ │ │ │ ├── unichainSepolia.ts │ │ │ │ │ │ ├── zkSyncMainnet.ts │ │ │ │ │ │ └── zkSyncSepolia.ts │ │ │ │ │ ├── disabledTokenActions │ │ │ │ │ │ ├── arbitrumOne.ts │ │ │ │ │ │ ├── arbitrumSepolia.ts │ │ │ │ │ │ ├── baseMainnet.ts │ │ │ │ │ │ ├── baseSepolia.ts │ │ │ │ │ │ ├── berachainBepolia.ts │ │ │ │ │ │ ├── berachainMainnet.ts │ │ │ │ │ │ ├── bscMainnet.ts │ │ │ │ │ │ ├── bscTestnet.ts │ │ │ │ │ │ ├── ethereum.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── opBnbMainnet.ts │ │ │ │ │ │ ├── opBnbTestnet.ts │ │ │ │ │ │ ├── optimismMainnet.ts │ │ │ │ │ │ ├── optimismSepolia.ts │ │ │ │ │ │ ├── sepolia.ts │ │ │ │ │ │ ├── unichainMainnet.ts │ │ │ │ │ │ ├── unichainSepolia.ts │ │ │ │ │ │ ├── zkSyncMainnet.ts │ │ │ │ │ │ └── zkSyncSepolia.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── nativeTokens │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── pancakeSwapTokens │ │ │ │ │ │ ├── arbitrumOne.ts │ │ │ │ │ │ ├── arbitrumSepolia.ts │ │ │ │ │ │ ├── baseMainnet.ts │ │ │ │ │ │ ├── baseSepolia.ts │ │ │ │ │ │ ├── berachainBepolia.ts │ │ │ │ │ │ ├── berachainMainnet.ts │ │ │ │ │ │ ├── bscTestnet.ts │ │ │ │ │ │ ├── ethereum.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── opBnbMainnet.ts │ │ │ │ │ │ ├── opBnbTestnet.ts │ │ │ │ │ │ ├── optimismMainnet.ts │ │ │ │ │ │ ├── optimismSepolia.ts │ │ │ │ │ │ ├── sepolia.ts │ │ │ │ │ │ ├── unichainMainnet.ts │ │ │ │ │ │ ├── unichainSepolia.ts │ │ │ │ │ │ ├── zkSyncMainnet.ts │ │ │ │ │ │ └── zkSyncSepolia.ts │ │ │ │ │ └── vTokens │ │ │ │ │ │ ├── arbitrumOne.ts │ │ │ │ │ │ ├── arbitrumSepolia.ts │ │ │ │ │ │ ├── baseMainnet.ts │ │ │ │ │ │ ├── baseSepolia.ts │ │ │ │ │ │ ├── berachainBepolia.ts │ │ │ │ │ │ ├── berachainMainnet.ts │ │ │ │ │ │ ├── bscMainnet.ts │ │ │ │ │ │ ├── bscTestnet.ts │ │ │ │ │ │ ├── ethereum.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── opBnbMainnet.ts │ │ │ │ │ │ ├── opBnbTestnet.ts │ │ │ │ │ │ ├── optimismMainnet.ts │ │ │ │ │ │ ├── optimismSepolia.ts │ │ │ │ │ │ ├── sepolia.ts │ │ │ │ │ │ ├── unichainMainnet.ts │ │ │ │ │ │ ├── unichainSepolia.ts │ │ │ │ │ │ ├── zkSyncMainnet.ts │ │ │ │ │ │ └── zkSyncSepolia.ts │ │ │ │ ├── scripts │ │ │ │ │ └── generatePancakeSwapTokenRecords │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── template.hbs │ │ │ │ ├── types.ts │ │ │ │ └── utilities │ │ │ │ │ ├── getDisabledTokenActions │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── getPancakeSwapTokens │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ │ │ ├── getSwapTokens │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ │ │ ├── getToken │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ │ │ ├── getTokens │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ │ │ └── getVTokenAsset │ │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ └── index.ts │ │ │ ├── translations │ │ │ │ ├── README.md │ │ │ │ ├── index.tsx │ │ │ │ ├── translations │ │ │ │ │ └── en.json │ │ │ │ └── useTranslation │ │ │ │ │ └── index.tsx │ │ │ └── wallet │ │ │ │ ├── Web3Wrapper │ │ │ │ ├── ConnectKitWrapper │ │ │ │ │ ├── AuthHandler │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── __mocks__ │ │ │ │ │ └── index.tsx │ │ │ │ ├── config.ts │ │ │ │ └── index.tsx │ │ │ │ ├── __mocks__ │ │ │ │ └── index.ts │ │ │ │ ├── chains.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── hooks │ │ │ │ ├── useAccountAddress │ │ │ │ │ ├── __mocks__ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── useAccountChainId │ │ │ │ │ ├── __mocks__ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── useAddTokenToWallet │ │ │ │ │ ├── __mocks__ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── useAuthModal │ │ │ │ │ ├── __mocks__ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── useChainId │ │ │ │ │ ├── __mocks__ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── usePublicClient │ │ │ │ │ ├── __mocks__ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── useSwitchChain │ │ │ │ │ ├── __mocks__ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.tsx │ │ │ │ └── useUpdateUrlChainId │ │ │ │ │ └── index.tsx │ │ │ │ ├── img │ │ │ │ └── chains │ │ │ │ │ ├── arbitrum.svg │ │ │ │ │ ├── bsc.svg │ │ │ │ │ ├── eth.svg │ │ │ │ │ ├── opbnb.svg │ │ │ │ │ ├── optimism.svg │ │ │ │ │ └── zkSync.svg │ │ │ │ ├── index.ts │ │ │ │ └── utilities │ │ │ │ └── getUnsafeChainIdFromSearchParams │ │ │ │ └── index.ts │ │ ├── pages │ │ │ ├── Account │ │ │ │ ├── AccountBreakdown │ │ │ │ │ ├── AccountPlaceholder │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── PoolsBreakdown │ │ │ │ │ │ ├── PoolTagContent │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Tables │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── styles.ts │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── styles.ts │ │ │ │ │ │ └── testIds.ts │ │ │ │ │ ├── Summary │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ ├── calculateNetApy │ │ │ │ │ │ │ ├── index.spec.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── useExtractData.ts │ │ │ │ │ ├── VaultsBreakdown │ │ │ │ │ │ ├── Table │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── styles.ts │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── Section │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── Settings │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── Bridge │ │ │ │ ├── ChainSelect │ │ │ │ │ └── index.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── constants.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── layerZeroLogo.svg │ │ │ │ ├── testIds.ts │ │ │ │ └── useBridgeForm.ts │ │ │ ├── Dashboard │ │ │ │ ├── Carousel │ │ │ │ │ ├── PrimePromotionalBanner │ │ │ │ │ │ ├── boostsIllustration.png │ │ │ │ │ │ ├── illustrationSm.png │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── primeTokenIllustration.png │ │ │ │ │ ├── Template │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── UnichainPromotionalBanner │ │ │ │ │ │ ├── background.svg │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── logo.svg │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ └── indexPrime.spec.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── testIds.ts │ │ │ │ ├── useFormatPools.ts │ │ │ │ └── useMarketTableColumns │ │ │ │ │ └── index.tsx │ │ │ ├── Governance │ │ │ │ ├── ProposalList │ │ │ │ │ ├── CreateProposalModal │ │ │ │ │ │ ├── ActionAccordion │ │ │ │ │ │ │ ├── Accordion │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ └── styles.ts │ │ │ │ │ │ │ ├── CallDataFields.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── styles.ts │ │ │ │ │ │ ├── ProposalInfo │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ProposalPreview │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── styles.ts │ │ │ │ │ │ ├── ProposalWizard │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── UploadOrManualProposal │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── styles.ts │ │ │ │ │ │ ├── VotingDescriptions │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── checkImportErrors │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── encodeCallData.ts │ │ │ │ │ │ ├── formatProposalPayload.ts │ │ │ │ │ │ ├── importJsonProposal │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ │ │ │ │ └── index.spec.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── proposalSchema.ts │ │ │ │ │ │ ├── safeJsonParse.ts │ │ │ │ │ │ ├── styles.ts │ │ │ │ │ │ └── testIds.ts │ │ │ │ │ ├── GovernanceProposal │ │ │ │ │ │ ├── Status │ │ │ │ │ │ │ ├── Indicator │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── Warning │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── greenPulseAnimation.gif │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── styles.ts │ │ │ │ │ │ └── testIds.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── VotingWallet │ │ │ │ │ ├── DelegateModal │ │ │ │ │ │ ├── SubmitSection │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── addressValidationSchema.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── testIds.ts │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── testIds.ts │ │ │ ├── IsolatedPools │ │ │ │ ├── PoolTable │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useGetFilteredPools │ │ │ │ │ └── index.tsx │ │ │ ├── Market │ │ │ │ ├── CorePoolMarket │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ ├── index.spec.tsx.snap │ │ │ │ │ │ │ ├── indexApyCharts.spec.tsx.snap │ │ │ │ │ │ │ └── indexMarketParticipantCounts.spec.tsx.snap │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ ├── indexApyCharts.spec.tsx │ │ │ │ │ │ └── indexMarketParticipantCounts.spec.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── IsolatedPoolMarket │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ ├── index.spec.tsx.snap │ │ │ │ │ │ │ ├── indexMarketHistory.spec.tsx.snap │ │ │ │ │ │ │ └── indexMarketParticipantCounts.spec.tsx.snap │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ ├── indexMarketHistory.spec.tsx │ │ │ │ │ │ └── indexMarketParticipantCounts.spec.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── LidoMarket │ │ │ │ │ └── index.tsx │ │ │ │ ├── Page │ │ │ │ │ ├── AssetWarning │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── testIds.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── InterestRateChart │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── MarketCard │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── MarketHistory │ │ │ │ │ │ ├── Card │ │ │ │ │ │ │ ├── CapThreshold │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── useGetChartData.ts │ │ │ │ │ ├── MarketInfo │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── OperationForm │ │ │ │ │ │ ├── ApproveDelegateSteps │ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── AssetInfo │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ ├── index.prime.spec.tsx.snap │ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ │ ├── index.prime.spec.tsx │ │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── BorrowForm │ │ │ │ │ │ │ ├── SubmitSection │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── __testUtils__ │ │ │ │ │ │ │ │ └── fakeData.ts │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ │ │ └── indexWrapUnwrapNative.spec.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── testIds.ts │ │ │ │ │ │ │ └── useForm │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ └── useFormValidation.ts │ │ │ │ │ │ ├── NativeTokenBalanceWrapper │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── OperationDetails │ │ │ │ │ │ │ ├── SwapDetails │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── testIds.ts │ │ │ │ │ │ ├── RepayForm │ │ │ │ │ │ │ ├── Notice.tsx │ │ │ │ │ │ │ ├── SubmitSection │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── __testUtils__ │ │ │ │ │ │ │ │ └── fakeData.ts │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ ├── index.spec.tsx.snap │ │ │ │ │ │ │ │ │ ├── indexIntegratedSwap.spec.tsx.snap │ │ │ │ │ │ │ │ │ └── indexWrapUnwrapNative.spec.tsx.snap │ │ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ │ │ ├── indexIntegratedSwap.spec.tsx │ │ │ │ │ │ │ │ └── indexWrapUnwrapNative.spec.tsx │ │ │ │ │ │ │ ├── calculatePercentageOfUserBorrowBalance.ts │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── testIds.ts │ │ │ │ │ │ │ └── useForm │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ └── useFormValidation.ts │ │ │ │ │ │ ├── SupplyForm │ │ │ │ │ │ │ ├── Notice.tsx │ │ │ │ │ │ │ ├── SubmitSection │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── __testUtils__ │ │ │ │ │ │ │ │ └── fakeData.ts │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ ├── index.spec.tsx.snap │ │ │ │ │ │ │ │ │ └── indexIntegratedSwap.spec.tsx.snap │ │ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ │ │ ├── indexIntegratedSwap.spec.tsx │ │ │ │ │ │ │ │ └── indexWrapUnwrapNative.spec.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── testIds.ts │ │ │ │ │ │ │ └── useForm │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ └── useFormValidation.ts │ │ │ │ │ │ ├── SwapSummary │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── testIds.ts │ │ │ │ │ │ ├── WithdrawForm │ │ │ │ │ │ │ ├── SubmitSection │ │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ │ ├── __testUtils__ │ │ │ │ │ │ │ │ └── fakeData.ts │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ ├── index.spec.tsx.snap │ │ │ │ │ │ │ │ │ └── indexWrapUnwrapNative.spec.tsx.snap │ │ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ │ │ └── indexWrapUnwrapNative.spec.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── testIds.ts │ │ │ │ │ │ │ └── useForm │ │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ │ └── useFormValidation.ts │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── testIds.ts │ │ │ │ └── types.ts │ │ │ ├── Pool │ │ │ │ ├── CorePool │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── IsolatedPool │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ ├── PrimeCalculator │ │ │ │ ├── Form │ │ │ │ │ ├── Field │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── RewardDetails │ │ │ │ │ │ ├── TokenAmountAndApy │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── validateNumericString.ts │ │ │ │ ├── __tests__ │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── testIds.ts │ │ │ ├── Proposal │ │ │ │ ├── Commands │ │ │ │ │ ├── BscCommand │ │ │ │ │ │ ├── ActionButton │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── CurrentStep │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Command │ │ │ │ │ │ ├── ActionsAccordion │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Description │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── NonBscCommand │ │ │ │ │ │ ├── CurrentStep │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── ExecuteButton │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Progress │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── Status │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── useIsProposalCancelableByUser │ │ │ │ │ │ └── index.tsx │ │ │ │ ├── Description │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── ProposalSummary │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── VoteModal │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── styles.ts │ │ │ │ │ └── testIds.ts │ │ │ │ ├── VoteSummary │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.ts │ │ │ │ └── testIds.ts │ │ │ ├── Swap │ │ │ │ ├── Notice.tsx │ │ │ │ ├── SubmitSection │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── SwapDetails │ │ │ │ │ └── index.tsx │ │ │ │ ├── __testUtils__ │ │ │ │ │ └── fakeData.ts │ │ │ │ ├── __tests__ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ └── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── styles.ts │ │ │ │ ├── testIds.ts │ │ │ │ ├── types.ts │ │ │ │ └── useFormValidation.ts │ │ │ ├── Vai │ │ │ │ ├── AccountVaiData │ │ │ │ │ └── index.tsx │ │ │ │ ├── Borrow │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ └── indexPrime.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── testIds.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── useForm │ │ │ │ │ │ └── index.ts │ │ │ │ ├── Repay │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── testIds.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ └── useForm │ │ │ │ │ │ └── index.ts │ │ │ │ └── index.tsx │ │ │ ├── Vault │ │ │ │ ├── TransactionForm │ │ │ │ │ ├── SubmitSection │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── testIds.ts │ │ │ │ ├── VaultItem │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── styles.ts │ │ │ │ │ └── testIds.ts │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ ├── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── modals │ │ │ │ │ ├── ActionModal │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── StakeModal │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ └── index.spec.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── WithdrawFromVaiVaultModal │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── WithdrawFromVestingVaultModal │ │ │ │ │ │ ├── RequestWithdrawal │ │ │ │ │ │ │ ├── __tests__ │ │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ │ │ └── indexPrime.spec.tsx │ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ │ ├── Withdraw │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ └── testIds.ts │ │ │ │ │ │ ├── WithdrawalRequestList │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ │ └── index.spec.tsx.snap │ │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ │ ├── styles.ts │ │ │ │ │ │ │ └── testIds.ts │ │ │ │ │ │ ├── index.spec.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.ts │ │ │ │ │ └── index.ts │ │ │ │ └── styles.ts │ │ │ ├── Voter │ │ │ │ ├── History │ │ │ │ │ ├── VoterProposal │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── styles.ts │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── Holding │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── Transactions │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── styles.ts │ │ │ │ ├── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ └── VoterLeaderboard │ │ │ │ ├── LeaderboardTable │ │ │ │ ├── index.spec.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ │ │ ├── index.tsx │ │ │ │ └── styles.ts │ │ ├── scripts │ │ │ └── generatePublicVersionFile.ts │ │ ├── setupTests.tsx │ │ ├── store │ │ │ ├── __tests__ │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ ├── testUtils │ │ │ └── render.tsx │ │ ├── types │ │ │ ├── global.d.ts │ │ │ ├── index.ts │ │ │ └── mui.d.ts │ │ └── utilities │ │ │ ├── __mocks__ │ │ │ ├── generateTransactionDeadline.ts │ │ │ └── restService.ts │ │ │ ├── addUserPropsToPool.ts │ │ │ ├── areAddressesEqual.ts │ │ │ ├── areTokensEqual.ts │ │ │ ├── calculateDailyEarningsCents.spec.ts │ │ │ ├── calculateDailyEarningsCents.ts │ │ │ ├── calculateDailyTokenRate │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── calculateHealthFactor │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.tsx │ │ │ ├── calculatePercentage.ts │ │ │ ├── calculateYearlyEarnings.spec.ts │ │ │ ├── calculateYearlyEarnings.ts │ │ │ ├── calculateYearlyPercentageRate │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── callOrThrow │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── compareBigNumbers.ts │ │ │ ├── compareBooleans.ts │ │ │ ├── compareNumbers.ts │ │ │ ├── compareStrings.ts │ │ │ ├── convertAprBipsToApy │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── convertDollarsToCents.ts │ │ │ ├── convertFactorFromSmartContract.ts │ │ │ ├── convertMantissaToTokens.ts │ │ │ ├── convertPercentageFromSmartContract.ts │ │ │ ├── convertPriceMantissaToDollars │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── convertToDate │ │ │ └── index.ts │ │ │ ├── convertTokensToMantissa.ts │ │ │ ├── createStoreSelectors.ts │ │ │ ├── cwd.ts │ │ │ ├── extractEnumValues.ts │ │ │ ├── extractSettledPromiseValue.ts │ │ │ ├── findTokenByAddress.ts │ │ │ ├── formatCentsToReadableValue │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── formatPercentageToReadableValue │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── formatToProposalDescription │ │ │ └── index.ts │ │ │ ├── formatTokensToReadableValue │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── generateExplorerUrl.ts │ │ │ ├── generatePseudoRandomRefetchInterval │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── generateTransactionDeadline.ts │ │ │ ├── getCombinedDistributionApys │ │ │ ├── __tests__ │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── getDisabledTokenActions │ │ │ ├── __tests__ │ │ │ │ ├── __snapshots__ │ │ │ │ │ └── index.spec.ts.snap │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── getProposalState │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── getProposalStateLabel │ │ │ └── index.ts │ │ │ ├── getProposalType │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── getSmartDecimalPlaces │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── getSwapToTokenAmountReceived │ │ │ └── index.ts │ │ │ ├── getUniqueTokenBalances │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── getUserVoteSupport │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── indexBy.ts │ │ │ ├── isAssetPaused │ │ │ └── index.ts │ │ │ ├── isCollateralActionDisabled │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── isPoolIsolated │ │ │ ├── __tests__ │ │ │ │ └── index.spec.tsx │ │ │ └── index.tsx │ │ │ ├── isProposalExecutable │ │ │ └── index.ts │ │ │ ├── notUndefined.ts │ │ │ ├── parseFunctionSignature.ts │ │ │ ├── removeDuplicates │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── restService.ts │ │ │ ├── safeLazyLoad │ │ │ ├── __tests__ │ │ │ │ └── index.spec.tsx │ │ │ └── index.tsx │ │ │ ├── shortenValueWithSuffix │ │ │ ├── __tests__ │ │ │ │ └── index.spec.ts │ │ │ └── index.ts │ │ │ ├── truncateAddress.ts │ │ │ └── writeFile │ │ │ └── index.ts │ ├── static.json │ ├── tailwind.config.ts │ ├── tsconfig.json │ ├── vercel.json │ ├── vite-env.d.ts │ └── vite.config.mts └── landing │ ├── .stylelintrc.js │ ├── CHANGELOG.md │ ├── README.md │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── public │ ├── .well-known │ │ └── walletconnect.txt │ ├── 114x114.png │ ├── 120x120.png │ ├── 144x144.png │ ├── 150x150.png │ ├── 152x152.png │ ├── 180x180.png │ ├── 310x150.png │ ├── 57x57.png │ ├── 60x60.png │ ├── 70x70.png │ ├── 72x72.png │ ├── 76x76.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── browserconfig.xml │ ├── coins │ │ ├── aave.png │ │ ├── aave.svg │ │ ├── ada.png │ │ ├── ada.svg │ │ ├── agEUR.svg │ │ ├── alpaca.png │ │ ├── angle.svg │ │ ├── ankr.svg │ │ ├── ankrBNB.svg │ │ ├── bch.png │ │ ├── bch.svg │ │ ├── beth.png │ │ ├── beth.svg │ │ ├── bifi.png │ │ ├── bnb.png │ │ ├── bnb.svg │ │ ├── bnbx.png │ │ ├── bsw.svg │ │ ├── btcb.png │ │ ├── btcb.svg │ │ ├── btt.svg │ │ ├── busd.png │ │ ├── busd.svg │ │ ├── cake.png │ │ ├── cake.svg │ │ ├── dai.png │ │ ├── dai.svg │ │ ├── doge.png │ │ ├── doge.svg │ │ ├── dot.png │ │ ├── dot.svg │ │ ├── eth.png │ │ ├── eth.svg │ │ ├── fil.png │ │ ├── fil.svg │ │ ├── floki.svg │ │ ├── hay.png │ │ ├── link.png │ │ ├── link.svg │ │ ├── ltc.png │ │ ├── ltc.svg │ │ ├── luna.png │ │ ├── luna.svg │ │ ├── matic.png │ │ ├── matic.svg │ │ ├── nft.png │ │ ├── planet.svg │ │ ├── raca.png │ │ ├── sd.svg │ │ ├── snBNB.svg │ │ ├── stkBNB.svg │ │ ├── sxp.png │ │ ├── sxp.svg │ │ ├── the.svg │ │ ├── trx.png │ │ ├── trx.svg │ │ ├── tusd.png │ │ ├── tusd.svg │ │ ├── twt.svg │ │ ├── uni.svg │ │ ├── usdc.png │ │ ├── usdc.svg │ │ ├── usdd.svg │ │ ├── usdt.png │ │ ├── usdt.svg │ │ ├── ust.png │ │ ├── ust.svg │ │ ├── vaave.png │ │ ├── vada.png │ │ ├── vai.svg │ │ ├── vrt.svg │ │ ├── wbeth.svg │ │ ├── wbnb.svg │ │ ├── win.svg │ │ ├── woo.svg │ │ ├── xrp.png │ │ ├── xrp.svg │ │ ├── xvs.png │ │ └── xvs.svg │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon.ico │ ├── icon.png │ ├── icon16.png │ ├── icon32.png │ ├── manifest.json │ ├── mstile-150x150.png │ ├── robots.txt │ └── share.png │ ├── src │ ├── api │ │ ├── constants.ts │ │ ├── hooks │ │ │ ├── useProposals.ts │ │ │ └── useVenusApi.ts │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils.ts │ ├── assets │ │ └── styles │ │ │ ├── index.css │ │ │ └── variables.css │ ├── components │ │ ├── App.module.css │ │ ├── App.tsx │ │ ├── Banner │ │ │ ├── Banner.module.css │ │ │ ├── Banner.tsx │ │ │ └── assets │ │ │ │ ├── arrow.svg │ │ │ │ ├── circles.svg │ │ │ │ ├── squares.svg │ │ │ │ └── unichainLogo.svg │ │ ├── Benefits │ │ │ ├── Benefits.module.css │ │ │ ├── Benefits.tsx │ │ │ └── assets │ │ │ │ ├── 1.svg │ │ │ │ ├── 2.svg │ │ │ │ └── 3.svg │ │ ├── Container │ │ │ ├── Container.module.css │ │ │ └── Container.tsx │ │ ├── Footer │ │ │ ├── Footer.module.css │ │ │ ├── Footer.tsx │ │ │ ├── SocialLinks.module.css │ │ │ ├── SocialLinks.tsx │ │ │ └── assets │ │ │ │ ├── discord.svg │ │ │ │ ├── github.svg │ │ │ │ ├── logoSmall.svg │ │ │ │ ├── telegram.svg │ │ │ │ ├── venus.svg │ │ │ │ └── x.svg │ │ ├── Governance │ │ │ ├── Governance.module.css │ │ │ ├── assets │ │ │ │ └── planets.png │ │ │ └── index.tsx │ │ ├── Header │ │ │ ├── Header.module.css │ │ │ ├── Header.tsx │ │ │ ├── MenuMobile.module.css │ │ │ ├── MenuMobile.tsx │ │ │ └── assets │ │ │ │ ├── iconArrow.svg │ │ │ │ └── logo.svg │ │ ├── Link │ │ │ ├── Link.tsx │ │ │ └── LinkLaunchApp.tsx │ │ ├── MainContent │ │ │ ├── Background.module.css │ │ │ ├── Background.tsx │ │ │ ├── Intro.module.css │ │ │ ├── Intro.tsx │ │ │ ├── MainContent.module.css │ │ │ ├── MainContent.tsx │ │ │ └── assets │ │ │ │ ├── arrow.svg │ │ │ │ ├── bg.png │ │ │ │ └── bgMobile.png │ │ ├── Market │ │ │ ├── Market.module.css │ │ │ └── Market.tsx │ │ ├── NavigationLinks │ │ │ ├── NavigationLinks.module.css │ │ │ └── NavigationLinks.tsx │ │ ├── Protection │ │ │ ├── Protection.module.css │ │ │ ├── assets │ │ │ │ ├── bugBounty.png │ │ │ │ └── protection.png │ │ │ └── index.tsx │ │ ├── Safety │ │ │ ├── Auditor.tsx │ │ │ ├── OtherAuditors.tsx │ │ │ ├── Safety.module.css │ │ │ ├── SafetyScore.tsx │ │ │ ├── assets │ │ │ │ ├── arrow.svg │ │ │ │ ├── cantinaLogo.svg │ │ │ │ ├── cantinaLogoGray.svg │ │ │ │ ├── certikLogo.svg │ │ │ │ ├── certikLogoGray.svg │ │ │ │ ├── code4renaLogo.svg │ │ │ │ ├── code4renaLogoGray.svg │ │ │ │ ├── openZeppelinLogo.svg │ │ │ │ ├── openZeppelinLogoGray.svg │ │ │ │ ├── peckShieldLogo.svg │ │ │ │ ├── peckShieldLogoGray.svg │ │ │ │ ├── pessimisticLogo.svg │ │ │ │ ├── pessimisticLogoGray.svg │ │ │ │ ├── quantstampLogo.svg │ │ │ │ ├── quantstampLogoGray.svg │ │ │ │ ├── score.svg │ │ │ │ └── score90.svg │ │ │ └── index.tsx │ │ ├── VenusPrime │ │ │ ├── VenusPrime.module.css │ │ │ ├── assets │ │ │ │ ├── venusPrimeLogo1280.png │ │ │ │ ├── venusPrimeLogo375.png │ │ │ │ ├── venusPrimeLogo640.png │ │ │ │ └── venusPrimeLogo840.png │ │ │ └── index.tsx │ │ └── Wallets │ │ │ ├── Wallets.module.css │ │ │ ├── assets │ │ │ ├── binance.svg │ │ │ ├── brave.svg │ │ │ ├── foxWallet.svg │ │ │ ├── gate.svg │ │ │ ├── infinityWallet.svg │ │ │ ├── ledger.svg │ │ │ ├── metaMask.svg │ │ │ ├── okx.svg │ │ │ ├── rabbyWallet.svg │ │ │ ├── rivo.svg │ │ │ ├── safePal.svg │ │ │ └── trust.svg │ │ │ └── index.tsx │ ├── constants │ │ └── production.ts │ ├── context │ │ └── index.tsx │ ├── index.tsx │ └── types │ │ └── global.d.ts │ ├── tailwind.config.ts │ ├── tsconfig.json │ ├── vite-env.d.ts │ └── vite.config.mts ├── biome.json ├── commitlint.config.js ├── configs ├── stylelint │ ├── CHANGELOG.md │ ├── base.js │ └── package.json └── typescript │ ├── base.json │ └── package.json ├── docker-compose.yaml ├── ecosystem.json ├── nginx_default.conf ├── package.json ├── packages ├── chains │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ │ ├── chainMetadata.ts │ │ ├── img │ │ │ ├── chains │ │ │ │ ├── arbitrum.svg │ │ │ │ ├── base.svg │ │ │ │ ├── berachain.svg │ │ │ │ ├── bsc.svg │ │ │ │ ├── eth.svg │ │ │ │ ├── opbnb.svg │ │ │ │ ├── optimism.svg │ │ │ │ ├── unichain.svg │ │ │ │ └── zkSync.svg │ │ │ └── tokens │ │ │ │ ├── bnb.svg │ │ │ │ └── eth.svg │ │ ├── index.ts │ │ └── types.ts │ └── tsconfig.json └── ui │ ├── CHANGELOG.md │ ├── README.md │ ├── package.json │ ├── src │ ├── components │ │ ├── Button │ │ │ ├── index.stories.tsx │ │ │ └── index.tsx │ │ └── Spinner │ │ │ ├── index.stories.tsx │ │ │ ├── index.tsx │ │ │ └── spinnerAnimation.gif │ ├── fonts │ │ ├── bebasNeue │ │ │ ├── bebasNeue.ttf │ │ │ ├── bebasNeue.woff │ │ │ ├── bebasNeue.woff2 │ │ │ └── index.css │ │ ├── inconsolata │ │ │ ├── inconsolataSemiBold.eot │ │ │ ├── inconsolataSemiBold.ttf │ │ │ ├── inconsolataSemiBold.woff │ │ │ ├── inconsolataSemiBold.woff2 │ │ │ └── index.css │ │ └── proximaNova │ │ │ ├── ProximaNova-Medium.ttf │ │ │ ├── index.css │ │ │ ├── proximaNovaBold.ttf │ │ │ ├── proximaNovaBold.woff │ │ │ ├── proximaNovaBold.woff2 │ │ │ ├── proximaNovaBoldIt.ttf │ │ │ ├── proximaNovaBoldIt.woff │ │ │ ├── proximaNovaBoldIt.woff2 │ │ │ ├── proximaNovaMedium.woff │ │ │ ├── proximaNovaMedium.woff2 │ │ │ ├── proximaNovaRegular.ttf │ │ │ ├── proximaNovaRegular.woff │ │ │ ├── proximaNovaRegular.woff2 │ │ │ ├── proximaNovaRegularIt.ttf │ │ │ ├── proximaNovaRegularIt.woff │ │ │ ├── proximaNovaRegularIt.woff2 │ │ │ ├── proximaNovaSemibold.ttf │ │ │ ├── proximaNovaSemibold.woff │ │ │ ├── proximaNovaSemibold.woff2 │ │ │ ├── proximaNovaSemiboldIt.ttf │ │ │ ├── proximaNovaSemiboldIt.woff │ │ │ └── proximaNovaSemiboldIt.woff2 │ ├── index.ts │ ├── tailwind.config.ts │ ├── theme.css │ ├── theme.ts │ └── utilities │ │ └── cn │ │ └── index.ts │ └── tsconfig.json ├── pull_request_template.md ├── turbo.json └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/preset-env", "@babel/preset-react", "@babel/preset-typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /.changeset/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/@changesets/config@3.0.0/schema.json", 3 | "changelog": "@changesets/cli/changelog", 4 | "commit": false, 5 | "fixed": [], 6 | "linked": [], 7 | "access": "public", 8 | "baseBranch": "main", 9 | "updateInternalDependencies": "patch", 10 | "ignore": [] 11 | } 12 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Jira ticket(s) 2 | 3 | VEN-XXX 4 | 5 | ## Changes 6 | 7 | ### [evm app](https://github.com/VenusProtocol/venus-protocol-interface/tree/main/apps/evm/) 8 | - 9 | 10 | ### [landing app](https://github.com/VenusProtocol/venus-protocol-interface/tree/main/apps/landing/) 11 | - 12 | 13 | ### [chains package](https://github.com/VenusProtocol/venus-protocol-interface/tree/main/apps/chains/) 14 | - 15 | 16 | ### [UI package](https://github.com/VenusProtocol/venus-protocol-interface/tree/main/apps/ui/) 17 | - 18 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | updates: 4 | - package-ecosystem: 'npm' 5 | directory: '/' 6 | versioning-strategy: 'widen' 7 | schedule: 8 | interval: 'daily' 9 | -------------------------------------------------------------------------------- /.github/workflows/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Jira ticket(s) 2 | 3 | VEN-XXX 4 | 5 | ## Changes 6 | 7 | ### [evm app](/apps/evm/) 8 | - 9 | 10 | ### [landing app](/apps/landing/) 11 | - 12 | 13 | ### [chains package](/packages/chains/) 14 | - 15 | 16 | ### [UI package](/packages/ui/) 17 | - 18 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | 2 | yarn commitlint --edit "${1}" 3 | -------------------------------------------------------------------------------- /.husky/pre-push: -------------------------------------------------------------------------------- 1 | 2 | yarn validate-branch-name 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v20.11.1 2 | -------------------------------------------------------------------------------- /.validate-branch-namerc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | pattern: '^(main){1}$|^(feature|feat|fix|hotfix|chore|refactor|ci|changeset-release)/[a-z-]+', 3 | }; 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.organizeImports.biome": "explicit" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.yarn/install-state.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/.yarn/install-state.gz -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | -------------------------------------------------------------------------------- /Dockerfile.local: -------------------------------------------------------------------------------- 1 | FROM node:12.19.0-alpine3.12 2 | 3 | RUN apk add --update --no-cache python3 git openssh 4 | 5 | WORKDIR /usr/app 6 | 7 | EXPOSE 3001 -------------------------------------------------------------------------------- /apps/evm/.env.template: -------------------------------------------------------------------------------- 1 | # Environment 2 | VITE_NETWORK=testnet 3 | VITE_ENV=local 4 | 5 | # Error reporting 6 | VITE_SENTRY_DSN= 7 | 8 | # Analytics 9 | VITE_POSTHOG_API_KEY= 10 | VITE_POSTHOG_HOST_URL= 11 | 12 | # Zyfi 13 | VITE_ZYFI_API_KEY= 14 | 15 | # Alchemy 16 | VITE_ALCHEMY_API_KEY= 17 | 18 | # NodeReal 19 | VITE_NODE_REAL_API_KEY= 20 | 21 | # The Graph 22 | VITE_THE_GRAPH_API_KEY= 23 | -------------------------------------------------------------------------------- /apps/evm/.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled outputs 2 | public/version.json 3 | 4 | # Subgraph types, automatically generated by Graph Client (https://github.com/graphprotocol/graph-client) 5 | src/clients/subgraph/gql/mainnet.ts 6 | src/clients/subgraph/gql/testnet.ts 7 | 8 | src/constants/version.ts 9 | -------------------------------------------------------------------------------- /apps/evm/.graphclientrc.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/.graphclientrc.yml -------------------------------------------------------------------------------- /apps/evm/.stylelintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@venusprotocol/stylelint-config/base.js'], 3 | }; 4 | -------------------------------------------------------------------------------- /apps/evm/i18next-parser.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | defaultValue: 'TRANSLATION NEEDED', 3 | locales: ['en'], 4 | output: './src/libs/translations/translations/$LOCALE.json', 5 | input: './src/**/*.{ts,tsx}', 6 | sort: true, 7 | createOldCatalogs: false, 8 | }; 9 | -------------------------------------------------------------------------------- /apps/evm/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /apps/evm/public/_redirects: -------------------------------------------------------------------------------- 1 | /assets/* /assets/:splat 200 2 | /version.json /version.json 200 3 | /manifest.json /manifest.json 200 4 | /#/* /#/:splat 200 5 | /* /#/:splat 301 -------------------------------------------------------------------------------- /apps/evm/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Venus Protocol", 3 | "name": "Venus Protocol", 4 | "description": "Venus is a decentralized finance (DeFi) algorithmic money market protocol on EVM networks", 5 | "iconPath": "logo.svg", 6 | "start_url": ".", 7 | "display": "standalone", 8 | "theme_color": "#3A78FF", 9 | "background_color": "#121620" 10 | } 11 | -------------------------------------------------------------------------------- /apps/evm/src/App/MuiThemeProvider/index.tsx: -------------------------------------------------------------------------------- 1 | import { CssBaseline } from '@mui/material'; 2 | import { ThemeProvider } from '@mui/material/styles'; 3 | import type { ReactNode } from 'react'; 4 | 5 | import mainTheme from './muiTheme'; 6 | 7 | export function MuiThemeProvider({ children }: { children: ReactNode }) { 8 | return ( 9 | 10 | 11 | {children} 12 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /apps/evm/src/App/Routes/PageSuspense/index.tsx: -------------------------------------------------------------------------------- 1 | import { Suspense } from 'react'; 2 | 3 | import { Spinner } from 'components'; 4 | 5 | export interface PageSuspenseProps { 6 | children: React.ReactNode; 7 | } 8 | 9 | const PageSuspense: React.FC = ({ children }) => ( 10 | }>{children} 11 | ); 12 | 13 | export default PageSuspense; 14 | -------------------------------------------------------------------------------- /apps/evm/src/App/ThemeHandler/index.tsx: -------------------------------------------------------------------------------- 1 | import { useIsOnUnichain } from 'hooks/useIsOnUnichain'; 2 | 3 | import { useEffect } from 'react'; 4 | 5 | export const ThemeHandler: React.FC = () => { 6 | const isOnUnichain = useIsOnUnichain(); 7 | 8 | // Change theme based on active chain 9 | useEffect(() => { 10 | document.body.classList.remove('unichain-theme'); 11 | 12 | if (isOnUnichain) { 13 | document.body.classList.add('unichain-theme'); 14 | } 15 | }, [isOnUnichain]); 16 | 17 | return undefined; 18 | }; 19 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/CSSStub.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/api/voteSummary.json: -------------------------------------------------------------------------------- 1 | { 2 | "for": "6.05461e+23", 3 | "against": "0", 4 | "abstain": "0", 5 | "total": "6.05461e+23" 6 | } 7 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/contracts/xvsVault.ts: -------------------------------------------------------------------------------- 1 | const xvsVaultResponses = { 2 | poolLength: 5, 3 | totalAllocPoints: 100n, 4 | rewardTokenAmountsPerBlockOrSecond: 10000000n, 5 | pendingReward: 200000000n, 6 | }; 7 | 8 | export default xvsVaultResponses; 9 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/contracts/xvsVesting.ts: -------------------------------------------------------------------------------- 1 | const xvsVestingResponses = { 2 | withdrawableAmount: { 3 | totalWithdrawableAmount: 500000n, 4 | totalVestedAmount: 1000n, 5 | totalWithdrawnAmount: 0n, 6 | }, 7 | }; 8 | 9 | export default xvsVestingResponses; 10 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/models/address.ts: -------------------------------------------------------------------------------- 1 | const address = '0x3d759121234cd36F8124C21aFe1c6852d2bEd848'; 2 | 3 | export const altAddress = '0xa258a693A403b7e98fd05EE9e1558C760308cFC7'; 4 | 5 | export default address; 6 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/models/chains.ts: -------------------------------------------------------------------------------- 1 | export enum ChainId { 2 | BSC_MAINNET = 56, 3 | BSC_TESTNET = 97, 4 | ETHEREUM = 1, 5 | } 6 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/models/voterDetails.ts: -------------------------------------------------------------------------------- 1 | import formatVoterDetailsResponse from 'clients/api/queries/getVoterDetails/formatVoterDetailsResponse'; 2 | import { NULL_ADDRESS } from 'constants/address'; 3 | 4 | import voterDetailsResponse from '../api/voterDetails.json'; 5 | 6 | const voterDetails = formatVoterDetailsResponse(voterDetailsResponse, NULL_ADDRESS); 7 | 8 | export default voterDetails; 9 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/models/voterHistory.ts: -------------------------------------------------------------------------------- 1 | import formatVoterHistoryResponse from 'clients/api/queries/getVoterHistory/formatVoterHistoryResponse'; 2 | 3 | import type { GetVoterHistoryResponse } from 'clients/api/queries/getVoterHistory/types'; 4 | import voterHistoryResponse from '../api/voterHistory.json'; 5 | 6 | const voterHistory = formatVoterHistoryResponse(voterHistoryResponse as GetVoterHistoryResponse); 7 | 8 | export default voterHistory; 9 | -------------------------------------------------------------------------------- /apps/evm/src/__mocks__/models/voters.ts: -------------------------------------------------------------------------------- 1 | import formatToVoters from 'clients/api/queries/getVoters/formatToVoters'; 2 | 3 | import type { GetVotersApiResponse } from 'clients/api'; 4 | import votersResponse from '../api/voters.json'; 5 | 6 | const voters = formatToVoters({ payload: votersResponse as GetVotersApiResponse }); 7 | 8 | export default voters; 9 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/mutations/useCreateProposal/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`useCreateProposal > calls useSendTransaction with the correct parameters 2`] = ` 4 | [ 5 | [ 6 | { 7 | "queryKey": [ 8 | "GET_PROPOSALS", 9 | ], 10 | }, 11 | ], 12 | ] 13 | `; 14 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/mutations/useMintVai/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`useMintVai > calls useSendTransaction with correct parameters 2`] = ` 4 | [ 5 | [ 6 | { 7 | "queryKey": [ 8 | "GET_USER_VAI_BORROW_BALANCE", 9 | ], 10 | }, 11 | ], 12 | [ 13 | { 14 | "queryKey": [ 15 | "GET_V_TOKEN_BALANCES_ALL", 16 | ], 17 | }, 18 | ], 19 | ] 20 | `; 21 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/mutations/useQueueProposal/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`useQueueProposal > calls useSendTransaction with the correct parameters 2`] = ` 4 | [ 5 | [ 6 | { 7 | "queryKey": [ 8 | "GET_PROPOSALS", 9 | ], 10 | }, 11 | ], 12 | [ 13 | { 14 | "queryKey": [ 15 | "GET_PROPOSAL", 16 | { 17 | "id": 123, 18 | }, 19 | ], 20 | }, 21 | ], 22 | ] 23 | `; 24 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/mutations/useUpdatePoolDelegateStatus/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`useUpdatePoolDelegateStatus > calls useSendTransaction with the correct parameters 1`] = ` 4 | { 5 | "abi": Any, 6 | "address": "0x3d759121234cd36F8124C21aFe1c6852d2bEd848", 7 | "args": [ 8 | "0xa258a693A403b7e98fd05EE9e1558C760308cFC7", 9 | true, 10 | ], 11 | "functionName": "updateDelegate", 12 | } 13 | `; 14 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/mutations/useUpdatePoolDelegateStatus/__tests__/__snapshots__/useUpdatePoolDelegateStatus.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`useUpdatePoolDelegateStatus > calls useSendTransaction with the correct parameters 1`] = ` 4 | { 5 | "abi": Any, 6 | "address": "0x3d759121234cd36F8124C21aFe1c6852d2bEd848", 7 | "args": [ 8 | "0xa258a693A403b7e98fd05EE9e1558C760308cFC7", 9 | true, 10 | ], 11 | "functionName": "updateDelegate", 12 | } 13 | `; 14 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getBlockNumber/index.ts: -------------------------------------------------------------------------------- 1 | import type { PublicClient } from 'viem'; 2 | 3 | export interface GetBlockNumberInput { 4 | publicClient: PublicClient; 5 | } 6 | 7 | export interface GetBlockNumberOutput { 8 | blockNumber: number; 9 | } 10 | 11 | export const getBlockNumber = async ({ 12 | publicClient, 13 | }: GetBlockNumberInput): Promise => { 14 | const blockNumber = await publicClient.getBlockNumber(); 15 | 16 | return { 17 | blockNumber: +blockNumber.toString(), 18 | }; 19 | }; 20 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getLatestAppVersion/index.tsx: -------------------------------------------------------------------------------- 1 | export type GetLatestAppVersionOutput = { 2 | version?: string; 3 | }; 4 | 5 | export const PUBLIC_VERSION_FILE_URL = `${window.location.origin}/version.json`; 6 | 7 | export const getLatestAppVersion = async (): Promise => { 8 | const data = await fetch(PUBLIC_VERSION_FILE_URL); 9 | const { version } = await data.json(); 10 | 11 | return { 12 | version, 13 | }; 14 | }; 15 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getMintableVai/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getMintableVai > returns the mintable VAI amount on success 1`] = ` 4 | { 5 | "accountMintableVaiMantissa": "100000000000000", 6 | "vaiLiquidityMantissa": "900000000000000", 7 | } 8 | `; 9 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getPancakeSwapPairs/__tests__/generateTokenCombinationIds.spec.ts: -------------------------------------------------------------------------------- 1 | import fakeTokenCombinations from '__mocks__/models/tokenCombinations'; 2 | 3 | import generateTokenCombinationIds from '../generateTokenCombinationIds'; 4 | 5 | describe('generateTokenCombinationIds', () => { 6 | test('generates unique IDs for provided token combinations', async () => { 7 | const res = generateTokenCombinationIds(fakeTokenCombinations); 8 | 9 | expect(res).toMatchSnapshot(); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getPrimeDistributionForMarket/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getPrimeDistributionForMarket > returns the amount of rewards distributed for a given market 1`] = ` 4 | { 5 | "totalDistributedMantissa": "1000000000", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getProposalEta/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getProposalEta > returns ETA in correct format on success 1`] = ` 4 | { 5 | "eta": 2022-07-13T09:48:26.000Z, 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getProposalMinQuorumVotes/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getProposalMinQuorumVotes > returns proposal min quorum votes on success 1`] = ` 4 | { 5 | "proposalMinQuorumVotesMantissa": "1000000000000000000", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getTokenUsdPrice/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getTokenUsdPrice > returns token price in USD in the right format on success 1`] = ` 4 | { 5 | "tokenPriceUsd": "1", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getUserVaiBorrowBalance/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getUserVaiBorrowBalance > returns the VAI fee with interests 1`] = ` 4 | { 5 | "userVaiBorrowBalanceMantissa": "10000000000", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVTokenApySimulations/formatCurrentUtilizationRate.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | export interface FormatCurrentUtilizationRateInput { 4 | utilizationRatePercentage: bigint; 5 | } 6 | 7 | const DIVIDER = 10 ** 16; 8 | 9 | const formatCurrentUtilizationRate = ({ 10 | utilizationRatePercentage, 11 | }: FormatCurrentUtilizationRateInput) => 12 | new BigNumber(utilizationRatePercentage.toString()).dividedToIntegerBy(DIVIDER).toNumber(); 13 | 14 | export default formatCurrentUtilizationRate; 15 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVTokenUtilizationRate/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVTokenUtilizationRate > returns the utilization rate in the correct format on success for isolated pools 1`] = ` 4 | { 5 | "utilizationRatePercentage": 10, 6 | } 7 | `; 8 | 9 | exports[`getVTokenUtilizationRate > returns the utilization rate in the correct format on success for standard pools 1`] = ` 10 | { 11 | "utilizationRatePercentage": 10, 12 | } 13 | `; 14 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVaiRepayApr/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVaiRepayApr > returns VAI repay APR in the right format on success 1`] = ` 4 | { 5 | "repayAprPercentage": "100", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVaiTreasuryPercentage/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVaiTreasuryPercentage > returns VAI treasury percentage in the right format on success 1`] = ` 4 | { 5 | "percentage": "100", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVaiVaultPaused/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVaiVaultPaused > returns VAI vault paused status in the right format on success 1`] = ` 4 | { 5 | "isVaultPaused": true, 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVaiVaultUserInfo/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVaiVaultUserInfo > returns VAI vault user info in the right format on success 1`] = ` 4 | { 5 | "stakedVaiMantissa": "1000000000000000000", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVenusVaiVaultDailyRate/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVenusVaiVaultDailyRate > returns VAI vault daily rate in the right format on success 1`] = ` 4 | { 5 | "dailyRateMantissa": "2.88e+22", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVoteDelegateAddress/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVoteDelegateAddress > returns delegate address in the right format on success 1`] = ` 4 | { 5 | "delegateAddress": "0x3d759121234cd36F8124C21aFe1c6852d2bEd848", 6 | } 7 | `; 8 | 9 | exports[`getVoteDelegateAddress > returns undefined when no delegate is set 1`] = ` 10 | { 11 | "delegateAddress": undefined, 12 | } 13 | `; 14 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVoteReceipt/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVoteReceipt > returns undefined when no vote is cast 1`] = ` 4 | { 5 | "voteSupport": undefined, 6 | } 7 | `; 8 | 9 | exports[`getVoteReceipt > returns vote receipt in the right format on success 1`] = ` 10 | { 11 | "voteSupport": 1, 12 | } 13 | `; 14 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVoteSummary/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getVoteSummary > returns summary of votes 1`] = ` 4 | { 5 | "abstain": "0", 6 | "against": "0", 7 | "for": "6.05461e+23", 8 | "total": "6.05461e+23", 9 | } 10 | `; 11 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVoteSummary/formatToVoteSummary.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | import type { GetVoteSummaryApiResponse } from './types'; 4 | 5 | const formatToVoteSummary = ({ payload }: { payload: GetVoteSummaryApiResponse }) => ({ 6 | for: new BigNumber(payload.for), 7 | abstain: new BigNumber(payload.abstain), 8 | against: new BigNumber(payload.against), 9 | total: new BigNumber(payload.total), 10 | }); 11 | 12 | export default formatToVoteSummary; 13 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVoteSummary/types.ts: -------------------------------------------------------------------------------- 1 | import type BigNumber from 'bignumber.js'; 2 | 3 | export interface GetVoteSummaryInput { 4 | proposalId: number; 5 | } 6 | 7 | export interface GetVoteSummaryApiResponse { 8 | for: string; 9 | against: string; 10 | abstain: string; 11 | total: string; 12 | } 13 | 14 | export interface VoteSummary { 15 | for: BigNumber; 16 | against: BigNumber; 17 | abstain: BigNumber; 18 | total: BigNumber; 19 | } 20 | 21 | export type GetVoteSummaryOutput = VoteSummary; 22 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVoterAccounts/types.ts: -------------------------------------------------------------------------------- 1 | export interface GetVoterAccountsResponse { 2 | limit: number; 3 | page: number; 4 | total: number; 5 | result: { 6 | address: string; 7 | delegate: string | null; 8 | proposalsVoted: number; 9 | stakedVotesMantissa: string; 10 | votesMantissa: string; 11 | }[]; 12 | } 13 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getVoterDetails/types.ts: -------------------------------------------------------------------------------- 1 | export interface GetVoterDetailsResponse { 2 | balance: string; 3 | delegateCount: number; 4 | delegates: string; 5 | votes: string; 6 | txs: { 7 | category: string; 8 | event: string; 9 | transactionHash: string; 10 | logIndex: number; 11 | from: string; 12 | to: string; 13 | tokenAddress: string; 14 | amountMantissa: string; 15 | blockNumber: number; 16 | timestamp: number; 17 | }[]; 18 | } 19 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getXvsBridgeStatus/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getXvsBridgeStatus > returns the correct data 1`] = ` 4 | { 5 | "dailyLimitResetTimestamp": "1705273290", 6 | "maxDailyLimitUsd": "450", 7 | "maxSingleTransactionLimitUsd": "9", 8 | "totalTransferredLast24HourUsd": "9.310366874", 9 | } 10 | `; 11 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getXvsVaultPaused/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getXvsVaultPaused > returns whether the vault is paused, on success 1`] = ` 4 | { 5 | "isVaultPaused": true, 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getXvsVaultPoolInfo/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getXvsVaultPoolInfo > returns the pool info successfully 1`] = ` 4 | { 5 | "accRewardPerShare": "123456789", 6 | "allocationPoint": 5, 7 | "lastRewardBlock": 100000, 8 | "lockingPeriodMs": 200000, 9 | "stakedTokenAddress": "0xa258a693A403b7e98fd05EE9e1558C760308cFC7", 10 | } 11 | `; 12 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getXvsVaultUserInfo/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getXvsVaultUserInfo > returns user info related to XVS vault in correct format on success 1`] = ` 4 | { 5 | "pendingWithdrawalsTotalAmountMantissa": "2000000000000000000", 6 | "rewardDebtAmountMantissa": "1000000000000000000", 7 | "stakedAmountMantissa": "30000000000000000000", 8 | } 9 | `; 10 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queries/getXvsVaultUserPendingWithdrawalsFromBeforeUpgrade/__tests__/__snapshots__/index.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`getXvsVaultUserPendingWithdrawalsFromBeforeUpgrade > returns total amount of pending withdrawals before the contract upgrade on success 1`] = ` 4 | { 5 | "userPendingWithdrawalsFromBeforeUpgradeMantissa": "1000", 6 | } 7 | `; 8 | -------------------------------------------------------------------------------- /apps/evm/src/clients/api/queryClient.ts: -------------------------------------------------------------------------------- 1 | import { QueryClient } from '@tanstack/react-query'; 2 | 3 | const queryClient = new QueryClient({ 4 | defaultOptions: { 5 | queries: { 6 | // Set a stale time of 10 seconds so query results don't get wiped out of 7 | // the cache instantly after their hook unmounts (see documentation for 8 | // more info: https://react-query.tanstack.com/guides/important-defaults) 9 | staleTime: 10000, 10 | }, 11 | }, 12 | }); 13 | 14 | export default queryClient; 15 | -------------------------------------------------------------------------------- /apps/evm/src/clients/subgraph/index.ts: -------------------------------------------------------------------------------- 1 | export * from './queries/governanceBsc/getBscProposals'; 2 | export * from './queries/governanceBsc/getBscProposal'; 3 | export * from './queries/governanceNonBsc/getNonBscProposals'; 4 | export * from './utilities/formatToProposal'; 5 | export * from './utilities/enrichRemoteProposals'; 6 | -------------------------------------------------------------------------------- /apps/evm/src/clients/subgraph/queries/governanceBsc/getBscProposal/getBscProposal.graphql: -------------------------------------------------------------------------------- 1 | query Proposal($id: ID!) { 2 | proposal(id: $id) { 3 | ...BscProposal 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /apps/evm/src/clients/subgraph/queries/governanceBsc/getBscProposals/getBscProposals.graphql: -------------------------------------------------------------------------------- 1 | query Proposals($limit: Int = 10, $skip: Int = 0, $where: Proposal_filter) { 2 | proposals(first: $limit, skip: $skip, where: $where, orderBy: startBlock, orderDirection: desc) { 3 | ...BscProposal 4 | } 5 | 6 | total: proposals(where: $where) { 7 | id 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/evm/src/clients/subgraph/queries/governanceNonBsc/fragments/nonBscProposal.graphql: -------------------------------------------------------------------------------- 1 | fragment NonBscProposal on Proposal { 2 | id 3 | proposalId 4 | executionEta 5 | 6 | queued { 7 | id 8 | timestamp 9 | txHash 10 | } 11 | 12 | canceled { 13 | id 14 | timestamp 15 | txHash 16 | } 17 | 18 | executed { 19 | id 20 | timestamp 21 | txHash 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /apps/evm/src/clients/subgraph/queries/governanceNonBsc/getNonBscProposals/getNonBscProposals.graphql: -------------------------------------------------------------------------------- 1 | query Proposals($where: Proposal_filter) { 2 | proposals(where: $where) { 3 | ...NonBscProposal 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /apps/evm/src/clients/subgraph/utilities/enrichRemoteProposals/__tests__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import bscProposalsResponse from '__mocks__/subgraph/bscProposals.json'; 2 | import { enrichRemoteProposals } from '..'; 3 | 4 | describe('enrichRemoteProposals', () => { 5 | it('returns remote proposals in the correct format', async () => { 6 | const res = await enrichRemoteProposals({ 7 | gqlRemoteProposals: bscProposalsResponse.proposals[0].remoteProposals, 8 | }); 9 | 10 | expect(res).toMatchSnapshot(); 11 | }); 12 | }); 13 | -------------------------------------------------------------------------------- /apps/evm/src/components/ActiveVotingProgress/styles.tsx: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | return { 7 | votesWrapper: css` 8 | display: flex; 9 | flex-direction: column; 10 | width: 100%; 11 | `, 12 | bar: css` 13 | :nth-of-type(2) { 14 | margin: ${theme.spacing(6)} 0; 15 | } 16 | `, 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /apps/evm/src/components/Card/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta } from '@storybook/react'; 2 | 3 | import { Card } from '.'; 4 | 5 | export default { 6 | title: 'Components/Card', 7 | component: Card, 8 | } as Meta; 9 | 10 | export const Default = () => Some content; 11 | -------------------------------------------------------------------------------- /apps/evm/src/components/Card/index.tsx: -------------------------------------------------------------------------------- 1 | import { Slot } from '@radix-ui/react-slot'; 2 | import { cn } from '@venusprotocol/ui'; 3 | 4 | export interface CardProps extends React.HTMLAttributes { 5 | asChild?: boolean; 6 | } 7 | 8 | export const Card: React.FC = ({ className, asChild = false, ...otherProps }) => { 9 | const Comp = asChild ? Slot : 'div'; 10 | 11 | return ( 12 | 16 | ); 17 | }; 18 | -------------------------------------------------------------------------------- /apps/evm/src/components/Carousel/CarouselItem/index.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@venusprotocol/ui'; 2 | import { forwardRef } from 'react'; 3 | 4 | export const CarouselItem = forwardRef>( 5 | ({ className, ...props }, ref) => ( 6 |
13 | ), 14 | ); 15 | -------------------------------------------------------------------------------- /apps/evm/src/components/Carousel/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | const MockComponent: React.FC<{ children?: React.ReactNode }> = ({ children }) => <>{children}; 2 | 3 | export const Carousel = MockComponent; 4 | 5 | export const CarouselItem = MockComponent; 6 | -------------------------------------------------------------------------------- /apps/evm/src/components/Chip/types.ts: -------------------------------------------------------------------------------- 1 | import type { ProposalType } from 'types'; 2 | 3 | import type { IconName } from '../Icon'; 4 | 5 | export type ChipType = 'default' | 'active' | 'inactive' | 'blue' | 'error'; 6 | 7 | export interface ChipProps { 8 | text: string; 9 | type?: ChipType; 10 | className?: string; 11 | iconName?: IconName; 12 | } 13 | 14 | export interface ProposalTypeChipProps extends Omit { 15 | proposalType: ProposalType.FAST_TRACK | ProposalType.CRITICAL; 16 | } 17 | -------------------------------------------------------------------------------- /apps/evm/src/components/Countdown/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta, StoryObj } from '@storybook/react'; 2 | 3 | import { Countdown } from '.'; 4 | 5 | export default { 6 | title: 'Components/Countdown', 7 | component: Countdown, 8 | args: { 9 | date: new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 2), 10 | }, 11 | } as Meta; 12 | 13 | type Story = StoryObj; 14 | 15 | export const Default: Story = {}; 16 | -------------------------------------------------------------------------------- /apps/evm/src/components/Delimiter/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta } from '@storybook/react'; 2 | 3 | import { Delimiter } from '.'; 4 | 5 | export default { 6 | title: 'Components/Delimiter', 7 | component: Delimiter, 8 | } as Meta; 9 | 10 | export const Default = () => ( 11 | <> 12 | Some text 13 | 14 | and some more text 15 | 16 | ); 17 | -------------------------------------------------------------------------------- /apps/evm/src/components/Delimiter/index.tsx: -------------------------------------------------------------------------------- 1 | /** @jsxImportSource @emotion/react */ 2 | import { cn } from '@venusprotocol/ui'; 3 | 4 | interface DelimiterProps { 5 | className?: string; 6 | } 7 | 8 | export const Delimiter = ({ className }: DelimiterProps) => ( 9 |
10 | ); 11 | -------------------------------------------------------------------------------- /apps/evm/src/components/Dropdown/renderLabel.tsx: -------------------------------------------------------------------------------- 1 | export const renderLabel = ({ 2 | label, 3 | isRenderedInButton = false, 4 | }: { 5 | label: 6 | | string 7 | | React.ReactNode 8 | | ((context: { isRenderedInButton: boolean }) => string | React.ReactNode); 9 | isRenderedInButton?: boolean; 10 | }) => { 11 | if (typeof label === 'function') { 12 | return label({ isRenderedInButton }); 13 | } 14 | 15 | return label; 16 | }; 17 | -------------------------------------------------------------------------------- /apps/evm/src/components/EllipseAddress/types.ts: -------------------------------------------------------------------------------- 1 | import type { BREAKPOINTS } from 'App/MuiThemeProvider/muiTheme'; 2 | 3 | export type Breakpoint = keyof typeof BREAKPOINTS.values; 4 | -------------------------------------------------------------------------------- /apps/evm/src/components/ErrorState/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta, StoryObj } from '@storybook/react'; 2 | import noop from 'noop-ts'; 3 | 4 | import { ErrorState } from '.'; 5 | 6 | export default { 7 | title: 'Components/ErrorState', 8 | component: ErrorState, 9 | args: { 10 | message: 'Message', 11 | button: { 12 | label: 'Button', 13 | onClick: noop, 14 | }, 15 | }, 16 | } as Meta; 17 | 18 | type Story = StoryObj; 19 | 20 | export const Default: Story = {}; 21 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/arrowRight.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgArrowRight = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ); 8 | 9 | export default SvgArrowRight; 10 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/arrowShaft.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgArrowShaft = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ); 8 | 9 | export default SvgArrowShaft; 10 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/burger.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgBurger = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ); 8 | 9 | export default SvgBurger; 10 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/chevronLeft.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgChevronLeft = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ); 8 | 9 | export default SvgChevronLeft; 10 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/chevronRight.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgChevronRight = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ); 8 | 9 | export default SvgChevronRight; 10 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/convert.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgConvert = (props: SVGProps) => ( 4 | 5 | 12 | 13 | ); 14 | 15 | export default SvgConvert; 16 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/copy.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgCopy = (props: SVGProps) => ( 4 | 5 | 9 | 10 | ); 11 | 12 | export default SvgCopy; 13 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/exclamation.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgExclamation = (props: SVGProps) => ( 4 | 5 | 6 | 7 | 8 | ); 9 | 10 | export default SvgExclamation; 11 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/longArrow.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgLongArrow = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ); 8 | 9 | export default SvgLongArrow; 10 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/mask.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgMask = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ); 8 | 9 | export default SvgMask; 10 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/shield.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgShield = (props: SVGProps) => ( 4 | 5 | 9 | 10 | 11 | ); 12 | 13 | export default SvgShield; 14 | -------------------------------------------------------------------------------- /apps/evm/src/components/Icon/icons/sort.tsx: -------------------------------------------------------------------------------- 1 | import type { SVGProps } from 'react'; 2 | 3 | const SvgSort = (props: SVGProps) => ( 4 | 5 | 6 | 7 | ); 8 | 9 | export default SvgSort; 10 | -------------------------------------------------------------------------------- /apps/evm/src/components/InfoIcon/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta } from '@storybook/react'; 2 | 3 | import { InfoIcon } from '.'; 4 | 5 | export default { 6 | title: 'Components/InfoIcon', 7 | component: InfoIcon, 8 | } as Meta; 9 | 10 | export const Default = () => ; 11 | -------------------------------------------------------------------------------- /apps/evm/src/components/LayeredValues/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta } from '@storybook/react'; 2 | 3 | import LayeredValue from '.'; 4 | 5 | export default { 6 | title: 'Components/LayeredValue', 7 | component: LayeredValue, 8 | } as Meta; 9 | 10 | export const Default = () => ; 11 | -------------------------------------------------------------------------------- /apps/evm/src/components/LayeredValues/index.tsx: -------------------------------------------------------------------------------- 1 | export interface LayeredValuesProps { 2 | topValue: string | number; 3 | bottomValue: string | number; 4 | className?: string; 5 | } 6 | 7 | export const LayeredValues: React.FC = ({ 8 | topValue, 9 | bottomValue, 10 | className, 11 | }) => ( 12 |
13 |

{topValue}

14 |

{bottomValue}

15 |
16 | ); 17 | 18 | export default LayeredValues; 19 | -------------------------------------------------------------------------------- /apps/evm/src/components/MarkdownViewer/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta } from '@storybook/react'; 2 | 3 | import { MarkdownViewer } from '.'; 4 | 5 | export default { 6 | title: 'Components/Markdown/Viewer', 7 | component: MarkdownViewer, 8 | } as Meta; 9 | 10 | export const Default = () => ( 11 | 12 | ); 13 | -------------------------------------------------------------------------------- /apps/evm/src/components/Notice/types.ts: -------------------------------------------------------------------------------- 1 | import type { ReactElement } from 'react'; 2 | 3 | export type NoticeVariant = 'info' | 'loading' | 'error' | 'success' | 'warning'; 4 | 5 | export interface NoticeProps extends Omit, 'title'> { 6 | description?: string | ReactElement; 7 | title?: string | ReactElement; 8 | condensed?: boolean; 9 | variant?: NoticeVariant; 10 | onClose?: () => void; 11 | } 12 | -------------------------------------------------------------------------------- /apps/evm/src/components/Page/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta, StoryObj } from '@storybook/react'; 2 | 3 | import { Page } from '.'; 4 | 5 | export default { 6 | title: 'Components/Page', 7 | component: Page, 8 | args: { 9 | indexWithSearchEngines: false, 10 | children: 'Content', 11 | }, 12 | } as Meta; 13 | 14 | type Story = StoryObj; 15 | 16 | export const Default: Story = {}; 17 | -------------------------------------------------------------------------------- /apps/evm/src/components/Page/index.tsx: -------------------------------------------------------------------------------- 1 | import { Helmet } from 'react-helmet'; 2 | 3 | export interface PageProps { 4 | children: React.ReactNode; 5 | indexWithSearchEngines?: boolean; 6 | } 7 | 8 | export const Page: React.FC = ({ children, indexWithSearchEngines = true }) => ( 9 | <> 10 | {!indexWithSearchEngines && ( 11 | 12 | 13 | 14 | )} 15 | 16 | {children} 17 | 18 | ); 19 | -------------------------------------------------------------------------------- /apps/evm/src/components/Pill/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta, StoryObj } from '@storybook/react'; 2 | 3 | import { Pill } from '.'; 4 | 5 | export default { 6 | title: 'Components/Pill', 7 | component: Pill, 8 | args: { 9 | children: 'Content', 10 | }, 11 | } as Meta; 12 | 13 | type Story = StoryObj; 14 | 15 | export const Default: Story = {}; 16 | -------------------------------------------------------------------------------- /apps/evm/src/components/Select/mark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/evm/src/components/TokenGroup/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | 7 | return { 8 | container: css` 9 | display: flex; 10 | align-items: center; 11 | `, 12 | token: css` 13 | margin-right: ${theme.spacing(1)}; 14 | `, 15 | leftoverCount: css` 16 | color: ${theme.palette.text.primary}; 17 | `, 18 | }; 19 | }; 20 | -------------------------------------------------------------------------------- /apps/evm/src/components/TokenIcon/index.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@venusprotocol/ui'; 2 | import type { Token } from 'types'; 3 | 4 | export interface TokenIconProps { 5 | token: Token; 6 | className?: string; 7 | } 8 | 9 | export const TokenIcon: React.FC = ({ className, token }) => ( 10 | {token.symbol} 11 | ); 12 | -------------------------------------------------------------------------------- /apps/evm/src/components/TokenIconWithSymbol/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta } from '@storybook/react'; 2 | 3 | import { xvs } from '__mocks__/models/tokens'; 4 | 5 | import { TokenIconWithSymbol } from '.'; 6 | 7 | export default { 8 | title: 'Components/TokenIconWithSymbol', 9 | component: TokenIconWithSymbol, 10 | } as Meta; 11 | 12 | export const Default = () => ; 13 | -------------------------------------------------------------------------------- /apps/evm/src/components/Tooltip/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta, StoryObj } from '@storybook/react'; 2 | 3 | import { Tooltip } from '.'; 4 | 5 | export default { 6 | title: 'Components/Tooltip', 7 | component: Tooltip, 8 | args: { 9 | children: 'Content', 10 | title: 'Title', 11 | placement: 'top', 12 | }, 13 | } as Meta; 14 | 15 | type Story = StoryObj; 16 | 17 | export const Default: Story = {}; 18 | -------------------------------------------------------------------------------- /apps/evm/src/components/Username/UsernameSpan.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@venusprotocol/ui'; 2 | 3 | interface UsernameSpanProps { 4 | className?: string; 5 | username: string; 6 | } 7 | 8 | const UsernameSpan = ({ className, username }: UsernameSpanProps) => ( 9 | {username} 10 | ); 11 | 12 | export default UsernameSpan; 13 | -------------------------------------------------------------------------------- /apps/evm/src/components/ValueUpdate/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta } from '@storybook/react'; 2 | 3 | import { ValueUpdate } from '.'; 4 | 5 | export default { 6 | title: 'Components/ValueUpdate', 7 | component: ValueUpdate, 8 | } as Meta; 9 | 10 | export const Increase = () => ; 11 | 12 | export const Decrease = () => ; 13 | 14 | export const Same = () => ; 15 | -------------------------------------------------------------------------------- /apps/evm/src/config/apiUrls.ts: -------------------------------------------------------------------------------- 1 | import type { Network } from 'types'; 2 | 3 | export const apiUrls: { 4 | [key in Network]: string; 5 | } = { 6 | testnet: 'https://testnetapi.venus.io', 7 | mainnet: 'https://api.venus.io', 8 | 'mainnet-preview': 'https://api-preview.venus.io', 9 | }; 10 | -------------------------------------------------------------------------------- /apps/evm/src/constants/address.ts: -------------------------------------------------------------------------------- 1 | export const NULL_ADDRESS = '0x0000000000000000000000000000000000000000' as const; 2 | export const NATIVE_TOKEN_ADDRESS = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' as const; 3 | -------------------------------------------------------------------------------- /apps/evm/src/constants/automaticallyGeneratedFileWarningMessage.ts: -------------------------------------------------------------------------------- 1 | export const AUTOMATICALLY_GENERATED_FILE_WARNING_MESSAGE = 2 | '/* Automatically generated file, do not update manually */'; 3 | -------------------------------------------------------------------------------- /apps/evm/src/constants/compoundMantissa.ts: -------------------------------------------------------------------------------- 1 | // Specific to the Compound protocol (see https://compound.finance/docs) 2 | export const COMPOUND_DECIMALS = 18; 3 | export const COMPOUND_MANTISSA = 1e18; 4 | -------------------------------------------------------------------------------- /apps/evm/src/constants/createProposalThresholdMantissa.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | const CREATE_PROPOSAL_THRESHOLD_MANTISSA = new BigNumber('300000000000000000000000'); 4 | 5 | export default CREATE_PROPOSAL_THRESHOLD_MANTISSA; 6 | -------------------------------------------------------------------------------- /apps/evm/src/constants/defaultRefetchInterval.ts: -------------------------------------------------------------------------------- 1 | export const DEFAULT_REFETCH_INTERVAL_MS = 9000; 2 | -------------------------------------------------------------------------------- /apps/evm/src/constants/gasLess.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | import { ChainId } from 'types'; 3 | import type { Address } from 'viem'; 4 | 5 | export const MIN_PAYMASTER_BALANCE_MANTISSA = new BigNumber(10).pow(15); 6 | 7 | export const zyFiWalletAddresses: Partial> = { 8 | [ChainId.ZKSYNC_MAINNET]: '0x5768CDebd229F690F4bC045AF8e140FC97Ce275D', 9 | [ChainId.ZKSYNC_SEPOLIA]: '0x2Ce1d0ffD7E869D9DF33e28552b12DdDed326706', 10 | }; 11 | -------------------------------------------------------------------------------- /apps/evm/src/constants/governance.ts: -------------------------------------------------------------------------------- 1 | export const PROPOSAL_EXECUTION_GRACE_PERIOD_MS = 14 * 24 * 60 * 60 * 1000; // 14 days in milliseconds 2 | -------------------------------------------------------------------------------- /apps/evm/src/constants/healthFactor.ts: -------------------------------------------------------------------------------- 1 | export const HEALTH_FACTOR_SAFE_THRESHOLD = 2; 2 | export const HEALTH_FACTOR_MODERATE_THRESHOLD = 1.25; 3 | export const HEALTH_FACTOR_LIQUIDATION_THRESHOLD = 1; 4 | 5 | export const HEALTH_FACTOR_SAFE_MAX_THRESHOLD = 1.3; 6 | -------------------------------------------------------------------------------- /apps/evm/src/constants/indexedVotingSupportNames.ts: -------------------------------------------------------------------------------- 1 | const indexedVotingSupportNames = ['AGAINST', 'FOR', 'ABSTAIN']; 2 | 3 | export default indexedVotingSupportNames; 4 | -------------------------------------------------------------------------------- /apps/evm/src/constants/layout.ts: -------------------------------------------------------------------------------- 1 | export const PAGE_CONTAINER_ID = 'page-container'; 2 | -------------------------------------------------------------------------------- /apps/evm/src/constants/maxUint256.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | const MAX_UINT256 = new BigNumber(2).pow(256).minus(1); 4 | 5 | export default MAX_UINT256; 6 | -------------------------------------------------------------------------------- /apps/evm/src/constants/numbers.ts: -------------------------------------------------------------------------------- 1 | export const ONE_THOUSAND = 1000; 2 | export const ONE_MILLION = ONE_THOUSAND * 1000; 3 | export const ONE_BILLION = ONE_MILLION * 1000; 4 | export const ONE_TRILLION = ONE_BILLION * 1000; 5 | -------------------------------------------------------------------------------- /apps/evm/src/constants/placeholderKey.ts: -------------------------------------------------------------------------------- 1 | const PLACEHOLDER_KEY = '-'; 2 | 3 | export default PLACEHOLDER_KEY; 4 | -------------------------------------------------------------------------------- /apps/evm/src/constants/production.ts: -------------------------------------------------------------------------------- 1 | export const MAIN_PRODUCTION_HOST = 'app.venus.io'; 2 | -------------------------------------------------------------------------------- /apps/evm/src/constants/smartContractPercentageDecimal.ts: -------------------------------------------------------------------------------- 1 | export const SMART_CONTRACT_PERCENTAGE_DECIMALS = 18; 2 | -------------------------------------------------------------------------------- /apps/evm/src/constants/swap.ts: -------------------------------------------------------------------------------- 1 | export const SLIPPAGE_TOLERANCE_PERCENTAGE = 0.5; 2 | export const HIGH_PRICE_IMPACT_THRESHOLD_PERCENTAGE = 5; 3 | export const MAXIMUM_PRICE_IMPACT_THRESHOLD_PERCENTAGE = 10; 4 | -------------------------------------------------------------------------------- /apps/evm/src/constants/time.ts: -------------------------------------------------------------------------------- 1 | export const DAYS_PER_YEAR = 365; 2 | export const SECONDS_PER_DAY = 60 * 60 * 24; 3 | -------------------------------------------------------------------------------- /apps/evm/src/constants/transactionTimeout.ts: -------------------------------------------------------------------------------- 1 | export const TRANSACTION_TIMEOUT_S = 60 * 10; // 10 minutes in seconds 2 | -------------------------------------------------------------------------------- /apps/evm/src/constants/xvsSnapshotUrl.ts: -------------------------------------------------------------------------------- 1 | export const XVS_SNAPSHOT_URL = 'https://snapshot.org/#/venus-xvs.eth'; 2 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Form/index.ts: -------------------------------------------------------------------------------- 1 | export * from './FormikSelectField'; 2 | export * from './FormikSubmitButton'; 3 | export * from './FormikTokenTextField'; 4 | export * from './FormikTextField'; 5 | export * from './FormikMarkdownEditor'; 6 | export * from './RhfSubmitButton'; 7 | export * from './RhfTokenTextField'; 8 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Layout/Footer/constants.ts: -------------------------------------------------------------------------------- 1 | export const VENUS_DISCORD_URL = 'https://discord.gg/venus-protocol-912811548651708448'; 2 | export const VENUS_X_URL = 'https://x.com/VenusProtocol'; 3 | export const VENUS_GITHUB_URL = 'https://github.com/VenusProtocol/'; 4 | export const VENUS_TELEGRAM_URL = 'https://t.me/venusprotocol'; 5 | export const VENUS_DOC_URL = 'https://docs-v4.venus.io'; 6 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Layout/Header/TopBar/index.tsx: -------------------------------------------------------------------------------- 1 | import { Breadcrumbs } from './Breadcrumbs'; 2 | import { MdUpControls } from './MdUpControls'; 3 | import { XsControls } from './XsControls'; 4 | 5 | export const TopBar: React.FC = () => ( 6 | <> 7 | 8 | 9 |
10 |
11 | 12 |
13 | 14 | 15 |
16 | 17 | ); 18 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Layout/Header/useIsOnLidoMarketPage/index.tsx: -------------------------------------------------------------------------------- 1 | import { routes } from 'constants/routing'; 2 | import { useGetCurrentRoutePath } from 'hooks/useGetCurrentRoutePath'; 3 | 4 | export const useIsOnLidoMarketPage = () => { 5 | const currentRoutePath = useGetCurrentRoutePath(); 6 | const isOnLidoMarketPage = currentRoutePath === routes.lidoMarket.path; 7 | 8 | return isOnLidoMarketPage; 9 | }; 10 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Layout/Header/useIsOnMarketPage/index.tsx: -------------------------------------------------------------------------------- 1 | import { routes } from 'constants/routing'; 2 | import { useGetCurrentRoutePath } from 'hooks/useGetCurrentRoutePath'; 3 | 4 | export const useIsOnMarketPage = () => { 5 | const currentRoutePath = useGetCurrentRoutePath(); 6 | const isOnMarketPage = 7 | currentRoutePath === routes.corePoolMarket.path || 8 | currentRoutePath === routes.lidoMarket.path || 9 | currentRoutePath === routes.isolatedPoolMarket.path; 10 | 11 | return isOnMarketPage; 12 | }; 13 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Layout/constants.ts: -------------------------------------------------------------------------------- 1 | export const VENUS_DOC_GASLESS_URL = 'https://docs-v4.venus.io/guides/gasless-transactions-zksync'; 2 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Layout/store.ts: -------------------------------------------------------------------------------- 1 | import { create } from 'zustand'; 2 | 3 | import { createStoreSelectors } from 'utilities'; 4 | 5 | interface State { 6 | isScrollToTopVisible: boolean; 7 | setScrollToTopVisible: (isScrollToTopVisible: State['isScrollToTopVisible']) => void; 8 | } 9 | 10 | const useStore = create()(set => ({ 11 | isScrollToTopVisible: false, 12 | setScrollToTopVisible: (v: boolean) => set({ isScrollToTopVisible: v }), 13 | })); 14 | 15 | export const store = createStoreSelectors(useStore); 16 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Layout/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | claimRewardSelectAllCheckbox: 'layout-claim-reward-select-all-checkbox', 3 | claimRewardOpenModalButton: 'layout-claim-reward-open-modal-button', 4 | claimRewardBreakdown: 'layout-claim-reward-breakdown', 5 | claimExternalRewardBreakdown: 'layout-claim-external-reward-breakdown', 6 | claimRewardSubmitButton: 'layout-claim-reward-submit-button', 7 | claimRewardExternalRewards: 'layout-claim-reward-external-rewards', 8 | }; 9 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Layout/types.ts: -------------------------------------------------------------------------------- 1 | import type { IconName } from 'components'; 2 | 3 | export interface MenuItem { 4 | to: string; 5 | iconName: IconName; 6 | i18nKey: string; 7 | isNew?: boolean; 8 | } 9 | -------------------------------------------------------------------------------- /apps/evm/src/containers/MarketTable/types.ts: -------------------------------------------------------------------------------- 1 | import type { Asset, Pool } from 'types'; 2 | 3 | export type ColumnKey = 4 | | 'asset' 5 | | 'supplyApy' 6 | | 'labeledSupplyApy' 7 | | 'borrowApy' 8 | | 'labeledBorrowApy' 9 | | 'pool' 10 | | 'collateral' 11 | | 'userSupplyBalance' 12 | | 'userBorrowBalance' 13 | | 'borrowBalance' 14 | | 'supplyBalance' 15 | | 'liquidity' 16 | | 'userPercentOfLimit' 17 | | 'userWalletBalance'; 18 | 19 | export interface PoolAsset extends Asset { 20 | pool: Pool; 21 | } 22 | -------------------------------------------------------------------------------- /apps/evm/src/containers/PoolStats/__tests__/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`PoolStats > only displays the requested stats 1`] = `"Assets8Total supply$41.98TTreasury$40T"`; 4 | 5 | exports[`PoolStats > renders stats correctly 1`] = `"Total supply$41.98TTotal borrow$17.17TAvailable liquidity$24.8TTreasury$40TAssets8Daily XVS distribution159.99M XVS"`; 6 | -------------------------------------------------------------------------------- /apps/evm/src/containers/PrimeStatusBanner/formatWaitingPeriod.ts: -------------------------------------------------------------------------------- 1 | import { formatDistanceStrict } from 'date-fns'; 2 | 3 | const ONE_MONTH_IN_SECONDS = 30 * 24 * 60 * 60; 4 | 5 | export const formatWaitingPeriod = ({ waitingPeriodSeconds }: { waitingPeriodSeconds: number }) => 6 | formatDistanceStrict(new Date(), new Date().getTime() + waitingPeriodSeconds * 1000, { 7 | unit: waitingPeriodSeconds >= ONE_MONTH_IN_SECONDS ? 'day' : undefined, 8 | }); 9 | -------------------------------------------------------------------------------- /apps/evm/src/containers/PrimeStatusBanner/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | primeStatusBannerContainer: 'prime-status-banner-container', 3 | primeTokensLeftWarning: 'prime-tokens-left-warning', 4 | claimPrimeTokenButton: 'claim-prime-token-button', 5 | stakeXvsButton: 'stake-xvs-button', 6 | }; 7 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Redirect/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | export const REDIRECT_TEST_CONTENT = 'Redirect component rendered'; 2 | 3 | export const Redirect = () => REDIRECT_TEST_CONTENT; 4 | -------------------------------------------------------------------------------- /apps/evm/src/containers/Redirect/index.tsx: -------------------------------------------------------------------------------- 1 | import { useFormatTo } from 'hooks/useFormatTo'; 2 | import { Navigate } from 'react-router'; 3 | 4 | export interface RedirectProps { 5 | to: string; 6 | } 7 | 8 | export const Redirect: React.FC = ({ to }) => { 9 | const { formatTo } = useFormatTo(); 10 | const formattedTo = formatTo({ to }); 11 | 12 | return ; 13 | }; 14 | -------------------------------------------------------------------------------- /apps/evm/src/containers/ResendPayingGasModal/index.tsx: -------------------------------------------------------------------------------- 1 | import { Modal } from './Modal'; 2 | import { store } from './store'; 3 | 4 | const ResendPayingGasModal: React.FC = () => { 5 | const lastFailedGaslessTransaction = store.use.lastFailedGaslessTransaction(); 6 | 7 | if (lastFailedGaslessTransaction) { 8 | return ; 9 | } 10 | }; 11 | 12 | export default ResendPayingGasModal; 13 | -------------------------------------------------------------------------------- /apps/evm/src/containers/ResendPayingGasModal/store/index.ts: -------------------------------------------------------------------------------- 1 | import { create } from 'zustand'; 2 | 3 | import { createStoreSelectors } from 'utilities'; 4 | import type { StoreState } from '../types'; 5 | 6 | const useStore = create>()(set => ({ 7 | lastFailedGaslessTransaction: undefined, 8 | openModal: ({ lastFailedGaslessTransaction }) => set({ lastFailedGaslessTransaction }), 9 | closeModal: () => set({ lastFailedGaslessTransaction: undefined }), 10 | })); 11 | 12 | export const store = createStoreSelectors(useStore); 13 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/__mocks__/useGetSwapTokenUserBalances.ts: -------------------------------------------------------------------------------- 1 | const useGetSwapTokenUserBalances = vi.fn(() => ({ 2 | data: [], 3 | })); 4 | 5 | export default useGetSwapTokenUserBalances; 6 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useCollateral/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | const toggleCollateralMock = vi.fn(); 2 | 3 | export default () => ({ 4 | toggleCollateral: toggleCollateralMock, 5 | }); 6 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useConvertDollarsToCents/index.ts: -------------------------------------------------------------------------------- 1 | import { useMemo } from 'react'; 2 | 3 | import type BigNumber from 'bignumber.js'; 4 | import { convertDollarsToCents } from 'utilities'; 5 | 6 | export interface UseConvertDollarsToCentsInput { 7 | value: BigNumber; 8 | } 9 | 10 | export const useConvertDollarsToCents = (params: UseConvertDollarsToCentsInput) => 11 | useMemo(() => convertDollarsToCents(params.value), [params]); 12 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useGetChainMetadata/__tests__/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import { chainMetadata } from '@venusprotocol/chains'; 2 | 3 | import { renderHook } from 'testUtils/render'; 4 | import { ChainId } from 'types'; 5 | 6 | import { useGetChainMetadata } from '..'; 7 | 8 | describe('useGetChainMetadata', () => { 9 | it('returns the correct chain metadata', () => { 10 | const { result } = renderHook(() => useGetChainMetadata()); 11 | 12 | expect(result.current).toBe(chainMetadata[ChainId.BSC_TESTNET]); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useGetChainMetadata/index.tsx: -------------------------------------------------------------------------------- 1 | import { chainMetadata } from '@venusprotocol/chains'; 2 | import { useChainId } from 'libs/wallet'; 3 | 4 | export const useGetChainMetadata = () => { 5 | const { chainId } = useChainId(); 6 | return chainMetadata[chainId]; 7 | }; 8 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useGetContractAddress/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | import type { UseGetContractAddressInput } from '..'; 2 | 3 | export const useGetContractAddress = vi.fn((input: UseGetContractAddressInput) => ({ 4 | address: `0xfake${input.name}ContractAddress`, 5 | })); 6 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useGetSwapInfo/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | import type { UseGetSwapInfoOutput } from '../types'; 2 | 3 | const useGetSwapInfo = vi.fn( 4 | (): UseGetSwapInfoOutput => ({ 5 | swap: undefined, 6 | error: undefined, 7 | isLoading: false, 8 | }), 9 | ); 10 | 11 | export default useGetSwapInfo; 12 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useGetSwapInfo/wrapToken.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | // PancakeSwap only trades with wrapped tokens, so BNB is replaced with wBNB 4 | const wrapToken = ({ token, wbnb }: { token: Token; wbnb: Token }) => 5 | token.isNative ? wbnb : token; 6 | 7 | export default wrapToken; 8 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useGetVTreasuryContractAddress/__tests__/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`useGetVTreasuryContractAddress > calls the right getter function when current chain is BSC 1`] = `"0xfakeVTreasuryContractAddress"`; 4 | 5 | exports[`useGetVTreasuryContractAddress > calls the right getter function when current chain is BSC 2`] = `"0xfakeVTreasuryContractAddress"`; 6 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useImageAccentColor/__tests__/alpaca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/hooks/useImageAccentColor/__tests__/alpaca.png -------------------------------------------------------------------------------- /apps/evm/src/hooks/useImageAccentColor/index.tsx: -------------------------------------------------------------------------------- 1 | import { usePalette } from '@lauriys/react-palette'; 2 | 3 | export const useImageAccentColor = ({ imagePath }: { imagePath?: string }) => { 4 | const { data } = usePalette(imagePath || ''); 5 | return { color: data.vibrant }; 6 | }; 7 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useIsFeatureEnabled/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | import { featureFlags as originalFeatureFlags } from '..'; 2 | 3 | // Disable all feature flags 4 | export const featureFlags = Object.keys(originalFeatureFlags).reduce( 5 | (acc, key) => ({ 6 | ...acc, 7 | [key]: [], 8 | }), 9 | {}, 10 | ); 11 | 12 | export const useIsFeatureEnabled = vi.fn(() => false); 13 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useIsMounted.ts: -------------------------------------------------------------------------------- 1 | import { useCallback, useEffect, useRef } from 'react'; 2 | 3 | const useIsMounted = () => { 4 | const isMountedRef = useRef(false); 5 | 6 | useEffect(() => { 7 | isMountedRef.current = true; 8 | 9 | return () => { 10 | isMountedRef.current = false; 11 | }; 12 | }, []); 13 | 14 | return useCallback(() => isMountedRef.current, []); 15 | }; 16 | 17 | export default useIsMounted; 18 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useIsOnUnichain/index.tsx: -------------------------------------------------------------------------------- 1 | import { ChainId } from '@venusprotocol/chains'; 2 | import { useChainId } from 'libs/wallet'; 3 | 4 | export const useIsOnUnichain = () => { 5 | const { chainId } = useChainId(); 6 | 7 | return chainId === ChainId.UNICHAIN_MAINNET || chainId === ChainId.UNICHAIN_SEPOLIA; 8 | }; 9 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useNow/index.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react'; 2 | 3 | export interface UseNowInput { 4 | intervalMs?: number; 5 | } 6 | 7 | export const useNow = (input?: UseNowInput) => { 8 | const [now, setNow] = useState(new Date()); 9 | const intervalMs = input?.intervalMs || 60000; 10 | 11 | useEffect(() => { 12 | const interval = setInterval(() => { 13 | setNow(new Date()); 14 | }, intervalMs); 15 | 16 | return () => clearInterval(interval); 17 | }, [intervalMs]); 18 | 19 | return now; 20 | }; 21 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useSendTransaction/constants.ts: -------------------------------------------------------------------------------- 1 | export const CONFIRMATIONS = 2; 2 | export const TIMEOUT_MS = 180000; // 3 minutes 3 | -------------------------------------------------------------------------------- /apps/evm/src/hooks/useTokenApproval/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | import MAX_UINT256 from 'constants/maxUint256'; 2 | 3 | import type { UseTokenApprovalOutput } from '..'; 4 | 5 | const output: UseTokenApprovalOutput = { 6 | isTokenApproved: true, 7 | isWalletSpendingLimitLoading: false, 8 | isApproveTokenLoading: false, 9 | isRevokeWalletSpendingLimitLoading: false, 10 | walletSpendingLimitTokens: MAX_UINT256, 11 | approveToken: vi.fn(), 12 | revokeWalletSpendingLimit: vi.fn(), 13 | }; 14 | 15 | export default vi.fn(() => output); 16 | -------------------------------------------------------------------------------- /apps/evm/src/index.tsx: -------------------------------------------------------------------------------- 1 | import App from 'App'; 2 | import { createRoot } from 'react-dom/client'; 3 | 4 | import 'assets/styles/index.css'; 5 | 6 | import initializeLibraries from './initializeLibraries'; 7 | 8 | initializeLibraries(); 9 | 10 | const container = document.getElementById('root'); 11 | const root = createRoot(container!); 12 | root.render(); 13 | -------------------------------------------------------------------------------- /apps/evm/src/initializeLibraries/bigNumber.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | const initializeBigNumber = () => { 4 | // Initialize BigNumber format 5 | BigNumber.config({ 6 | FORMAT: { 7 | decimalSeparator: '.', 8 | groupSize: 3, 9 | groupSeparator: ',', 10 | }, 11 | ROUNDING_MODE: BigNumber.ROUND_DOWN, 12 | }); 13 | }; 14 | 15 | export default initializeBigNumber; 16 | -------------------------------------------------------------------------------- /apps/evm/src/initializeLibraries/index.ts: -------------------------------------------------------------------------------- 1 | import initializeBigNumber from './bigNumber'; 2 | import initializeYup from './yup'; 3 | 4 | const initializeLibraries = () => { 5 | initializeBigNumber(); 6 | initializeYup(); 7 | }; 8 | 9 | export default initializeLibraries; 10 | -------------------------------------------------------------------------------- /apps/evm/src/libs/analytics/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | export const useAnalytics = vi.fn(() => ({ 2 | captureAnalyticEvent: vi.fn(), 3 | })); 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/analytics/index.tsx: -------------------------------------------------------------------------------- 1 | export interface AnalyticProviderProps { 2 | children?: React.ReactNode; 3 | } 4 | 5 | export * from './useAnalytics'; 6 | -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/.gitignore: -------------------------------------------------------------------------------- 1 | # Automatically generated files 2 | /generated 3 | -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | import type { GetContractAddressInput } from '../utilities/getContractAddress'; 2 | 3 | export * from '..'; 4 | 5 | export const getContractAddress = vi.fn( 6 | (input: GetContractAddressInput) => `0xfake${input.name}ContractAddress`, 7 | ); 8 | -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/config/externalAbis/ZyFiVault.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "balances", 4 | "type": "function", 5 | "stateMutability": "view", 6 | "inputs": [ 7 | { 8 | "type": "address", 9 | "name": "addr" 10 | } 11 | ], 12 | "outputs": [ 13 | { 14 | "type": "uint256" 15 | } 16 | ] 17 | } 18 | ] 19 | -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/index.ts: -------------------------------------------------------------------------------- 1 | export * from './generated/addresses'; 2 | export * from './generated/abis'; 3 | 4 | export * from './utilities/getContractAddress'; 5 | -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/scripts/generateContractRecords/generateContracts/generateAbis/handleBarsHelpers.ts: -------------------------------------------------------------------------------- 1 | import * as Handlebars from 'handlebars'; 2 | 3 | Handlebars.registerHelper( 4 | 'decapitalize', 5 | context => `${context[0].toLowerCase()}${context.substring(1)}`, 6 | ); 7 | -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/scripts/generateContractRecords/generateContracts/generateAbis/templates/abiTemplate.hbs: -------------------------------------------------------------------------------- 1 | export const abi = {{{abi}}} as const; -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/scripts/generateContractRecords/generateContracts/generateAbis/templates/index.hbs: -------------------------------------------------------------------------------- 1 | {{#each contractNames}} 2 | export { abi as {{decapitalize this}}Abi } from 'libs/contracts/generated/abis/{{this}}'; 3 | {{/each}} 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/scripts/generateContractRecords/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env tsx 2 | import { contracts } from 'libs/contracts/config'; 3 | 4 | import { generateContracts } from './generateContracts'; 5 | 6 | console.log('Generating contracts...'); 7 | 8 | generateContracts({ contractConfigs: contracts }) 9 | .then(() => console.log('Finished generating contracts')) 10 | .catch(console.error); 11 | -------------------------------------------------------------------------------- /apps/evm/src/libs/contracts/utilities/getAbsolutePath/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'node:path'; 2 | 3 | import cwd from 'utilities/cwd'; 4 | 5 | export const CONTRACTS_PACKAGE_PATH = './src/libs/contracts'; 6 | 7 | export interface GetAbsolutePathInput { 8 | relativePath: string; 9 | } 10 | 11 | export const getAbsolutePath = ({ relativePath }: GetAbsolutePathInput) => 12 | path.join(cwd(), `${CONTRACTS_PACKAGE_PATH}/${relativePath}`); 13 | -------------------------------------------------------------------------------- /apps/evm/src/libs/errors/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ErrorBoundary'; 2 | export * from './transactionErrors'; 3 | export * from './handleError'; 4 | export * from './logError'; 5 | export * from './VError'; 6 | -------------------------------------------------------------------------------- /apps/evm/src/libs/notifications/NotificationCenter/__tests__/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`NotificationCenter > renders notifications correctly 1`] = `"Fake description 0Fake title 1Fake description 1"`; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/notifications/NotificationCenter/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | container: 'notification-center-container', 3 | }; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/notifications/__mocks__/models/notifications.ts: -------------------------------------------------------------------------------- 1 | import type { Notification } from '../../types'; 2 | 3 | export const notifications: Notification[] = [ 4 | { 5 | id: 0, 6 | description: 'Fake description 0', 7 | variant: 'success', 8 | }, 9 | { 10 | id: 1, 11 | title: 'Fake title 1', 12 | description: 'Fake description 1', 13 | }, 14 | ]; 15 | -------------------------------------------------------------------------------- /apps/evm/src/libs/notifications/index.ts: -------------------------------------------------------------------------------- 1 | export * from './NotificationCenter'; 2 | export * from './utilities'; 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/.gitignore: -------------------------------------------------------------------------------- 1 | # Automatically generated PancakeSwap token list 2 | /generated -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/hooks/useGetSwapTokens/index.ts: -------------------------------------------------------------------------------- 1 | import { useMemo } from 'react'; 2 | 3 | import { useChainId } from 'libs/wallet'; 4 | 5 | import { getSwapTokens } from '../../utilities/getSwapTokens'; 6 | 7 | export const useGetSwapTokens = () => { 8 | const { chainId } = useChainId(); 9 | return useMemo(() => getSwapTokens({ chainId }), [chainId]); 10 | }; 11 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/alpaca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/alpaca.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/bifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/bifi.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/bnbx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/bnbx.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/busd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/carrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/carrot.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/crv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/crv.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/crvUsd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/crvUsd.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/eBtc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/eBtc.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/ezEth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/ezEth.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/fdusd.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/lisUSD.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/lisUSD.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/nft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/nft.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/ptWeeth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/ptWeeth.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/pufEth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/pufEth.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/raca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/raca.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/slisBNB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/slisBNB.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/solvBtc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/solvBtc.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/the.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/tusd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/usd1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/usd1.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/vrt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/underlyingTokens/wUsdm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/underlyingTokens/wUsdm.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/vTokens/vCrvCurve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/vTokens/vCrvCurve.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/vTokens/vCrvUsdCore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/vTokens/vCrvUsdCore.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/vTokens/vCrvUsdCurve.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/vTokens/vCrvUsdCurve.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/img/vTokens/vPufEthLsEth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/libs/tokens/img/vTokens/vPufEthLsEth.png -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/index.ts: -------------------------------------------------------------------------------- 1 | export * from './infos'; 2 | export * from './utilities/getTokens'; 3 | export * from './utilities/getToken'; 4 | export * from './utilities/getSwapTokens'; 5 | export * from './utilities/getDisabledTokenActions'; 6 | export * from './utilities/getVTokenAsset'; 7 | export * from './hooks/useGetToken'; 8 | export * from './hooks/useGetTokens'; 9 | export * from './hooks/useGetSwapTokens'; 10 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/commonTokens/berachainBepolia.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | import { eth } from '../nativeTokens'; 3 | 4 | export const tokens: Token[] = [eth]; 5 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/commonTokens/berachainMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | import { eth } from '../nativeTokens'; 3 | 4 | export const tokens: Token[] = [eth]; 5 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/arbitrumOne.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/arbitrumSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/baseMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/baseSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/berachainBepolia.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/berachainMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/bscTestnet.ts: -------------------------------------------------------------------------------- 1 | import { NATIVE_TOKEN_ADDRESS } from 'constants/address'; 2 | import type { DisabledTokenAction } from '../../types'; 3 | 4 | export const disabledTokenActions: DisabledTokenAction[] = [ 5 | // BNB 6 | { 7 | address: NATIVE_TOKEN_ADDRESS, 8 | disabledActions: ['swapAndSupply'], 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/ethereum.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/opBnbMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/opBnbTestnet.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/optimismMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/optimismSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/sepolia.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/unichainMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/unichainSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/zkSyncMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/disabledTokenActions/zkSyncSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { DisabledTokenAction } from '../../types'; 2 | 3 | export const disabledTokenActions: DisabledTokenAction[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/index.ts: -------------------------------------------------------------------------------- 1 | export * from './commonTokens'; 2 | export * from './pancakeSwapTokens'; 3 | export * from './vTokens'; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/arbitrumOne.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/arbitrumSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/baseMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/baseSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/berachainBepolia.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/berachainMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/bscTestnet.ts: -------------------------------------------------------------------------------- 1 | export * from '../commonTokens/bscTestnet'; 2 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/ethereum.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/opBnbMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/opBnbTestnet.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/optimismMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/optimismSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/sepolia.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/unichainMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/unichainSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/zkSyncMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/pancakeSwapTokens/zkSyncSepolia.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export const tokens: Token[] = []; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/vTokens/berachainBepolia.ts: -------------------------------------------------------------------------------- 1 | import type { VTokenAssets } from 'libs/tokens/types'; 2 | 3 | export const vTokenAssets: VTokenAssets = {}; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/infos/vTokens/berachainMainnet.ts: -------------------------------------------------------------------------------- 1 | import type { VTokenAssets } from 'libs/tokens/types'; 2 | 3 | export const vTokenAssets: VTokenAssets = {}; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/scripts/generatePancakeSwapTokenRecords/template.hbs: -------------------------------------------------------------------------------- 1 | import { Token } from 'types'; 2 | 3 | export const tokens: Token[] = [ 4 | {{#each .}} 5 | { 6 | symbol: '{{ symbol }}', 7 | decimals: {{ decimals }}, 8 | address: '{{ address }}', 9 | asset: '{{ logoURI }}', 10 | }, 11 | {{/each}} 12 | ]; 13 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/types.ts: -------------------------------------------------------------------------------- 1 | import type { ChainId, Token, TokenAction } from 'types'; 2 | 3 | export type TokenMapping = { 4 | [chainId in ChainId]: Token[]; 5 | }; 6 | 7 | export type DisabledTokenActionMapping = { 8 | [chainId in ChainId]: DisabledTokenAction[]; 9 | }; 10 | 11 | export interface DisabledTokenAction { 12 | address: string; 13 | disabledActions: TokenAction[]; 14 | } 15 | 16 | export type VTokenAssets = Record; 17 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/utilities/getPancakeSwapTokens/__tests__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { pancakeSwapTokens } from 'libs/tokens/infos/pancakeSwapTokens'; 2 | import { ChainId } from 'types'; 3 | 4 | import { getPancakeSwapTokens } from '..'; 5 | 6 | describe('getPancakeSwapTokens', () => { 7 | it('returns all the tokens relevant to the passed chain ID', () => { 8 | const result = getPancakeSwapTokens({ 9 | chainId: ChainId.BSC_TESTNET, 10 | }); 11 | 12 | expect(result).toBe(pancakeSwapTokens[ChainId.BSC_TESTNET]); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/utilities/getPancakeSwapTokens/index.ts: -------------------------------------------------------------------------------- 1 | import type { ChainId } from 'types'; 2 | 3 | import { pancakeSwapTokens } from '../../infos/pancakeSwapTokens'; 4 | 5 | export interface GetPancakeSwapTokensInput { 6 | chainId: ChainId; 7 | } 8 | 9 | export const getPancakeSwapTokens = ({ chainId }: GetPancakeSwapTokensInput) => 10 | pancakeSwapTokens[chainId]; 11 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/utilities/getToken/__tests__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { tokens } from 'libs/tokens/infos/commonTokens'; 2 | import { ChainId } from 'types'; 3 | 4 | import { getToken } from '..'; 5 | 6 | describe('getToken', () => { 7 | it('return a single token from a chain, given its symbol', () => { 8 | const result = getToken({ 9 | chainId: ChainId.BSC_TESTNET, 10 | symbol: 'BNB', 11 | }); 12 | 13 | expect(result).toBe(tokens[ChainId.BSC_TESTNET][3]); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/utilities/getToken/index.ts: -------------------------------------------------------------------------------- 1 | import type { ChainId } from 'types'; 2 | 3 | import { tokens } from '../../infos/commonTokens'; 4 | 5 | export interface GetTokenInput { 6 | chainId: ChainId; 7 | symbol: string; 8 | } 9 | 10 | export const getToken = ({ chainId, symbol }: GetTokenInput) => { 11 | const chainTokens = tokens[chainId]; 12 | return chainTokens.find(token => token.symbol === symbol); 13 | }; 14 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/utilities/getTokens/__tests__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { tokens } from 'libs/tokens/infos/commonTokens'; 2 | import { ChainId } from 'types'; 3 | 4 | import { getTokens } from '..'; 5 | 6 | describe('getTokens', () => { 7 | it('returns all the tokens relevant to the passed chain ID', () => { 8 | const result = getTokens({ 9 | chainId: ChainId.BSC_TESTNET, 10 | }); 11 | 12 | expect(result).toBe(tokens[ChainId.BSC_TESTNET]); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/utilities/getTokens/index.ts: -------------------------------------------------------------------------------- 1 | import type { ChainId } from 'types'; 2 | 3 | import { tokens } from '../../infos/commonTokens'; 4 | 5 | export interface GetTokensInput { 6 | chainId: ChainId; 7 | } 8 | 9 | export const getTokens = ({ chainId }: GetTokensInput) => tokens[chainId]; 10 | -------------------------------------------------------------------------------- /apps/evm/src/libs/tokens/utilities/getVTokenAsset/index.ts: -------------------------------------------------------------------------------- 1 | import { vTokenAssetsPerChainId } from 'libs/tokens/infos/vTokens'; 2 | import type { ChainId } from 'types'; 3 | 4 | export const getVTokenAsset = ({ 5 | vTokenAddress, 6 | chainId, 7 | }: { vTokenAddress: string; chainId: ChainId }): string | undefined => { 8 | const chainVTokenAssets = vTokenAssetsPerChainId[chainId]; 9 | 10 | return chainVTokenAssets[vTokenAddress.toLowerCase()]; 11 | }; 12 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/Web3Wrapper/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | import type { Web3WrapperProps } from '..'; 2 | 3 | export const Web3Wrapper: React.FC = ({ children }) => <>{children}; 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/Web3Wrapper/index.tsx: -------------------------------------------------------------------------------- 1 | import { WagmiProvider } from 'wagmi'; 2 | import { ConnectKitWrapper } from './ConnectKitWrapper'; 3 | import config from './config'; 4 | 5 | export interface Web3WrapperProps { 6 | children?: React.ReactNode; 7 | } 8 | 9 | export const Web3Wrapper: React.FC = ({ children }) => ( 10 | 11 | {children} 12 | 13 | ); 14 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/constants.ts: -------------------------------------------------------------------------------- 1 | export const WALLET_CONNECT_PROJECT_ID = '3f930f8e56336b44761655d8a270144c'; 2 | export const CHAIN_ID_SEARCH_PARAM = 'chainId'; 3 | export const ZYFI_SPONSORED_PAYMASTER_ENDPOINT = 4 | 'https://api.zyfi.org/api/erc20_sponsored_paymaster/v1'; 5 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/useAccountAddress/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | export const useAccountAddress = vi.fn(() => ({ 2 | address: undefined, 3 | })); 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/useAccountChainId/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | export const useAccountChainId = vi.fn(() => ({ 2 | chainId: undefined, 3 | })); 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/useAccountChainId/index.tsx: -------------------------------------------------------------------------------- 1 | import { useAccount } from 'wagmi'; 2 | 3 | export const useAccountChainId = () => { 4 | const { chainId } = useAccount(); 5 | return { chainId }; 6 | }; 7 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/useAddTokenToWallet/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | export const useAddTokenToWallet = vi.fn(() => ({ 2 | addTokenToWallet: vi.fn, 3 | })); 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/useAuthModal/__mocks__/index.tsx: -------------------------------------------------------------------------------- 1 | export const useAuthModal = vi.fn(() => ({ 2 | isAuthModalOpen: false, 3 | openAuthModal: vi.fn(), 4 | closeAuthModal: vi.fn(), 5 | })); 6 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/useAuthModal/index.tsx: -------------------------------------------------------------------------------- 1 | import { useModal } from 'connectkit'; 2 | 3 | export const useAuthModal = () => { 4 | const { open, setOpen } = useModal(); 5 | 6 | return { 7 | isAuthModalOpen: open, 8 | openAuthModal: () => setOpen(true), 9 | closeAuthModal: () => setOpen(false), 10 | }; 11 | }; 12 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/useChainId/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | import { ChainId } from 'types'; 2 | 3 | export const useChainId = vi.fn(() => ({ 4 | chainId: ChainId.BSC_TESTNET, 5 | })); 6 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/usePublicClient/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | export const usePublicClient = vi.fn(() => ({ 2 | publicClient: undefined, 3 | })); 4 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/hooks/useSwitchChain/__mocks__/index.ts: -------------------------------------------------------------------------------- 1 | const switchChain = vi.fn(({ callback }: { callback: () => void }) => callback()); 2 | 3 | export const useSwitchChain = vi.fn(() => ({ 4 | switchChain, 5 | })); 6 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; 2 | export * from './chains'; 3 | export * from './Web3Wrapper'; 4 | export * from './utilities/getUnsafeChainIdFromSearchParams'; 5 | export * from './hooks/useAccountAddress'; 6 | export * from './hooks/useAccountChainId'; 7 | export * from './hooks/useSwitchChain'; 8 | export * from './hooks/useChainId'; 9 | export * from './hooks/useAuthModal'; 10 | export * from './hooks/useAddTokenToWallet'; 11 | export * from './hooks/usePublicClient'; 12 | -------------------------------------------------------------------------------- /apps/evm/src/libs/wallet/utilities/getUnsafeChainIdFromSearchParams/index.ts: -------------------------------------------------------------------------------- 1 | import { CHAIN_ID_SEARCH_PARAM } from 'libs/wallet/constants'; 2 | 3 | export const getUnsafeChainIdFromSearchParams = ({ 4 | searchParams, 5 | }: { 6 | searchParams: URLSearchParams; 7 | }) => { 8 | const chainId = searchParams.get(CHAIN_ID_SEARCH_PARAM); 9 | 10 | return { 11 | chainId: chainId ? Number(chainId) : undefined, 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Account/AccountBreakdown/PoolsBreakdown/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | tables: 'account-pool-breakdown-tables', 3 | }; 4 | 5 | export default TEST_IDS; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Account/AccountBreakdown/Summary/calculateNetApy/index.spec.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | import calculateNetApy from '.'; 4 | 5 | describe('utilities/calculateNetApy', () => { 6 | test('calculates apy from balance and yearly earnings', () => { 7 | const apy = calculateNetApy({ 8 | yearlyEarningsCents: new BigNumber('1924.21991227022443813375'), 9 | supplyBalanceCents: new BigNumber('21507.4246'), 10 | }); 11 | expect(apy).toBe(8.94); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Account/AccountBreakdown/VaultsBreakdown/Table/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | 7 | return { 8 | table: css` 9 | width: calc(50% - ${theme.spacing(3)}); 10 | 11 | ${theme.breakpoints.down('lg')} { 12 | width: auto; 13 | } 14 | `, 15 | }; 16 | }; 17 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Account/AccountBreakdown/VaultsBreakdown/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`pages/Account/VaultsBreakdown > displays content correctly 1`] = `"VaultsStakedAssetAPRStakesorted descendingVAI> 10,000%0 VAIXVS12.92%233 XVSSort byStakeVAIAPR> 10,000%Stake0 VAIXVSAPR12.92%Stake233 XVS"`; 4 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Account/Section/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | 7 | return { 8 | title: css` 9 | display: flex; 10 | align-items: center; 11 | margin-bottom: ${theme.spacing(4)}; 12 | `, 13 | }; 14 | }; 15 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Bridge/constants.ts: -------------------------------------------------------------------------------- 1 | import { featureFlags } from 'hooks/useIsFeatureEnabled'; 2 | import { chains } from 'libs/wallet'; 3 | 4 | export const bridgeChains = chains.filter(chain => featureFlags.bridgeRoute.includes(chain.id)); 5 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Bridge/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | fromChainIdSelect: 'bridge-from-chain-id-select', 3 | notice: 'bridge-error-notice', 4 | toChainIdSelect: 'bridge-to-chain-id-select', 5 | switchChainsButton: 'bridge-switch-chains-button', 6 | tokenTextField: 'bridge-token-text-field', 7 | }; 8 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Dashboard/Carousel/PrimePromotionalBanner/boostsIllustration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/pages/Dashboard/Carousel/PrimePromotionalBanner/boostsIllustration.png -------------------------------------------------------------------------------- /apps/evm/src/pages/Dashboard/Carousel/PrimePromotionalBanner/illustrationSm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/pages/Dashboard/Carousel/PrimePromotionalBanner/illustrationSm.png -------------------------------------------------------------------------------- /apps/evm/src/pages/Dashboard/Carousel/PrimePromotionalBanner/primeTokenIllustration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/pages/Dashboard/Carousel/PrimePromotionalBanner/primeTokenIllustration.png -------------------------------------------------------------------------------- /apps/evm/src/pages/Dashboard/Carousel/Template/index.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@venusprotocol/ui'; 2 | import { Card } from 'components'; 3 | 4 | export interface TemplateProps extends React.HTMLAttributes {} 5 | 6 | export const Template: React.FC = ({ className, ...props }) => ( 7 | 14 | ); 15 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Dashboard/Carousel/UnichainPromotionalBanner/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Dashboard/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | marketTable: 'dashboard-market-table', 3 | }; 4 | 5 | export default TEST_IDS; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Governance/ProposalList/CreateProposalModal/safeJsonParse.ts: -------------------------------------------------------------------------------- 1 | export const safeJsonParse = (value: string | number | boolean) => { 2 | try { 3 | return JSON.parse(value.toString()); 4 | } catch { 5 | return value; 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Governance/ProposalList/CreateProposalModal/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | fileInput: 'proposal-file-input', 3 | }; 4 | 5 | export default TEST_IDS; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Governance/ProposalList/GovernanceProposal/greenPulseAnimation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/evm/src/pages/Governance/ProposalList/GovernanceProposal/greenPulseAnimation.gif -------------------------------------------------------------------------------- /apps/evm/src/pages/Governance/ProposalList/GovernanceProposal/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | governanceProposal: (id: string) => `vote-governance-governance-proposal-${id}`, 3 | }; 4 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Governance/VotingWallet/DelegateModal/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | return { 7 | inputLabels: css` 8 | display: inline-flex; 9 | flex-direction: row; 10 | justify-content: space-between; 11 | align-items: center; 12 | width: 100%; 13 | margin-top: ${theme.spacing(8)}; 14 | `, 15 | inline: css` 16 | padding: 0; 17 | `, 18 | }; 19 | }; 20 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Governance/VotingWallet/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | votingWeightValue: 'vote-voting-wallet-voting-weight-value', 3 | totalLockedValue: 'vote-voting-wallet-total-locked-value', 4 | delegateButton: 'vote-voting-wallet-delegate-button', 5 | delegateYourVoting: 'vote-voting-wallet-delegate-your-voting', 6 | depositYourTokens: 'vote-voting-wallet-deposit-your-tokens', 7 | votingDisabledWarning: 'vote-voting-wallet-voting-disabled-warning', 8 | }; 9 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Governance/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | createProposal: 'create-proposal', 3 | proposalStateSelect: 'proposal-state-select', 4 | proposalList: 'proposal-list', 5 | }; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/IsolatedPools/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import { renderComponent } from 'testUtils/render'; 2 | 3 | import Pools from '.'; 4 | 5 | describe('Pools', () => { 6 | it('renders without crashing', async () => { 7 | renderComponent(); 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/AssetWarning/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | marketTable: 'asset-warning-market-table', 3 | }; 4 | 5 | export default TEST_IDS; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/AssetWarning/types.ts: -------------------------------------------------------------------------------- 1 | export type WarningType = 'borrow' | 'supply'; 2 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/BorrowForm/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | tokenTextField: 'borrow-modal-token-text-field', 3 | submitButton: 'submit-button', 4 | receiveNativeToken: 'borrow-modal-receive-native-token', 5 | availableAmount: 'available-amount', 6 | }; 7 | 8 | export default TEST_IDS; 9 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/OperationDetails/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | swapDetails: 'swap-details', 3 | }; 4 | 5 | export default TEST_IDS; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/RepayForm/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | tokenTextField: 'repay-modal-token-text-field', 3 | selectTokenTextField: 'repay-modal-select-token-text-field', 4 | spendingLimit: 'spending-limit', 5 | }; 6 | 7 | export default TEST_IDS; 8 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/SupplyForm/__tests__/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`SupplyForm > displays the wallet spending limit correctly and lets user revoke it 1`] = `"Spending limit10 XVS"`; 4 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/SupplyForm/__tests__/__snapshots__/indexIntegratedSwap.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`SupplyForm - Feature flag enabled: integratedSwap > displays correct swap details 1`] = `"You will supply≈ 8.9K XVSExchange rate1 BUSD ≈ 0.029666 XVSSlippage tolerance0.5%Price impact< 0.01%"`; 4 | 5 | exports[`SupplyForm - Feature flag enabled: integratedSwap > displays correct swap details 2`] = `"You will supply 8.9K XVS using 299.99K BUSD"`; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/SupplyForm/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | selectTokenTextField: 'supply-modal-select-token-text-field', 3 | tokenTextField: 'supply-modal-token-text-field', 4 | submitButton: 'submit-button', 5 | noticeError: 'notice-error', 6 | noticeAssetWarning: 'notice-isolated-asset', 7 | spendingLimit: 'spending-limit', 8 | }; 9 | 10 | export default TEST_IDS; 11 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/SwapSummary/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | swapSummary: 'swap-summary', 3 | }; 4 | 5 | export default TEST_IDS; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/WithdrawForm/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | valueInput: 'value-input', 3 | submitButton: 'submit-button', 4 | receiveNativeToken: 'withdraw-modal-receive-native-token', 5 | availableAmount: 'available-amount', 6 | }; 7 | 8 | export default TEST_IDS; 9 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/WithdrawForm/useForm/types.ts: -------------------------------------------------------------------------------- 1 | import type { Token } from 'types'; 2 | 3 | export interface FormValues { 4 | fromToken: Token; 5 | amountTokens: string; 6 | receiveNativeToken: boolean; 7 | acknowledgeRisk: boolean; 8 | } 9 | 10 | export type FormErrorCode = 11 | | 'EMPTY_TOKEN_AMOUNT' 12 | | 'HIGHER_THAN_AVAILABLE_AMOUNT' 13 | | 'HIGHER_THAN_LIQUIDITY' 14 | | 'REQUIRES_RISK_ACKNOWLEDGEMENT'; 15 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/Page/OperationForm/types.ts: -------------------------------------------------------------------------------- 1 | export interface FormError { 2 | code: C; 3 | message?: string; 4 | } 5 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | supplyInfo: 'market-details-supply-info', 3 | borrowInfo: 'market-details-borrow-info', 4 | interestRateModel: 'market-details-interest-rate-model', 5 | marketInfo: 'market-details-market-info', 6 | }; 7 | 8 | export default TEST_IDS; 9 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Market/types.ts: -------------------------------------------------------------------------------- 1 | export interface Stat { 2 | label: string; 3 | value: React.ReactNode | string | number; 4 | } 5 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Pool/CorePool/__tests__/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import { renderComponent } from 'testUtils/render'; 2 | 3 | import CorePool from '..'; 4 | 5 | describe('CorePool', () => { 6 | it('renders without crashing', async () => { 7 | renderComponent(); 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Pool/CorePool/index.tsx: -------------------------------------------------------------------------------- 1 | import { useGetChainMetadata } from 'hooks/useGetChainMetadata'; 2 | 3 | import Pool from '..'; 4 | 5 | const CorePool: React.FC = () => { 6 | const { corePoolComptrollerContractAddress } = useGetChainMetadata(); 7 | 8 | return ; 9 | }; 10 | 11 | export default CorePool; 12 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Pool/IsolatedPool/__tests__/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import { renderComponent } from 'testUtils/render'; 2 | 3 | import IsolatedPool from '..'; 4 | 5 | describe('IsolatedPool', () => { 6 | it('renders without crashing', async () => { 7 | renderComponent(); 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Pool/IsolatedPool/index.tsx: -------------------------------------------------------------------------------- 1 | /** @jsxImportSource @emotion/react */ 2 | import { useParams } from 'react-router'; 3 | 4 | import { NULL_ADDRESS } from 'constants/address'; 5 | import type { Address } from 'viem'; 6 | import Pool from '..'; 7 | 8 | const IsolatedPool: React.FC = () => { 9 | const { poolComptrollerAddress = NULL_ADDRESS } = useParams<{ 10 | poolComptrollerAddress: Address; 11 | }>(); 12 | 13 | return ; 14 | }; 15 | 16 | export default IsolatedPool; 17 | -------------------------------------------------------------------------------- /apps/evm/src/pages/PrimeCalculator/Form/validateNumericString.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | export const validateNumericString = (str: string, minValue = new BigNumber(0)) => { 4 | if (!str) { 5 | return true; 6 | } 7 | const n = new BigNumber(str); 8 | const isNumber = BigNumber.isBigNumber(n); 9 | const gteMinValue = n.gte(minValue); 10 | 11 | return isNumber && gteMinValue; 12 | }; 13 | -------------------------------------------------------------------------------- /apps/evm/src/pages/PrimeCalculator/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | tokenSelect: 'prime-calculator-token-select', 3 | stakedAmountTokens: 'prime-calculator-staked-amount-tokens', 4 | suppliedAmountTokens: 'prime-calculator-supplied-amount-tokens', 5 | borrowedAmountTokens: 'prime-calculator-borrowed-amount-tokens', 6 | }; 7 | 8 | export default TEST_IDS; 9 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Proposal/Commands/Description/index.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@venusprotocol/ui'; 2 | 3 | export interface DescriptionProps extends React.HTMLAttributes { 4 | type?: 'warning' | 'info'; 5 | } 6 | 7 | export const Description: React.FC = ({ type = 'info', ...otherProps }) => ( 8 |

12 | ); 13 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Proposal/VoteModal/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | return { 7 | root: css` 8 | > div:first-of-type { 9 | margin-bottom: ${theme.spacing(8)}; 10 | } 11 | `, 12 | votingPower: css` 13 | margin-bottom: ${theme.spacing(8)}; 14 | `, 15 | comment: css` 16 | margin-bottom: ${theme.spacing(8)}; 17 | `, 18 | }; 19 | }; 20 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Proposal/VoteModal/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | submitButton: 'proposal-vote-modal-submit-button', 3 | }; 4 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Proposal/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | return { 7 | root: css` 8 | display: flex; 9 | flex-direction: column; 10 | `, 11 | spinner: css` 12 | height: 100%; 13 | `, 14 | successColor: theme.palette.interactive.success, 15 | againstColor: theme.palette.interactive.error, 16 | abstainColor: theme.palette.text.secondary, 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Proposal/testIds.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | votingDisabledWarning: 'voting-disabled-warning', 3 | voteSummary: { 4 | for: 'proposal-vote-summary-for', 5 | against: 'proposal-vote-summary-against', 6 | abstain: 'proposal-vote-summary-abstain', 7 | }, 8 | commands: 'proposal-commands', 9 | command: 'proposal-command', 10 | description: 'proposal-description', 11 | }; 12 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Swap/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | fromTokenSelectTokenTextField: 'from-token-select-token-text-field', 3 | fromTokenMaxButton: 'from-token-max-button', 4 | toTokenSelectTokenTextField: 'to-token-select-token-text-field', 5 | switchTokensButton: 'switch-tokens-button', 6 | swapDetails: 'swap-details', 7 | spendingLimit: 'spending-limit', 8 | }; 9 | 10 | export default TEST_IDS; 11 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vai/Borrow/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | primeOnlyWarning: 'vai-prime-only-warning', 3 | }; 4 | 5 | export default TEST_IDS; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vai/Borrow/types.ts: -------------------------------------------------------------------------------- 1 | export interface FormValues { 2 | amountTokens: string; 3 | acknowledgeRisk: boolean; 4 | } 5 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vai/Repay/__tests__/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`Repay > displays the correct wallet balance and borrow APR 1`] = `"Wallet balance> 100T VAI"`; 4 | 5 | exports[`Repay > displays the correct wallet balance and borrow APR 2`] = `"Borrow APR1.34%"`; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vai/Repay/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | userVaiWalletBalance: 'user-vai-wallet-balance', 3 | borrowApr: 'borrow-apr', 4 | }; 5 | 6 | export default TEST_IDS; 7 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vai/Repay/types.ts: -------------------------------------------------------------------------------- 1 | export interface FormValues { 2 | amountTokens: string; 3 | } 4 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/TransactionForm/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`TransactionForm > displays available tokens and locking period correctly 1`] = `"Available XVS100K XVS"`; 4 | 5 | exports[`TransactionForm > displays available tokens and locking period correctly 2`] = `"Locking period3 days"`; 6 | 7 | exports[`TransactionForm > displays the wallet spending limit correctly and lets user revoke it 1`] = `"Spending limit10 XVS"`; 8 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/TransactionForm/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | tokenTextField: 'vault-transaction-form-token-text-field', 3 | availableTokens: 'vault-transaction-form-available-tokens', 4 | lockingPeriod: 'vault-transaction-form-locking-period', 5 | spendingLimit: 'vault-transaction-spending-limit', 6 | noticeWarning: 'vault-transaction-form-notice-warning', 7 | }; 8 | 9 | export default TEST_IDS; 10 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/VaultItem/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`pages/Vault/VaultItem > renders vault correctly 1`] = `"VAI"`; 4 | 5 | exports[`pages/Vault/VaultItem > renders vault correctly 2`] = `"200"`; 6 | 7 | exports[`pages/Vault/VaultItem > renders vault correctly 3`] = `"> 10,000%"`; 8 | 9 | exports[`pages/Vault/VaultItem > renders vault correctly 4`] = `"144"`; 10 | 11 | exports[`pages/Vault/VaultItem > renders vault correctly 5`] = `"415"`; 12 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/VaultItem/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | symbol: 'vault-vault-item-symbol', 3 | userStakedTokens: 'vault-vault-item-user-staked-tokens', 4 | dataListItem: 'vault-vault-item-data-list-item', 5 | withdrawFromVestingVaultModal: { 6 | withdrawalRequestListItem: 7 | 'vault-vault-item-withdraw-from-vesting-vault-modal-withdrawal-request-list-item', 8 | availableTokens: 'vault-vault-item-withdraw-from-vesting-vault-modal-available-tokens', 9 | }, 10 | }; 11 | 12 | export default TEST_IDS; 13 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/modals/WithdrawFromVaiVaultModal/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`WithdrawFromVaiVaultModal > fetches and displays the user balance correctly 1`] = `"Available VAI100K VAI"`; 4 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/modals/WithdrawFromVestingVaultModal/RequestWithdrawal/__tests__/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`RequestWithdrawal > fetches staked tokens and locking period and displays them correctly 1`] = `"Requestable VAI24 VAI"`; 4 | 5 | exports[`RequestWithdrawal > fetches staked tokens and locking period and displays them correctly 2`] = `"Locking period3 minutes"`; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/modals/WithdrawFromVestingVaultModal/Withdraw/__snapshots__/index.spec.tsx.snap: -------------------------------------------------------------------------------- 1 | // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html 2 | 3 | exports[`Withdraw > fetches available tokens amount and displays it correctly 1`] = `"Available VAI3 VAI"`; 4 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/modals/WithdrawFromVestingVaultModal/Withdraw/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | availableTokens: 'vault-vault-item-withdraw-from-vesting-vault-modal-available-tokens', 3 | }; 4 | 5 | export default TEST_IDS; 6 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/modals/WithdrawFromVestingVaultModal/WithdrawalRequestList/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | 7 | return { 8 | listItem: css` 9 | :not(:last-of-type) { 10 | margin-bottom: ${theme.spacing(4)}; 11 | } 12 | `, 13 | }; 14 | }; 15 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/modals/WithdrawFromVestingVaultModal/WithdrawalRequestList/testIds.ts: -------------------------------------------------------------------------------- 1 | const TEST_IDS = { 2 | withdrawalRequestListItem: 3 | 'vault-vault-item-withdraw-from-vesting-vault-modal-withdrawal-request-list-item', 4 | }; 5 | 6 | export default TEST_IDS; 7 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/modals/index.ts: -------------------------------------------------------------------------------- 1 | export { default as StakeModal } from './StakeModal'; 2 | export { default as WithdrawFromVaiVaultModal } from './WithdrawFromVaiVaultModal'; 3 | export { default as WithdrawFromVestingVaultModal } from './WithdrawFromVestingVaultModal'; 4 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Vault/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | 7 | return { 8 | container: css` 9 | display: grid; 10 | grid-template-columns: 1fr 1fr; 11 | gap: ${theme.spacing(6)}; 12 | 13 | ${theme.breakpoints.down('xl')} { 14 | grid-template-columns: 1fr; 15 | } 16 | `, 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Voter/History/VoterProposal/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | import { useTheme } from '@mui/material'; 3 | 4 | export const useStyles = () => { 5 | const theme = useTheme(); 6 | 7 | return { 8 | root: css` 9 | margin-top: ${theme.spacing(6)}; 10 | `, 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Voter/History/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | 3 | export const useStyles = () => ({ 4 | pagination: css` 5 | justify-content: flex-start; 6 | `, 7 | }); 8 | -------------------------------------------------------------------------------- /apps/evm/src/pages/Voter/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import { renderComponent } from 'testUtils/render'; 2 | 3 | import Voter from '.'; 4 | 5 | describe('pages/Voter', () => { 6 | it('renders without crashing', async () => { 7 | renderComponent(); 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /apps/evm/src/pages/VoterLeaderboard/LeaderboardTable/index.spec.tsx: -------------------------------------------------------------------------------- 1 | import voterAccounts from '__mocks__/models/voterAccounts'; 2 | import { renderComponent } from 'testUtils/render'; 3 | 4 | import Table from '.'; 5 | 6 | describe('pages/VoterLeaderboard/Table', () => { 7 | it('renders without crashing', async () => { 8 | renderComponent( 9 | , 14 | ); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /apps/evm/src/pages/VoterLeaderboard/styles.ts: -------------------------------------------------------------------------------- 1 | import { css } from '@emotion/react'; 2 | 3 | export const useStyles = () => ({ 4 | root: css` 5 | display: flex; 6 | flex-direction: column; 7 | `, 8 | }); 9 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/__mocks__/generateTransactionDeadline.ts: -------------------------------------------------------------------------------- 1 | export const generateTransactionDeadline = vi.fn(() => 1747386407n); 2 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/__mocks__/restService.ts: -------------------------------------------------------------------------------- 1 | export const restService = vi.fn(); 2 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/areAddressesEqual.ts: -------------------------------------------------------------------------------- 1 | export const areAddressesEqual = (addressA: string, addressB: string) => 2 | addressA.toLowerCase() === addressB.toLowerCase(); 3 | 4 | export default areAddressesEqual; 5 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/areTokensEqual.ts: -------------------------------------------------------------------------------- 1 | import type { Token, VToken } from 'types'; 2 | 3 | export const areTokensEqual = (tokenA: Token | VToken, tokenB: Token | VToken) => 4 | tokenA.address.toLowerCase() === tokenB.address.toLowerCase(); 5 | 6 | export default areTokensEqual; 7 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/calculateDailyEarningsCents.spec.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | import calculateDailyEarningsCents from './calculateDailyEarningsCents'; 4 | 5 | describe('utilities/calculateDailyEarningsCentss', () => { 6 | test('calculates daily Earnings for a single asset', () => { 7 | expect(calculateDailyEarningsCents(new BigNumber('1924.21991227022443813375')).toString()).toBe( 8 | '5.27183537608280667981', 9 | ); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/calculateDailyEarningsCents.ts: -------------------------------------------------------------------------------- 1 | import type BigNumber from 'bignumber.js'; 2 | 3 | const calculateDailyEarningsCents = (yearlyEarningsCents: BigNumber) => 4 | yearlyEarningsCents.dividedBy(365); 5 | 6 | export default calculateDailyEarningsCents; 7 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/calculateHealthFactor/index.tsx: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | export const calculateHealthFactor = ({ 4 | liquidationThresholdCents, 5 | borrowBalanceCents, 6 | }: { 7 | liquidationThresholdCents: number; 8 | borrowBalanceCents: number; 9 | }) => { 10 | if (borrowBalanceCents === 0) { 11 | return Number.POSITIVE_INFINITY; 12 | } 13 | 14 | return Number(new BigNumber(liquidationThresholdCents).div(borrowBalanceCents).toFixed(2)); 15 | }; 16 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/calculatePercentage.ts: -------------------------------------------------------------------------------- 1 | export interface CalculatePercentageInput { 2 | numerator: number; 3 | denominator: number; 4 | } 5 | 6 | const calculatePercentage = ({ numerator, denominator }: CalculatePercentageInput) => { 7 | if (denominator === 0) { 8 | return 0; 9 | } 10 | 11 | return (numerator * 100) / denominator; 12 | }; 13 | 14 | export default calculatePercentage; 15 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/compareBooleans.ts: -------------------------------------------------------------------------------- 1 | const compareBooleans = (valueA: boolean, valueB: boolean, direction: 'asc' | 'desc'): number => { 2 | if (valueA === true && valueB === false) { 3 | return direction === 'asc' ? 1 : -1; 4 | } 5 | 6 | if (valueA === false && valueB === true) { 7 | return direction === 'asc' ? -1 : 1; 8 | } 9 | 10 | return 0; 11 | }; 12 | 13 | export default compareBooleans; 14 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/compareNumbers.ts: -------------------------------------------------------------------------------- 1 | const compareNumbers = ( 2 | valueA: number | undefined, 3 | valueB: number | undefined, 4 | direction: 'asc' | 'desc', 5 | ): number => { 6 | if (valueA === undefined || valueB === undefined) { 7 | return 0; 8 | } 9 | 10 | if (valueA < valueB) { 11 | return direction === 'asc' ? -1 : 1; 12 | } 13 | 14 | if (valueA > valueB) { 15 | return direction === 'asc' ? 1 : -1; 16 | } 17 | 18 | return 0; 19 | }; 20 | 21 | export default compareNumbers; 22 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/compareStrings.ts: -------------------------------------------------------------------------------- 1 | const compareStrings = ( 2 | valueA: string | undefined, 3 | valueB: string | undefined, 4 | direction: 'asc' | 'desc', 5 | ): number => { 6 | if (valueA === undefined || valueB === undefined) { 7 | return 0; 8 | } 9 | 10 | return direction === 'asc' ? valueA.localeCompare(valueB) : valueB.localeCompare(valueA); 11 | }; 12 | 13 | export default compareStrings; 14 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/convertAprBipsToApy/__tests__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { convertAprBipsToApy } from '..'; 2 | 3 | describe('convertAprBipsToApy', () => { 4 | it('converts APR bips to APY', () => { 5 | const res = convertAprBipsToApy({ 6 | aprBips: '23', 7 | }); 8 | 9 | expect(res).toMatchInlineSnapshot('"0.23026397657694986"'); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/convertAprBipsToApy/index.ts: -------------------------------------------------------------------------------- 1 | import { DAYS_PER_YEAR } from 'constants/time'; 2 | 3 | import { calculateYearlyPercentageRate } from '../calculateYearlyPercentageRate'; 4 | 5 | export const convertAprBipsToApy = ({ aprBips }: { aprBips: string }) => { 6 | // Convert bips to daily rate 7 | const dailyPercentageRate = +aprBips / 10000 / DAYS_PER_YEAR; 8 | // Convert daily rate to APY 9 | return calculateYearlyPercentageRate({ dailyPercentageRate }); 10 | }; 11 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/convertDollarsToCents.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | const convertDollarsToCents = (value: BigNumber) => new BigNumber(value).times(100); 4 | 5 | export default convertDollarsToCents; 6 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/convertFactorFromSmartContract.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | import { COMPOUND_MANTISSA } from 'constants/compoundMantissa'; 4 | 5 | const convertFactorFromSmartContract = ({ factor }: { factor: BigNumber }) => 6 | new BigNumber(factor).dividedBy(COMPOUND_MANTISSA).dp(6).toNumber(); 7 | 8 | export default convertFactorFromSmartContract; 9 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/convertPercentageFromSmartContract.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | import { SMART_CONTRACT_PERCENTAGE_DECIMALS } from 'constants/smartContractPercentageDecimal'; 4 | 5 | const DIVIDER = 10 ** SMART_CONTRACT_PERCENTAGE_DECIMALS; 6 | 7 | const convertPercentageFromSmartContract = (factor: string | BigNumber) => 8 | new BigNumber(factor) 9 | .dividedBy(DIVIDER) 10 | // Convert to percentage 11 | .multipliedBy(100) 12 | .toNumber(); 13 | 14 | export default convertPercentageFromSmartContract; 15 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/convertPriceMantissaToDollars/index.ts: -------------------------------------------------------------------------------- 1 | import BigNumber from 'bignumber.js'; 2 | 3 | const convertPriceMantissaToDollars = ({ 4 | priceMantissa, 5 | decimals, 6 | }: { 7 | priceMantissa: BigNumber | string; 8 | decimals: number; 9 | }) => new BigNumber(priceMantissa).dividedBy(10 ** (36 - decimals)); 10 | 11 | export default convertPriceMantissaToDollars; 12 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/convertToDate/index.ts: -------------------------------------------------------------------------------- 1 | export const convertToDate = ({ timestampSeconds }: { timestampSeconds: number }) => 2 | new Date(timestampSeconds * 1000); 3 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/convertTokensToMantissa.ts: -------------------------------------------------------------------------------- 1 | import type BigNumber from 'bignumber.js'; 2 | 3 | import type { Token } from 'types'; 4 | 5 | export const convertTokensToMantissa = ({ value, token }: { value: BigNumber; token: Token }) => 6 | value.multipliedBy(10 ** token.decimals).dp(0); 7 | 8 | export default convertTokensToMantissa; 9 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/cwd.ts: -------------------------------------------------------------------------------- 1 | const cwd = () => process.cwd(); 2 | export default cwd; 3 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/extractEnumValues.ts: -------------------------------------------------------------------------------- 1 | export function extractEnumValues( 2 | enumObject: T, 3 | ): T[keyof T][] { 4 | return Object.values(enumObject).filter((value): value is T[keyof T] => !Number.isNaN(+value)); 5 | } 6 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/extractSettledPromiseValue.ts: -------------------------------------------------------------------------------- 1 | const extractSettledPromiseValue = (settledPromise: PromiseSettledResult) => 2 | settledPromise.status === 'fulfilled' ? settledPromise.value : undefined; 3 | 4 | export default extractSettledPromiseValue; 5 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/findTokenByAddress.ts: -------------------------------------------------------------------------------- 1 | import type { Token, VToken } from 'types'; 2 | import { areAddressesEqual } from 'utilities'; 3 | 4 | function findTokenByAddress({ 5 | address, 6 | tokens, 7 | }: { 8 | address: string; 9 | tokens: TToken[]; 10 | }) { 11 | return tokens.find(token => areAddressesEqual(token.address, address)); 12 | } 13 | 14 | export default findTokenByAddress; 15 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/generatePseudoRandomRefetchInterval/index.ts: -------------------------------------------------------------------------------- 1 | export const generatePseudoRandomRefetchInterval = () => 2 | // Return a refetch interval from 9000 to 15000 milliseconds (approximately 3 to 5 blocks) 3 | +(Math.random() * 6000 + 9000).toFixed(0); 4 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/generateTransactionDeadline.ts: -------------------------------------------------------------------------------- 1 | import { TRANSACTION_TIMEOUT_S } from 'constants/transactionTimeout'; 2 | 3 | export const generateTransactionDeadline = () => 4 | BigInt(Math.trunc(new Date().getTime() / 1000) + TRANSACTION_TIMEOUT_S); 5 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/getCombinedDistributionApys/__tests__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { assetData as assets } from '__mocks__/models/asset'; 2 | 3 | import getCombinedDistributionApys from '..'; 4 | 5 | describe('utilities/getCombinedDistributionApys', () => { 6 | it('calculates combined distribution APYS correctly', () => { 7 | assets.forEach(asset => { 8 | const result = getCombinedDistributionApys({ 9 | asset, 10 | }); 11 | 12 | expect(result).toMatchSnapshot(); 13 | }); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/isProposalExecutable/index.ts: -------------------------------------------------------------------------------- 1 | import { isBefore } from 'date-fns/isBefore'; 2 | 3 | export type IsProposalExecutableInput = { 4 | now: Date; 5 | isQueued: boolean; 6 | executionEtaDate?: Date; 7 | }; 8 | 9 | export const isProposalExecutable = ({ 10 | now, 11 | isQueued, 12 | executionEtaDate, 13 | }: IsProposalExecutableInput) => 14 | isQueued && !!(executionEtaDate && isBefore(executionEtaDate, now)); 15 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/notUndefined.ts: -------------------------------------------------------------------------------- 1 | const notUndefined = (value: TValue | undefined): value is TValue => value !== undefined; 2 | 3 | export default notUndefined; 4 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/parseFunctionSignature.ts: -------------------------------------------------------------------------------- 1 | import { type AbiFunction, parseAbiItem } from 'viem'; 2 | 3 | const parseFunctionSignature = (value: string | undefined) => { 4 | try { 5 | if (!value) return undefined; 6 | 7 | // Parse the function signature 8 | const fragment = parseAbiItem(`function ${value.replace(' ', '')}`); 9 | 10 | return fragment as AbiFunction; 11 | } catch { 12 | return undefined; 13 | } 14 | }; 15 | 16 | export default parseFunctionSignature; 17 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/removeDuplicates/__tests__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import removeDuplicates from '..'; 2 | 3 | describe('utilities/removeDuplicates', () => { 4 | it('filters out duplicates from an array of strings and numbers', () => { 5 | const result = removeDuplicates(['duplicate', 1, 'duplicate', 2, 3, 'unique', 2]); 6 | expect(result).toMatchInlineSnapshot(` 7 | [ 8 | "duplicate", 9 | 1, 10 | 2, 11 | 3, 12 | "unique", 13 | ] 14 | `); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/removeDuplicates/index.ts: -------------------------------------------------------------------------------- 1 | const removeDuplicates = (items: TItem[]) => [...new Set(items)]; 2 | export default removeDuplicates; 3 | -------------------------------------------------------------------------------- /apps/evm/src/utilities/truncateAddress.ts: -------------------------------------------------------------------------------- 1 | export const truncateAddress = (address: string) => `${address.slice(0, 4)}...${address.slice(-4)}`; 2 | -------------------------------------------------------------------------------- /apps/evm/static.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": "build/", 3 | "routes": { 4 | "/**": "index.html" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /apps/evm/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | import path from 'node:path'; 3 | import tailwindConfig from '@venusprotocol/ui/tailwind-config'; 4 | import tailwindCssAnimate from 'tailwindcss-animate'; 5 | 6 | export default { 7 | presets: [tailwindConfig], 8 | content: [ 9 | './index.html', 10 | './src/**/*.{js,ts,jsx,tsx}', 11 | ...tailwindConfig.content.map(dir => 12 | path.join(path.dirname(require.resolve('@venusprotocol/ui')), dir), 13 | ), 14 | ], 15 | plugins: [tailwindCssAnimate], 16 | }; 17 | -------------------------------------------------------------------------------- /apps/evm/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@venusprotocol/typescript-config/base.json", 3 | "compilerOptions": { 4 | "rootDir": ".", 5 | "baseUrl": "./src" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /apps/evm/vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }] 3 | } 4 | -------------------------------------------------------------------------------- /apps/evm/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /apps/landing/.stylelintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ['@venusprotocol/stylelint-config/base.js'], 3 | }; 4 | -------------------------------------------------------------------------------- /apps/landing/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /apps/landing/public/.well-known/walletconnect.txt: -------------------------------------------------------------------------------- 1 | f73a7ae1-a0e3-4453-a362-1e3dcac6c9d3=fffc7673c175c1df1d0da0d3154b8469c5028e49f9149578e648167062f43108 -------------------------------------------------------------------------------- /apps/landing/public/114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/114x114.png -------------------------------------------------------------------------------- /apps/landing/public/120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/120x120.png -------------------------------------------------------------------------------- /apps/landing/public/144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/144x144.png -------------------------------------------------------------------------------- /apps/landing/public/150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/150x150.png -------------------------------------------------------------------------------- /apps/landing/public/152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/152x152.png -------------------------------------------------------------------------------- /apps/landing/public/180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/180x180.png -------------------------------------------------------------------------------- /apps/landing/public/310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/310x150.png -------------------------------------------------------------------------------- /apps/landing/public/57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/57x57.png -------------------------------------------------------------------------------- /apps/landing/public/60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/60x60.png -------------------------------------------------------------------------------- /apps/landing/public/70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/70x70.png -------------------------------------------------------------------------------- /apps/landing/public/72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/72x72.png -------------------------------------------------------------------------------- /apps/landing/public/76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/76x76.png -------------------------------------------------------------------------------- /apps/landing/public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /apps/landing/public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /apps/landing/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/apple-touch-icon.png -------------------------------------------------------------------------------- /apps/landing/public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /apps/landing/public/coins/aave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/aave.png -------------------------------------------------------------------------------- /apps/landing/public/coins/ada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/ada.png -------------------------------------------------------------------------------- /apps/landing/public/coins/alpaca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/alpaca.png -------------------------------------------------------------------------------- /apps/landing/public/coins/bch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/bch.png -------------------------------------------------------------------------------- /apps/landing/public/coins/beth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/beth.png -------------------------------------------------------------------------------- /apps/landing/public/coins/bifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/bifi.png -------------------------------------------------------------------------------- /apps/landing/public/coins/bnb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/bnb.png -------------------------------------------------------------------------------- /apps/landing/public/coins/bnbx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/bnbx.png -------------------------------------------------------------------------------- /apps/landing/public/coins/btcb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/btcb.png -------------------------------------------------------------------------------- /apps/landing/public/coins/busd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/busd.png -------------------------------------------------------------------------------- /apps/landing/public/coins/busd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/landing/public/coins/cake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/cake.png -------------------------------------------------------------------------------- /apps/landing/public/coins/dai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/dai.png -------------------------------------------------------------------------------- /apps/landing/public/coins/doge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/doge.png -------------------------------------------------------------------------------- /apps/landing/public/coins/dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/dot.png -------------------------------------------------------------------------------- /apps/landing/public/coins/eth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/eth.png -------------------------------------------------------------------------------- /apps/landing/public/coins/fil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/fil.png -------------------------------------------------------------------------------- /apps/landing/public/coins/hay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/hay.png -------------------------------------------------------------------------------- /apps/landing/public/coins/link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/link.png -------------------------------------------------------------------------------- /apps/landing/public/coins/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/landing/public/coins/ltc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/ltc.png -------------------------------------------------------------------------------- /apps/landing/public/coins/luna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/luna.png -------------------------------------------------------------------------------- /apps/landing/public/coins/matic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/matic.png -------------------------------------------------------------------------------- /apps/landing/public/coins/nft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/nft.png -------------------------------------------------------------------------------- /apps/landing/public/coins/raca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/raca.png -------------------------------------------------------------------------------- /apps/landing/public/coins/sxp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/sxp.png -------------------------------------------------------------------------------- /apps/landing/public/coins/the.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/landing/public/coins/trx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/trx.png -------------------------------------------------------------------------------- /apps/landing/public/coins/tusd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/tusd.png -------------------------------------------------------------------------------- /apps/landing/public/coins/tusd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/landing/public/coins/usdc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/usdc.png -------------------------------------------------------------------------------- /apps/landing/public/coins/usdt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/usdt.png -------------------------------------------------------------------------------- /apps/landing/public/coins/ust.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/ust.png -------------------------------------------------------------------------------- /apps/landing/public/coins/vaave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/vaave.png -------------------------------------------------------------------------------- /apps/landing/public/coins/vada.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/vada.png -------------------------------------------------------------------------------- /apps/landing/public/coins/vrt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/landing/public/coins/xrp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/xrp.png -------------------------------------------------------------------------------- /apps/landing/public/coins/xrp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/landing/public/coins/xvs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/coins/xvs.png -------------------------------------------------------------------------------- /apps/landing/public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/favicon-16x16.png -------------------------------------------------------------------------------- /apps/landing/public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/favicon-32x32.png -------------------------------------------------------------------------------- /apps/landing/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/favicon.ico -------------------------------------------------------------------------------- /apps/landing/public/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/icon.png -------------------------------------------------------------------------------- /apps/landing/public/icon16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/icon16.png -------------------------------------------------------------------------------- /apps/landing/public/icon32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/icon32.png -------------------------------------------------------------------------------- /apps/landing/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Venus", 3 | "name": "Venus", 4 | "icons": [ 5 | { 6 | "src": "icon16.png", 7 | "sizes": "16x16", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "icon32.png", 12 | "sizes": "32x32", 13 | "type": "image/png" 14 | } 15 | ], 16 | "start_url": "./index.html", 17 | "display": "standalone", 18 | "theme_color": "#3A78FF", 19 | "background_color": "#121620" 20 | } 21 | -------------------------------------------------------------------------------- /apps/landing/public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/mstile-150x150.png -------------------------------------------------------------------------------- /apps/landing/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /apps/landing/public/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/public/share.png -------------------------------------------------------------------------------- /apps/landing/src/api/hooks/useProposals.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from '@tanstack/react-query'; 2 | import { fetchProposalCount } from '../index'; 3 | 4 | export const useProposalsCountFromApi = () => 5 | useQuery({ 6 | queryKey: ['proposalCount'], 7 | queryFn: fetchProposalCount, 8 | }); 9 | -------------------------------------------------------------------------------- /apps/landing/src/assets/styles/variables.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-background-secondary: #1E2431; 3 | --color-icon-background: #2D3549; 4 | --global-max-width: 1280px; 5 | } 6 | -------------------------------------------------------------------------------- /apps/landing/src/components/App.module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | min-height: 100vh; 6 | min-width: 320px; 7 | } -------------------------------------------------------------------------------- /apps/landing/src/components/Banner/assets/unichainLogo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/landing/src/components/Benefits/assets/1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /apps/landing/src/components/Footer/assets/x.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/landing/src/components/Governance/assets/planets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/Governance/assets/planets.png -------------------------------------------------------------------------------- /apps/landing/src/components/Header/assets/iconArrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/landing/src/components/Link/LinkLaunchApp.tsx: -------------------------------------------------------------------------------- 1 | import Link, { type ILinkProps } from './Link'; 2 | 3 | export type ILinkLaunchAppProps = Omit; 4 | 5 | const LinkLaunchApp: React.FC = props => ( 6 | 7 | Launch app 8 | 9 | ); 10 | 11 | export default LinkLaunchApp; 12 | -------------------------------------------------------------------------------- /apps/landing/src/components/MainContent/Background.module.css: -------------------------------------------------------------------------------- 1 | .bg { 2 | background-image: url('./assets/bgMobile.png'); 3 | background-size: 100% 862px; 4 | background-repeat: no-repeat; 5 | background-position: right top; 6 | 7 | @media (min-width: 640px) { 8 | background-image: url('./assets/bg.png'); 9 | background-size: 520px 802px; 10 | } 11 | 12 | @media (min-width: 840px) { 13 | background-size: 623px 937px; 14 | } 15 | 16 | @media (min-width: 1280px) { 17 | background-size: 950px 1400px; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /apps/landing/src/components/MainContent/Background.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@venusprotocol/ui'; 2 | import Market from '../Market/Market'; 3 | import s from './Background.module.css'; 4 | import Intro from './Intro'; 5 | 6 | interface IMainContentProps { 7 | className?: string; 8 | } 9 | 10 | const Background: React.FC = ({ className }) => ( 11 |
12 | 13 | 14 |
15 | ); 16 | 17 | export default Background; 18 | -------------------------------------------------------------------------------- /apps/landing/src/components/MainContent/MainContent.module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | width: 100%; 3 | max-width: var(--global-max-width); 4 | } 5 | 6 | -------------------------------------------------------------------------------- /apps/landing/src/components/MainContent/assets/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/landing/src/components/MainContent/assets/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/MainContent/assets/bg.png -------------------------------------------------------------------------------- /apps/landing/src/components/MainContent/assets/bgMobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/MainContent/assets/bgMobile.png -------------------------------------------------------------------------------- /apps/landing/src/components/NavigationLinks/NavigationLinks.module.css: -------------------------------------------------------------------------------- 1 | .root { 2 | display: flex; 3 | } 4 | -------------------------------------------------------------------------------- /apps/landing/src/components/Protection/assets/bugBounty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/Protection/assets/bugBounty.png -------------------------------------------------------------------------------- /apps/landing/src/components/Protection/assets/protection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/Protection/assets/protection.png -------------------------------------------------------------------------------- /apps/landing/src/components/Safety/assets/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /apps/landing/src/components/VenusPrime/assets/venusPrimeLogo1280.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/VenusPrime/assets/venusPrimeLogo1280.png -------------------------------------------------------------------------------- /apps/landing/src/components/VenusPrime/assets/venusPrimeLogo375.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/VenusPrime/assets/venusPrimeLogo375.png -------------------------------------------------------------------------------- /apps/landing/src/components/VenusPrime/assets/venusPrimeLogo640.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/VenusPrime/assets/venusPrimeLogo640.png -------------------------------------------------------------------------------- /apps/landing/src/components/VenusPrime/assets/venusPrimeLogo840.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/apps/landing/src/components/VenusPrime/assets/venusPrimeLogo840.png -------------------------------------------------------------------------------- /apps/landing/src/constants/production.ts: -------------------------------------------------------------------------------- 1 | export const APP_MAIN_PRODUCTION_URL = 'https://app.venus.io'; 2 | export const LANDING_PAGE_PRODUCTION_URL = 'https://venus.io'; 3 | export const DOC_URL = 'https://docs-v4.venus.io'; 4 | export const WHITEPAPERS_URL = 5 | 'https://github.com/VenusProtocol/venus-protocol-documentation/tree/main/whitepapers'; 6 | -------------------------------------------------------------------------------- /apps/landing/src/index.tsx: -------------------------------------------------------------------------------- 1 | import 'normalize.css'; 2 | import { createRoot } from 'react-dom/client'; 3 | import './assets/styles/index.css'; 4 | import App from './components/App'; 5 | 6 | // Clear the existing HTML content 7 | document.body.innerHTML = '
'; 8 | 9 | // Render your React component instead 10 | const root = createRoot(document.getElementById('app')!); 11 | root.render(); 12 | -------------------------------------------------------------------------------- /apps/landing/src/types/global.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | import React = require('react'); 3 | 4 | export const ReactComponent: React.FC>; 5 | const src: string; 6 | export default src; 7 | } 8 | -------------------------------------------------------------------------------- /apps/landing/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@venusprotocol/typescript-config/base.json" 3 | } 4 | -------------------------------------------------------------------------------- /apps/landing/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /apps/landing/vite.config.mts: -------------------------------------------------------------------------------- 1 | import react from '@vitejs/plugin-react'; 2 | import { defineConfig } from 'vite'; 3 | import svgr from 'vite-plugin-svgr'; 4 | import viteTsConfigPaths from 'vite-tsconfig-paths'; 5 | 6 | export default defineConfig({ 7 | plugins: [react(), viteTsConfigPaths(), svgr()], 8 | build: { 9 | sourcemap: true, 10 | outDir: 'build', 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { extends: ['@commitlint/config-conventional'] }; 2 | -------------------------------------------------------------------------------- /configs/stylelint/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @venusprotocol/stylelint-config 2 | 3 | ## 0.0.1 4 | 5 | ### Patch Changes 6 | 7 | - 0098840: Replace Prettier and ESLint with Biome 8 | -------------------------------------------------------------------------------- /configs/stylelint/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@venusprotocol/stylelint-config", 3 | "version": "0.0.1", 4 | "private": true, 5 | "license": "MIT", 6 | "publishConfig": { 7 | "access": "public" 8 | }, 9 | "devDependencies": { 10 | "stylelint": "^16.2.1", 11 | "stylelint-config-standard": "^34.0.0", 12 | "stylelint-scss": "^6.1.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /configs/typescript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@venusprotocol/typescript-config", 3 | "version": "0.0.0", 4 | "private": true, 5 | "license": "MIT", 6 | "publishConfig": { 7 | "access": "public" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3.9" 2 | 3 | services: 4 | venus-ui-dev: 5 | build: 6 | context: . 7 | dockerfile: ./Dockerfile.local 8 | command: 9 | - sh 10 | - -c 11 | - | 12 | npm install 13 | npm start 14 | ports: 15 | - 3001:3001 16 | volumes: 17 | - ./:/usr/app 18 | restart: always 19 | 20 | venus-ui-prod: 21 | build: 22 | context: . 23 | dockerfile: ./Dockerfile 24 | ports: 25 | - 3001:80 26 | restart: always 27 | -------------------------------------------------------------------------------- /nginx_default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | listen [::]:80; 4 | server_name localhost; 5 | 6 | location / { 7 | root /usr/share/nginx/html; 8 | index index.html index.htm; 9 | try_files $uri /index.html; 10 | } 11 | } -------------------------------------------------------------------------------- /packages/chains/README.md: -------------------------------------------------------------------------------- 1 | # Venus Protocol - chains package 2 | 3 | This package lists all the chains supported by the Venus Protocol. -------------------------------------------------------------------------------- /packages/chains/src/img/chains/base.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/chains/src/img/chains/unichain.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/chains/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | export * from './chainMetadata'; 3 | -------------------------------------------------------------------------------- /packages/chains/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@venusprotocol/typescript-config/base.json" 3 | } 4 | -------------------------------------------------------------------------------- /packages/ui/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # @venusprotocol/ui 2 | 3 | ## 0.3.0 4 | 5 | ### Minor Changes 6 | 7 | - ba7f137: show account health factor 8 | 9 | ## 0.2.0 10 | 11 | ### Minor Changes 12 | 13 | - f335660: add UI package 14 | -------------------------------------------------------------------------------- /packages/ui/README.md: -------------------------------------------------------------------------------- 1 | # Venus Protocol - UI package 2 | 3 | This package lists contains reusable components and styles for the Venus Protocol. 4 | -------------------------------------------------------------------------------- /packages/ui/src/components/Spinner/index.stories.tsx: -------------------------------------------------------------------------------- 1 | import type { Meta, StoryObj } from '@storybook/react'; 2 | 3 | import { Spinner } from '.'; 4 | 5 | export default { 6 | title: 'Components/Spinner', 7 | component: Spinner, 8 | } as Meta; 9 | 10 | type Story = StoryObj; 11 | 12 | export const Default: Story = {}; 13 | -------------------------------------------------------------------------------- /packages/ui/src/components/Spinner/spinnerAnimation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/components/Spinner/spinnerAnimation.gif -------------------------------------------------------------------------------- /packages/ui/src/fonts/bebasNeue/bebasNeue.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/bebasNeue/bebasNeue.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/bebasNeue/bebasNeue.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/bebasNeue/bebasNeue.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/bebasNeue/bebasNeue.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/bebasNeue/bebasNeue.woff2 -------------------------------------------------------------------------------- /packages/ui/src/fonts/bebasNeue/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'BebasNeue'; 3 | src: 4 | url('./bebasNeue.ttf') format('truetype'), 5 | url('./bebasNeue.woff2') format('woff2'), 6 | url('./bebasNeue.woff') format('woff'); 7 | font-weight: 600; 8 | font-style: normal; 9 | } 10 | 11 | @layer base { 12 | :root { 13 | --font-bebas-neue: 'BebasNeue', sans-serif; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/ui/src/fonts/inconsolata/inconsolataSemiBold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/inconsolata/inconsolataSemiBold.eot -------------------------------------------------------------------------------- /packages/ui/src/fonts/inconsolata/inconsolataSemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/inconsolata/inconsolataSemiBold.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/inconsolata/inconsolataSemiBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/inconsolata/inconsolataSemiBold.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/inconsolata/inconsolataSemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/inconsolata/inconsolataSemiBold.woff2 -------------------------------------------------------------------------------- /packages/ui/src/fonts/inconsolata/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Inconsolata'; 3 | src: url('./inconsolataSemiBold.eot'); 4 | src: url('./inconsolataSemiBold.eot?#iefix') format('embedded-opentype'), 5 | url('./inconsolataSemiBold.woff2') format('woff2'), 6 | url('./inconsolataSemiBold.woff') format('woff'), 7 | url('./inconsolataSemiBold.ttf') format('truetype'); 8 | font-weight: 600; 9 | font-style: normal; 10 | } 11 | 12 | @layer base { 13 | :root { 14 | --font-inconsolata-nova: 'Inconsolata', sans-serif; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/ProximaNova-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/ProximaNova-Medium.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaBold.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaBold.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaBold.woff2 -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaBoldIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaBoldIt.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaBoldIt.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaBoldIt.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaBoldIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaBoldIt.woff2 -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaMedium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaMedium.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaMedium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaMedium.woff2 -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaRegular.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaRegular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaRegular.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaRegular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaRegular.woff2 -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaRegularIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaRegularIt.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaRegularIt.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaRegularIt.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaRegularIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaRegularIt.woff2 -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaSemibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaSemibold.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaSemibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaSemibold.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaSemibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaSemibold.woff2 -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaSemiboldIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaSemiboldIt.ttf -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaSemiboldIt.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaSemiboldIt.woff -------------------------------------------------------------------------------- /packages/ui/src/fonts/proximaNova/proximaNovaSemiboldIt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VenusProtocol/venus-protocol-interface/76ed927648cf59d64f05666ede83c491093d96a3/packages/ui/src/fonts/proximaNova/proximaNovaSemiboldIt.woff2 -------------------------------------------------------------------------------- /packages/ui/src/index.ts: -------------------------------------------------------------------------------- 1 | // Theme config 2 | export * from './theme'; 3 | export * from './tailwind.config'; 4 | 5 | // Utilities 6 | export * from './utilities/cn'; 7 | 8 | // Components 9 | export * from './components/Button'; 10 | export * from './components/Spinner'; 11 | -------------------------------------------------------------------------------- /packages/ui/src/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | import { theme } from './theme'; 3 | 4 | export default { 5 | content: ['**/*.{js,ts,jsx,tsx}'], 6 | mode: 'jit', 7 | theme, 8 | }; 9 | -------------------------------------------------------------------------------- /packages/ui/src/utilities/cn/index.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from 'clsx'; 2 | import { twMerge } from 'tailwind-merge'; 3 | 4 | export const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs)); 5 | -------------------------------------------------------------------------------- /packages/ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@venusprotocol/typescript-config/base.json" 3 | } 4 | -------------------------------------------------------------------------------- /pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Jira ticket(s) 2 | 3 | VEN-XXX 4 | 5 | ## Changes 6 | 7 | - 8 | --------------------------------------------------------------------------------