├── .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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------
/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 |
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 |
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 |
4 |
--------------------------------------------------------------------------------
/apps/landing/src/components/Benefits/assets/1.svg:
--------------------------------------------------------------------------------
1 |
6 |
--------------------------------------------------------------------------------
/apps/landing/src/components/Footer/assets/x.svg:
--------------------------------------------------------------------------------
1 |
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 |
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 |
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 |
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 |
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 |
4 |
--------------------------------------------------------------------------------
/packages/chains/src/img/chains/unichain.svg:
--------------------------------------------------------------------------------
1 |
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 |
--------------------------------------------------------------------------------