├── .browserslistrc ├── .env.e2e ├── .eslintignore ├── .eslintrc.js ├── .github └── workflows │ ├── ci.yml │ ├── codeql-analysis.yml │ ├── dependabot.yml │ └── main.yml ├── .gitignore ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── LICENSE.md ├── README.md ├── babel.config.js ├── cypress.json ├── cypress ├── fixtures │ ├── custom_networks │ │ ├── basic_network.json │ │ └── basic_network_broken.json │ ├── example.json │ └── keystore_v5.json ├── integration │ └── basic_functionality.spec.ts ├── plugins │ └── index.ts └── support │ ├── commands.js │ └── index.js ├── guides ├── formatting.md └── using_cypress.md ├── jest.config.js ├── jest.setup.js ├── package.json ├── public ├── _headers ├── ava_letter_icon.png ├── favicon.ico ├── favicon.png ├── gif │ ├── loading_0.gif │ ├── loading_1.gif │ └── loading_2.gif ├── img │ ├── access_icons │ │ ├── day │ │ │ ├── keystore.svg │ │ │ ├── ledger.svg │ │ │ ├── mnemonic.svg │ │ │ └── privatekey.svg │ │ └── night │ │ │ ├── keystore.svg │ │ │ ├── ledger.svg │ │ │ ├── mnemonic.svg │ │ │ └── privatekey.svg │ ├── account-balance.png │ ├── ava_icon.png │ ├── ava_logo_white.png │ ├── avax_icon_circle.png │ ├── center_focus.png │ ├── copy_icon.png │ ├── copy_night.svg │ ├── dots_bg.svg │ ├── faucet_icon.png │ ├── icons │ │ ├── android-chrome-144x144.png │ │ ├── apple-touch-icon.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ └── mstile-150x150.png │ ├── ledger_icon.png │ ├── ledger_night.svg │ ├── logo_dark.svg │ ├── modal_icons │ │ ├── mainnet_addr.svg │ │ └── mainnet_addr_night.svg │ ├── og_image.png │ ├── paper_wallet │ │ ├── Logo.png │ │ ├── my_address.png │ │ └── private_key.png │ ├── print_icon_night.svg │ ├── qr_icon.png │ ├── qr_icon_night.svg │ ├── wifi-solid.svg │ └── wifi.png ├── index.html ├── question-solid.svg ├── robots.txt └── wallet_og.png ├── src ├── AVA.ts ├── App.vue ├── ERC20Tokenlist.json ├── ERC721Tokenlist.json ├── _dark_theme.scss ├── _light_theme.scss ├── _main.scss ├── assets │ ├── QR.png │ ├── ava_letter_icon.png │ ├── diamond-primary-night.svg │ ├── diamond-primary.png │ ├── diamond-primary.svg │ ├── diamond-secondary-night.svg │ ├── diamond-secondary.png │ ├── hex.svg │ ├── hex_ava.svg │ ├── import_key_bg.png │ ├── key_active.svg │ ├── key_inactive.svg │ ├── key_inactive_night.png │ ├── keyphrase.png │ ├── keyphrase_night.svg │ ├── network_ava.png │ ├── network_off.png │ ├── network_off_night.svg │ ├── network_on.png │ ├── nft_preview.png │ ├── nft_preview_night.png │ ├── paper_wallet │ │ └── bg.png │ ├── search.png │ ├── search_night.svg │ ├── sidebar │ │ ├── Home.png │ │ ├── Key.png │ │ ├── Transfer.png │ │ ├── activity_nav.svg │ │ ├── activity_nav_night.svg │ │ ├── advanced_nav.png │ │ ├── advanced_nav_night.png │ │ ├── earn_nav.png │ │ ├── earn_nav_night.png │ │ ├── manage_nav.png │ │ ├── manage_nav_night.svg │ │ ├── portfolio_nav.png │ │ ├── portfolio_nav_night.png │ │ ├── portfolio_nav_night.svg │ │ ├── studio_nav.svg │ │ ├── studio_nav_night.svg │ │ ├── transfer_nav.png │ │ └── transfer_nav_night.svg │ ├── spinner-solid.svg │ ├── success.svg │ ├── theme_toggle │ │ ├── day.svg │ │ └── night.svg │ ├── trash_can.svg │ ├── trash_can_dark.svg │ ├── volume-up-solid.svg │ ├── wallet_logo.png │ ├── wallet_logo.svg │ ├── wallet_logo_dark.png │ └── wallet_logo_dark.svg ├── components │ ├── Access │ │ ├── AccountsFound.vue │ │ └── menu.scss │ ├── Analytics │ │ └── Analytics.vue │ ├── CreateWalletWorkflow │ │ ├── CreateWallet.vue │ │ └── MnemonicCopied.vue │ ├── Ledger │ │ └── LedgerButton.vue │ ├── Navbar.vue │ ├── NetworkSettings │ │ ├── CustomPage.vue │ │ ├── EditPage.vue │ │ ├── ListPage.vue │ │ ├── NetworkMenu.vue │ │ └── NetworkRow.vue │ ├── NftCards │ │ ├── BaseNftCard.vue │ │ ├── URL_NFT.vue │ │ └── UTF8_NFT.vue │ ├── Notifications.vue │ ├── SidePanels │ │ ├── History │ │ │ ├── TxHistoryValueFunctional.vue │ │ │ └── ViewTypes │ │ │ │ ├── BaseTx.vue │ │ │ │ ├── BaseTxNFTOutput.vue │ │ │ │ ├── BaseTxOutput.vue │ │ │ │ ├── BaseTxUtxo.vue │ │ │ │ ├── ImportExport.vue │ │ │ │ ├── StakingTx.vue │ │ │ │ ├── filterOwnedAddresses.ts │ │ │ │ └── getExportBalances.ts │ │ ├── MainPanel.vue │ │ ├── TransactionHistoryPanel.vue │ │ ├── TxHistoryNftFamilyGroup.vue │ │ ├── TxHistoryRow.vue │ │ ├── TxHistoryValue.vue │ │ └── types.ts │ ├── TestNetBanner.vue │ ├── misc │ │ ├── AddressDropdown │ │ │ ├── AddressDropdown.vue │ │ │ └── ListItem.vue │ │ ├── AvaxInput.vue │ │ ├── BalancePopup │ │ │ ├── BalanceDropdown.vue │ │ │ ├── BalancePopup.vue │ │ │ ├── BalanceRow.vue │ │ │ ├── CollectibleFamily.vue │ │ │ └── CollectibleTab.vue │ │ ├── BigNumInput.vue │ │ ├── CopyText.vue │ │ ├── CurrencyInput.vue │ │ ├── CurrencyInputDropdown.vue │ │ ├── CurrencySelect │ │ │ ├── CurrencySelect.vue │ │ │ └── types.ts │ │ ├── DayNightToggle.vue │ │ ├── Dropdown.vue │ │ ├── ERC721View.vue │ │ ├── EVMInputDropdown │ │ │ ├── EVMAssetDropdown.vue │ │ │ ├── EVMInputDropdown.vue │ │ │ └── types.ts │ │ ├── Expandable.vue │ │ ├── FaucetLink.vue │ │ ├── FileInput.vue │ │ ├── Hexagon.vue │ │ ├── Identicon.vue │ │ ├── ImageDayNight.vue │ │ ├── LanguageSelect │ │ │ ├── LanguageSelect.vue │ │ │ └── types.ts │ │ ├── MnemonicDisplay.vue │ │ ├── MnemonicPasswordInput.vue │ │ ├── MultiSelect.vue │ │ ├── NetworkLoadingBlock.vue │ │ ├── NftFamilyCardsPreview.vue │ │ ├── NftInputDropdown.vue │ │ ├── NftPayloadView │ │ │ ├── NftPayloadAllow.vue │ │ │ ├── NftPayloadView.vue │ │ │ ├── blacklist.ts │ │ │ ├── views │ │ │ │ ├── GenericPayloadView.vue │ │ │ │ ├── JsonPayloadView.vue │ │ │ │ ├── UrlPayloadView.vue │ │ │ │ └── UtfPayloadView.vue │ │ │ └── views_small │ │ │ │ ├── GenericPayloadView.vue │ │ │ │ ├── JsonPayloadView.vue │ │ │ │ ├── UrlPayloadView.vue │ │ │ │ └── UtfPayloadView.vue │ │ ├── NumberCounter.vue │ │ ├── RadioButtons.vue │ │ ├── RememberKey.vue │ │ ├── Spinner.vue │ │ ├── TextDisplayCopy.vue │ │ ├── ToS.vue │ │ ├── ToSContent.vue │ │ ├── ToSCoreContent.vue │ │ ├── Tooltip.vue │ │ ├── UrlBanner.vue │ │ ├── UtxoSelect │ │ │ └── UtxoSelect.vue │ │ ├── ValidatorList │ │ │ ├── FilterSettings.vue │ │ │ ├── ValidatorRow.vue │ │ │ ├── ValidatorsList.vue │ │ │ └── types.ts │ │ └── VuetifyDateInput.vue │ ├── modals │ │ ├── AccountSettings │ │ │ ├── AccountSettingsModal.vue │ │ │ ├── ChangePassword.vue │ │ │ ├── DeleteAccount.vue │ │ │ ├── SaveKeys.vue │ │ │ └── style.scss │ │ ├── AddERC20TokenModal.vue │ │ ├── AddERC721TokenModal.vue │ │ ├── AvmNftSelectModal.vue │ │ ├── AvmTokenSelect.vue │ │ ├── ConfirmLogout.vue │ │ ├── ERC721ViewModal.vue │ │ ├── EvmTokenSelect │ │ │ ├── ERC721Row.vue │ │ │ └── EVMTokenSelectModal.vue │ │ ├── ExportAvaxCsvModal.vue │ │ ├── ExportCsvModal.vue │ │ ├── ExportGlacierHistoryModal.vue │ │ ├── ExportKeys.vue │ │ ├── HdDerivationList │ │ │ ├── HDDerivationList.vue │ │ │ ├── HdChainTable.vue │ │ │ ├── HdDerivationListModal.vue │ │ │ ├── HdDerivationListRow.vue │ │ │ ├── HdEmptyAddressRow.vue │ │ │ └── types.ts │ │ ├── ImportKeys.vue │ │ ├── LedgerBlock.vue │ │ ├── LedgerUpgrade.vue │ │ ├── LedgerWalletLoading.vue │ │ ├── MnemonicPhraseModal.vue │ │ ├── Modal.vue │ │ ├── NFTViewModal.vue │ │ ├── PaperWallet │ │ │ └── PaperWallet.vue │ │ ├── PrivateKey.vue │ │ ├── QRModal.vue │ │ ├── SaveAccount │ │ │ ├── SaveAccountModal.vue │ │ │ └── UpgradeToAccountModal.vue │ │ ├── TokenList │ │ │ └── TokenListModal.vue │ │ ├── UpdateKeystore │ │ │ └── UpdateKeystoreModal.vue │ │ ├── UtxoSelect │ │ │ ├── UtxoRow.vue │ │ │ └── UtxoSelect.vue │ │ ├── UtxosBreakdown │ │ │ ├── AVMUTXORow.vue │ │ │ └── UtxosBreakdownModal.vue │ │ ├── VerifyMnemonic.vue │ │ ├── VerifyMnemonic2.vue │ │ └── XpubModal.vue │ └── wallet │ │ ├── Sidebar.vue │ │ ├── TopCards │ │ ├── AddressCard │ │ │ ├── AddressCard.vue │ │ │ └── ChainSelect.vue │ │ └── BalanceCard │ │ │ ├── BalanceCard.vue │ │ │ └── NftCol.vue │ │ ├── TopInfo.vue │ │ ├── activity │ │ └── TxRow.vue │ │ ├── advanced │ │ ├── ChainImport.vue │ │ ├── SignMessage │ │ │ ├── SearchAddress.vue │ │ │ └── SignMessage.vue │ │ └── VerifyMessage.vue │ │ ├── earn │ │ ├── ChainTransfer │ │ │ ├── ChainCard.vue │ │ │ ├── ChainTransfer.vue │ │ │ ├── Form.vue │ │ │ ├── TxState.vue │ │ │ └── types.ts │ │ ├── DateForm.vue │ │ ├── Delegate │ │ │ ├── AddDelegator.vue │ │ │ ├── ConfirmPage.vue │ │ │ ├── NodeCard.vue │ │ │ ├── NodeSelection.vue │ │ │ ├── helper.ts │ │ │ └── types.ts │ │ ├── StakingCalculator.vue │ │ ├── UserRewardRow.vue │ │ ├── UserRewards.vue │ │ ├── UtxoSelectForm.vue │ │ └── Validate │ │ │ ├── AddValidator.vue │ │ │ └── ConfirmPage.vue │ │ ├── manage │ │ ├── AddKeyFile.vue │ │ ├── AddKeyString.vue │ │ ├── AddMnemonic.vue │ │ ├── ExportWallet.vue │ │ ├── KeyRow.vue │ │ └── MyKeys.vue │ │ ├── portfolio │ │ ├── CollectibleFamilyGroup.vue │ │ ├── CollectibleFamilyRow.vue │ │ ├── Collectibles.vue │ │ ├── ERC20Row.vue │ │ ├── ERC721Card.vue │ │ ├── ERC721FamilyRow.vue │ │ ├── FungibleRow.vue │ │ ├── Fungibles.vue │ │ ├── NftCard.vue │ │ ├── nft_card.scss │ │ ├── portfolio.scss │ │ ├── tokens.scss │ │ └── types.ts │ │ ├── sidebar │ │ ├── AccountMenu.vue │ │ └── AnalyticsCheckbox.vue │ │ ├── studio │ │ ├── NewCollectibleFamily.vue │ │ └── mint │ │ │ ├── MintForm.vue │ │ │ ├── MintNft.vue │ │ │ ├── SelectMintUtxo │ │ │ ├── FamilyRow.vue │ │ │ └── SelectMintUTXO.vue │ │ │ ├── forms │ │ │ ├── GenericForm.vue │ │ │ ├── JsonForm.vue │ │ │ ├── UrlForm.vue │ │ │ └── Utf8Form.vue │ │ │ └── types.ts │ │ └── transfer │ │ ├── ChainInput.vue │ │ ├── FormC.vue │ │ ├── NftList.vue │ │ ├── NftListItem.vue │ │ ├── TxList.vue │ │ ├── TxSummary.vue │ │ └── types.ts ├── constants.ts ├── evm.ts ├── explorer_api.ts ├── helpers │ ├── account_helper.ts │ ├── getRandomMnemonicWord.ts │ ├── helper.ts │ ├── history_helper.ts │ ├── issueTx.ts │ ├── price_helper.ts │ ├── setTimeoutInterval.ts │ ├── sortUTXOs.ts │ ├── utxoSelection │ │ ├── constants.ts │ │ ├── getCredentialBytes.ts │ │ ├── getCredentialsSizeFromUtxos.ts │ │ ├── getTxSize.ts │ │ ├── selectMaxUtxoForExportP.ts │ │ ├── selectMaxUtxoForStaking.ts │ │ └── sumUtxos.ts │ ├── utxo_helper.ts │ └── wallet_helper.ts ├── js │ ├── AbiDecoder.ts │ ├── AvaAsset.ts │ ├── AvaNetwork.ts │ ├── AvaNftFamily.ts │ ├── CSV │ │ ├── createUtxoCSV.ts │ │ ├── createUtxoCsvData.test.ts │ │ ├── createUtxoCsvData.ts │ │ └── models.ts │ ├── Crypto.ts │ ├── CypherAES.ts │ ├── ERC721Token.ts │ ├── Erc20Token.ts │ ├── Glacier │ │ ├── Glacier.ts │ │ ├── filterDuplicateGlacierTxs.ts │ │ ├── getBalancesForAddresses.ts │ │ ├── getTransactionsForAddresses.ts │ │ ├── getTxTimestamp.ts │ │ ├── getTxURL.test.ts │ │ ├── getTxURL.ts │ │ ├── getUrlFromTransaction.ts │ │ ├── isOwnedUtxo.ts │ │ ├── listChainsForAddresses.ts │ │ ├── listStakingForAddresses.ts │ │ ├── models.ts │ │ ├── sortGlacierTxs.ts │ │ └── utils.ts │ ├── HdHelper.ts │ ├── IKeystore.ts │ ├── Keystore.ts │ ├── TxHelper.ts │ └── wallets │ │ ├── AbstractHdWallet.ts │ │ ├── AbstractWallet.ts │ │ ├── LedgerWallet.ts │ │ ├── MnemonicPhrase.ts │ │ ├── MnemonicWallet.ts │ │ ├── SingletonWallet.ts │ │ ├── constants.ts │ │ └── types.ts ├── locales │ ├── aafrikans.json │ ├── arabic.json │ ├── ca.json │ ├── cs.json │ ├── danish.json │ ├── de.json │ ├── en.json │ ├── es.json │ ├── finnish.json │ ├── fr.json │ ├── greek.json │ ├── hebrew.json │ ├── hungarian.json │ ├── it.json │ ├── japanese.json │ ├── kr.json │ ├── lang_map.js │ ├── nl.json │ ├── norwegian.json │ ├── polish.json │ ├── pt.json │ ├── romanian.json │ ├── ru.json │ ├── serbian.json │ ├── swedish.json │ ├── thai.json │ ├── tr.json │ ├── uk.json │ ├── vn.json │ ├── zh_hans.json │ └── zh_hant.json ├── main.ts ├── plugins │ ├── i18n.js │ ├── posthog.js │ └── vuetify.ts ├── providers │ ├── index.ts │ ├── socket_c.ts │ └── socket_x.ts ├── router │ └── index.ts ├── services │ ├── history │ │ ├── index.ts │ │ └── utils.ts │ └── index.ts ├── shims-tsx.d.ts ├── shims-vue.d.ts ├── store │ ├── index.ts │ ├── modules │ │ ├── accounts │ │ │ ├── accounts.ts │ │ │ └── types.ts │ │ ├── assets │ │ │ ├── assets.ts │ │ │ ├── fetchTokenList.ts │ │ │ ├── modules │ │ │ │ ├── erc721.ts │ │ │ │ └── types.ts │ │ │ └── types.ts │ │ ├── earn │ │ │ ├── earn.ts │ │ │ └── types.ts │ │ ├── history │ │ │ ├── getGlacierHistory.ts │ │ │ ├── history.ts │ │ │ ├── history_utils.ts │ │ │ └── types.ts │ │ ├── ledger │ │ │ ├── ledger.ts │ │ │ └── types.ts │ │ ├── network │ │ │ ├── constants.ts │ │ │ ├── isMainnetNetworkID.ts │ │ │ ├── isTestnetNetworkID.ts │ │ │ ├── network.ts │ │ │ └── types.ts │ │ ├── notifications │ │ │ ├── notifications.ts │ │ │ └── types.ts │ │ └── platform │ │ │ ├── platform.ts │ │ │ └── types.ts │ └── types.ts ├── utils │ ├── getAddressFromTx.ts │ └── payloadToHash.ts ├── views │ ├── Create.vue │ ├── Home.vue │ ├── Legal.vue │ ├── Wallet.vue │ ├── WalletReadonly.vue │ ├── access │ │ ├── Access.vue │ │ ├── Account.vue │ │ ├── Keystore.vue │ │ ├── Menu.vue │ │ ├── Mnemonic.vue │ │ ├── PrivateKey.vue │ │ └── Xpub.vue │ ├── wallet │ │ ├── Activity.vue │ │ ├── Advanced.vue │ │ ├── CrossChain.vue │ │ ├── Earn.vue │ │ ├── Mainnet.vue │ │ ├── ManageKeys.vue │ │ ├── Portfolio.vue │ │ ├── Studio.vue │ │ └── Transfer.vue │ └── wallet_readonly │ │ ├── Addresses.vue │ │ └── Balances.vue └── wallet_api.ts ├── static.json ├── tests ├── js │ └── wallets │ │ ├── MnemonicPhrase.test.ts │ │ └── SingletonWallet.test.ts └── keystore.test.ts ├── tsconfig.json ├── types ├── bip32-path │ └── index.d.ts └── obsidiansystems__hw-app-avalanche │ └── index.d.ts ├── vue.config.js └── yarn.lock /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | -------------------------------------------------------------------------------- /.env.e2e: -------------------------------------------------------------------------------- 1 | USE_HTTP=true -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | tests/ 4 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | }, 6 | extends: [ 7 | 'plugin:vue/essential', 8 | 'eslint:recommended', 9 | '@vue/typescript', 10 | 'plugin:prettier-vue/recommended', 11 | 'prettier/vue', 12 | ], 13 | parserOptions: { 14 | parser: '@typescript-eslint/parser', 15 | }, 16 | rules: { 17 | 'no-console': 'off', 18 | 'no-unused-vars': 'off', 19 | 'prefer-const': 'off', 20 | 'vue/no-unused-components': 'off', 21 | 'vue/multiline-html-element-content-newline': 'off', 22 | 'no-unreachable': 'off', 23 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', 24 | }, 25 | } 26 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | pull_request: 6 | 7 | env: 8 | CI: true 9 | 10 | jobs: 11 | Build: 12 | runs-on: ubuntu-latest 13 | env: 14 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 15 | strategy: 16 | matrix: 17 | node-version: [16.x] 18 | steps: 19 | - uses: actions/checkout@v2 20 | - uses: actions/setup-node@v2 21 | with: 22 | cache: yarn 23 | node-version: ${{ matrix.node-version }} 24 | - name: Create .npmrc 25 | run: echo '//registry.npmjs.org/:_authToken= ${{ secrets.NPM_TOKEN }}' >> .npmrc 26 | - run: yarn install --frozen-lockfile 27 | - run: yarn build 28 | -------------------------------------------------------------------------------- /.github/workflows/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "npm" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "daily" 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | # Manually importing AVAJS 6 | avajs 7 | 8 | # local env files 9 | .env 10 | .env.local 11 | .env.*.local 12 | 13 | # Log files 14 | npm-debug.log* 15 | yarn-debug.log* 16 | yarn-error.log* 17 | 18 | # Editor directories and files 19 | .idea 20 | .vscode 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | /cypress/videos 27 | /cypress/screenshots 28 | 29 | # Snyk 30 | .dccache -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v16 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 4, 4 | "semi": false, 5 | "singleQuote": true, 6 | "printWidth": 100, 7 | "htmlWhitespaceSensitivity": "ignore", 8 | "expandUsers": true 9 | } 10 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2020, Ava Labs, Inc. 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['@vue/cli-plugin-babel/preset'], 3 | plugins: [ 4 | ['@babel/proposal-decorators', { legacy: true }], 5 | ['@babel/proposal-class-properties', { loose: true }], 6 | ], 7 | } 8 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /cypress/fixtures/custom_networks/basic_network.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Working Custom Network", 3 | "url": "https://api.avax.network:443" 4 | } 5 | -------------------------------------------------------------------------------- /cypress/fixtures/custom_networks/basic_network_broken.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Broken Custom Network", 3 | "url": "https://ai.avax.network:443" 4 | } 5 | -------------------------------------------------------------------------------- /cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } -------------------------------------------------------------------------------- /cypress/fixtures/keystore_v5.json: -------------------------------------------------------------------------------- 1 | {"version":"5.0","salt":"35U2Bkavb7s9tx1uiFym4oHMufr6","pass_hash":"jqS7bny1Zx2xBSNvuzxR9oEdDLGvTBCVb4xPsWjRkhS32FEwd","keys":[{"key":"4VeLbSytCaFQfkWfJ4aWgT27J8eAg8SdEMkqVX1pgxLQFReHuMS1SGd6RTQdLv452b5woXLxPaPijybvA8rBUjhtF4oGRDzEcq167NsjUaZYNv2WyYHaL9QhCeRQwJYeksQkkqYGY832Jfmk1hPK7P8z7z3mHtK6z8CTPnCnz4mZ2EqP6MPmfC7qddRjb9Q6qKPVNz9oE5ivKaSpMKF8DD4sYT1Pvxjhgh","iv":"5y74DCBoyZcEeZUynDhZKw"}]} -------------------------------------------------------------------------------- /cypress/integration/basic_functionality.spec.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai' 2 | 3 | const NETWORK_SWITCHER_BUTTON = '[data-cy="network-switcher"]' 4 | 5 | describe('Basic Functionality', () => { 6 | before(() => { 7 | cy.visit('/') 8 | // Reject the analytics tracking 9 | cy.get('[data-cy="reject_analytics"]').click() 10 | // Disable banner 11 | cy.get('[data-cy="dismiss_banner"]').click() 12 | }) 13 | 14 | it('has access/create wallet options', () => { 15 | cy.get('[data-cy=create]').should('have.length', 2) 16 | cy.get('[data-cy=access]').should('have.length', 2) 17 | }) 18 | 19 | describe('Network Switcher', () => { 20 | beforeEach(() => { 21 | cy.get(NETWORK_SWITCHER_BUTTON).click() 22 | }) 23 | 24 | afterEach(() => { 25 | cy.get(NETWORK_SWITCHER_BUTTON).click() 26 | }) 27 | 28 | it('can add custom network option', () => { 29 | cy.get('[data-cy="custom-network-option"]').should('have.length', 1) 30 | cy.get('[data-cy="create-custom-option"]', { timeout: 10000 }) 31 | .should('have.length', 1) 32 | .click() 33 | 34 | cy.fixture('custom_networks/basic_network.json').then((info) => { 35 | cy.get('[data-cy="custom-network-name"]').clear().type(info.name) 36 | cy.get('[data-cy="custom-network-url"]').clear().type(info.url) 37 | cy.get('[data-cy="custom-network-add"]').click() 38 | cy.get('[data-cy="network-item"]').should('have.length', 3) 39 | }) 40 | }) 41 | }) 42 | }) 43 | -------------------------------------------------------------------------------- /cypress/plugins/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Rather then have a bunch of configs for each environment we simply 3 | * create a object here, dynamically change it based on various environment variables 4 | * and pass it to cypress just before it starts. 5 | */ 6 | const CYPRESS_BASE_CONFIG = { 7 | nodeVersion: 'system', 8 | } 9 | 10 | const CYPRESS_CONFIG_PROD = { 11 | ...CYPRESS_BASE_CONFIG, 12 | baseUrl: 'https://wallet.avax.network/', 13 | } 14 | 15 | const CYPRESS_CONFIG_LOCAL = { 16 | ...CYPRESS_BASE_CONFIG, 17 | baseUrl: `${!process.env.USE_HTTP ? 'https' : 'http'}://localhost:5000/`, 18 | } 19 | 20 | /** 21 | * @type {Cypress.PluginConfig} 22 | */ 23 | module.exports = () => { 24 | return process.env.runProduction ? CYPRESS_CONFIG_PROD : CYPRESS_CONFIG_LOCAL 25 | } 26 | -------------------------------------------------------------------------------- /cypress/support/commands.js: -------------------------------------------------------------------------------- 1 | // *********************************************** 2 | // This example commands.js shows you how to 3 | // create various custom commands and overwrite 4 | // existing commands. 5 | // 6 | // For more comprehensive examples of custom 7 | // commands please read more here: 8 | // https://on.cypress.io/custom-commands 9 | // *********************************************** 10 | // 11 | // 12 | // -- This is a parent command -- 13 | // Cypress.Commands.add("login", (email, password) => { ... }) 14 | // 15 | // 16 | // -- This is a child command -- 17 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... }) 18 | // 19 | // 20 | // -- This is a dual command -- 21 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... }) 22 | // 23 | // 24 | // -- This will overwrite an existing command -- 25 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) 26 | -------------------------------------------------------------------------------- /cypress/support/index.js: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/index.js is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands' 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') 21 | -------------------------------------------------------------------------------- /guides/formatting.md: -------------------------------------------------------------------------------- 1 | # Formatting 2 | 3 | Formatting rules are set by eslint and prettier, there are a few plugins to help with things like Vue. Any questions, comments or ideas submit via PR 4 | 5 | ## VSCode Setup 6 | 7 | To get this working in VSCode simply install the prettier and eslint plugins via the command palette: 8 | 9 | ``` 10 | ext install esbenp.prettier-vscode 11 | ext install dbaeumer.vscode-eslint 12 | ``` 13 | 14 | Open workspace settings via command palette: 15 | 16 | ``` 17 | Preferences: Open Workspace Settings (JSON) 18 | ``` 19 | 20 | Modify and save settings.json 21 | 22 | ``` 23 | { 24 | "editor.defaultFormatter": "esbenp.prettier-vscode", 25 | "editor.formatOnSave": true 26 | } 27 | ``` 28 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | moduleFileExtensions: ['js', 'ts', 'json', 'vue'], 3 | transform: { 4 | '.*\\.(vue)$': 'vue-jest', 5 | '^.+\\.ts?$': 'ts-jest', 6 | '^.+\\.js?$': 'babel-jest', 7 | }, 8 | moduleNameMapper: { 9 | '@/(.*)$': '/src/$1', 10 | }, 11 | setupFilesAfterEnv: ['./jest.setup.js'], 12 | testURL: 'https://localhost/', 13 | testEnvironment: 'jsdom', 14 | testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$', 15 | } 16 | -------------------------------------------------------------------------------- /jest.setup.js: -------------------------------------------------------------------------------- 1 | const util = require('util') 2 | const crypto = require('crypto') 3 | window.crypto = crypto.webcrypto 4 | 5 | window.TextEncoder = util.TextEncoder 6 | window.TextDecoder = util.TextDecoder 7 | -------------------------------------------------------------------------------- /public/_headers: -------------------------------------------------------------------------------- 1 | /* 2 | X-Frame-Options: DENY 3 | X-Content-Type-Options: nosniff 4 | Strict-Transport-Security: max-age=31536000; includeSubDomains 5 | Referrer-Policy: no-referrer 6 | 7 | https://:project.pages.dev/* 8 | X-Robots-Tag: noindex 9 | -------------------------------------------------------------------------------- /public/ava_letter_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/ava_letter_icon.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/favicon.ico -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/favicon.png -------------------------------------------------------------------------------- /public/gif/loading_0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/gif/loading_0.gif -------------------------------------------------------------------------------- /public/gif/loading_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/gif/loading_1.gif -------------------------------------------------------------------------------- /public/gif/loading_2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/gif/loading_2.gif -------------------------------------------------------------------------------- /public/img/access_icons/day/keystore.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/img/access_icons/day/ledger.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/img/access_icons/day/mnemonic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/img/access_icons/day/privatekey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/img/access_icons/night/keystore.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/img/access_icons/night/ledger.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/img/access_icons/night/mnemonic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/img/access_icons/night/privatekey.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/img/account-balance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/account-balance.png -------------------------------------------------------------------------------- /public/img/ava_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/ava_icon.png -------------------------------------------------------------------------------- /public/img/ava_logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/ava_logo_white.png -------------------------------------------------------------------------------- /public/img/avax_icon_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/avax_icon_circle.png -------------------------------------------------------------------------------- /public/img/center_focus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/center_focus.png -------------------------------------------------------------------------------- /public/img/copy_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/copy_icon.png -------------------------------------------------------------------------------- /public/img/copy_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public/img/dots_bg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /public/img/faucet_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/faucet_icon.png -------------------------------------------------------------------------------- /public/img/icons/android-chrome-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/icons/android-chrome-144x144.png -------------------------------------------------------------------------------- /public/img/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /public/img/icons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/icons/favicon-16x16.png -------------------------------------------------------------------------------- /public/img/icons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/icons/favicon-32x32.png -------------------------------------------------------------------------------- /public/img/icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/icons/favicon.ico -------------------------------------------------------------------------------- /public/img/icons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/icons/mstile-150x150.png -------------------------------------------------------------------------------- /public/img/ledger_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/ledger_icon.png -------------------------------------------------------------------------------- /public/img/ledger_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | hardware 4 | 5 | 6 | -------------------------------------------------------------------------------- /public/img/logo_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /public/img/modal_icons/mainnet_addr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/img/modal_icons/mainnet_addr_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/img/og_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/og_image.png -------------------------------------------------------------------------------- /public/img/paper_wallet/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/paper_wallet/Logo.png -------------------------------------------------------------------------------- /public/img/paper_wallet/my_address.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/paper_wallet/my_address.png -------------------------------------------------------------------------------- /public/img/paper_wallet/private_key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/paper_wallet/private_key.png -------------------------------------------------------------------------------- /public/img/print_icon_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/img/qr_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/qr_icon.png -------------------------------------------------------------------------------- /public/img/wifi-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/wifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/img/wifi.png -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Fastest Performing and Secure DeFi Wallet | Avalanche Wallet 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 34 | 35 | 36 | 37 | 40 |
41 | 42 |
43 |
44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /public/question-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/wallet_og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/public/wallet_og.png -------------------------------------------------------------------------------- /src/AVA.ts: -------------------------------------------------------------------------------- 1 | import { KeyChain as AVMKeyChain, AVMAPI } from 'avalanche/dist/apis/avm' 2 | import { InfoAPI } from 'avalanche/dist/apis/info' 3 | import Avalanche from 'avalanche' 4 | //@ts-ignore 5 | import BinTools from 'avalanche/dist/utils/bintools' 6 | import { EVMAPI } from 'avalanche/dist/apis/evm' 7 | 8 | // Connect to TestNet by default 9 | // Doesn't really matter how we initialize, it will get changed by the network module later 10 | const ip: string = 'bootstrap.ava.network' 11 | const port: number = 21000 12 | const protocol: string = 'https' 13 | const network_id: number = 2 14 | const chain_id: string = 'X' 15 | const bintools: BinTools = BinTools.getInstance() 16 | const ava: Avalanche = new Avalanche(ip, port, protocol, network_id, chain_id) 17 | 18 | const avm: AVMAPI = ava.XChain() 19 | const cChain: EVMAPI = ava.CChain() 20 | const pChain = ava.PChain() 21 | const infoApi: InfoAPI = ava.Info() 22 | const keyChain: AVMKeyChain = avm.keyChain() 23 | 24 | function isValidAddress(addr: string) { 25 | try { 26 | const res = bintools.stringToAddress(addr) 27 | return true 28 | } catch (err) { 29 | return false 30 | } 31 | } 32 | 33 | export { ava, avm, pChain, cChain, infoApi, bintools, isValidAddress, keyChain } 34 | -------------------------------------------------------------------------------- /src/ERC721Tokenlist.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Avalanche Wallet ERC721 Tokens", 3 | "logoURI": "https://raw.githubusercontent.com/ava-labs/bridge-tokens/main/avalanche-tokens/0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7/logo.png", 4 | "keywords": [ 5 | "avalanche", 6 | "defi", 7 | "ethereum" 8 | ], 9 | "version": { 10 | "major": 1, 11 | "minor": 0, 12 | "patch": 0 13 | }, 14 | "tokens": [ 15 | { 16 | "chainId": 43114, 17 | "address": "0x53d2230eac25643cd0772b310eebb569a100ea73", 18 | "decimals": 0, 19 | "name": "Avaxtars", 20 | "symbol": "AVXT", 21 | "logoURI": "" 22 | }, 23 | { 24 | "chainId": 43114, 25 | "address": "0x0540E4EE0C5CdBA347C2f0E011ACF8651bB70Eb9", 26 | "decimals": 0, 27 | "name": "CryptoSeals", 28 | "symbol": "SEAL", 29 | "logoURI": "" 30 | } 31 | ], 32 | "timestamp": "2021-04-15T00:21:05+00:00" 33 | } 34 | -------------------------------------------------------------------------------- /src/_dark_theme.scss: -------------------------------------------------------------------------------- 1 | $purple: #4c2e56; 2 | $purple-light: #867e89; 3 | $pink: #e84970; 4 | $pink-light: #ff8080; 5 | $pink-extra-light: #ffe6e6; 6 | $gray: #f5f6fa; 7 | $white: #fff; 8 | $green: #6bc688; 9 | $info: #008dc5; 10 | $green-light: #83f2a6; 11 | $green-extra-light: #a9efbf; 12 | 13 | $primary-color: $purple; 14 | $primary-color-light: $purple-light; 15 | $secondary-color: $pink; 16 | $secondary-color-light: $pink-light; 17 | $secondary-color-extra-light: $pink-extra-light; 18 | $background-color: $gray; 19 | -------------------------------------------------------------------------------- /src/_light_theme.scss: -------------------------------------------------------------------------------- 1 | $purple: #4c2e56; 2 | $purple-light: #867e89; 3 | $pink: #e84970; 4 | $pink-light: #ff8080; 5 | $pink-extra-light: #ffe6e6; 6 | $gray: #f5f6fa; 7 | $white: #fff; 8 | $green: #6bc688; 9 | $green-light: #83f2a6; 10 | $green-extra-light: #a9efbf; 11 | 12 | $primary-color: $purple; 13 | $primary-color-light: $purple-light; 14 | $secondary-color: $pink; 15 | $secondary-color-light: $pink-light; 16 | $secondary-color-extra-light: $pink-extra-light; 17 | $background-color: $gray; 18 | 19 | hr { 20 | color: #f5f6fa; 21 | border-color: #f5f6fa; 22 | border: none; 23 | border-top: 1px solid; 24 | margin: 10px 0; 25 | } 26 | 27 | a { 28 | color: #4c2e56 !important; 29 | text-decoration: none !important; 30 | } 31 | 32 | .but_primary { 33 | background-color: #4c2e56; 34 | color: #fff !important; 35 | text-transform: none !important; 36 | /*font-size: 13px;*/ 37 | padding: 8px 18px; 38 | border-radius: 2px; 39 | 40 | &:disabled { 41 | color: $purple-light !important; 42 | background-color: $gray !important; 43 | } 44 | } 45 | 46 | .ava_button { 47 | color: $white !important; 48 | } 49 | 50 | .ava_button_secondary { 51 | color: $primary-color !important; 52 | } 53 | 54 | .link { 55 | color: $primary-color-light !important; 56 | } 57 | -------------------------------------------------------------------------------- /src/assets/QR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/QR.png -------------------------------------------------------------------------------- /src/assets/ava_letter_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/ava_letter_icon.png -------------------------------------------------------------------------------- /src/assets/diamond-primary-night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/assets/diamond-primary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/diamond-primary.png -------------------------------------------------------------------------------- /src/assets/diamond-primary.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/assets/diamond-secondary-night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/assets/diamond-secondary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/diamond-secondary.png -------------------------------------------------------------------------------- /src/assets/hex.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/hex_ava.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/import_key_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/import_key_bg.png -------------------------------------------------------------------------------- /src/assets/key_inactive_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/key_inactive_night.png -------------------------------------------------------------------------------- /src/assets/keyphrase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/keyphrase.png -------------------------------------------------------------------------------- /src/assets/keyphrase_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/assets/network_ava.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/network_ava.png -------------------------------------------------------------------------------- /src/assets/network_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/network_off.png -------------------------------------------------------------------------------- /src/assets/network_off_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/network_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/network_on.png -------------------------------------------------------------------------------- /src/assets/nft_preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/nft_preview.png -------------------------------------------------------------------------------- /src/assets/nft_preview_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/nft_preview_night.png -------------------------------------------------------------------------------- /src/assets/paper_wallet/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/paper_wallet/bg.png -------------------------------------------------------------------------------- /src/assets/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/search.png -------------------------------------------------------------------------------- /src/assets/search_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/sidebar/Home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/Home.png -------------------------------------------------------------------------------- /src/assets/sidebar/Key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/Key.png -------------------------------------------------------------------------------- /src/assets/sidebar/Transfer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/Transfer.png -------------------------------------------------------------------------------- /src/assets/sidebar/activity_nav.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/sidebar/activity_nav_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/sidebar/advanced_nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/advanced_nav.png -------------------------------------------------------------------------------- /src/assets/sidebar/advanced_nav_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/advanced_nav_night.png -------------------------------------------------------------------------------- /src/assets/sidebar/earn_nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/earn_nav.png -------------------------------------------------------------------------------- /src/assets/sidebar/earn_nav_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/earn_nav_night.png -------------------------------------------------------------------------------- /src/assets/sidebar/manage_nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/manage_nav.png -------------------------------------------------------------------------------- /src/assets/sidebar/portfolio_nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/portfolio_nav.png -------------------------------------------------------------------------------- /src/assets/sidebar/portfolio_nav_night.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/portfolio_nav_night.png -------------------------------------------------------------------------------- /src/assets/sidebar/portfolio_nav_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/sidebar/studio_nav.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/sidebar/studio_nav_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/sidebar/transfer_nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/sidebar/transfer_nav.png -------------------------------------------------------------------------------- /src/assets/sidebar/transfer_nav_night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/spinner-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/success.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/theme_toggle/night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/trash_can.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/trash_can_dark.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/volume-up-solid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/wallet_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/wallet_logo.png -------------------------------------------------------------------------------- /src/assets/wallet_logo_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ava-labs/avalanche-wallet/076f4630c2bce235d29cbe668e7f2848747922a4/src/assets/wallet_logo_dark.png -------------------------------------------------------------------------------- /src/components/Access/menu.scss: -------------------------------------------------------------------------------- 1 | 2 | .menu_option { 3 | background-color: var(--bg-light) !important; 4 | color: var(--primary) !important; 5 | padding: 12px; 6 | margin: 2px 0; 7 | width: 100%; 8 | cursor: pointer; 9 | display: flex; 10 | align-items: center; 11 | 12 | &[disabled]{ 13 | background-color: var(--bg-light) !important; 14 | } 15 | 16 | p { 17 | flex-grow: 1; 18 | text-align: left; 19 | padding: 0 1em; 20 | } 21 | 22 | &:hover { 23 | opacity: 0.6; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/components/CreateWalletWorkflow/MnemonicCopied.vue: -------------------------------------------------------------------------------- 1 | 6 | 26 | 27 | 46 | -------------------------------------------------------------------------------- /src/components/NetworkSettings/ListPage.vue: -------------------------------------------------------------------------------- 1 | 15 | 37 | 42 | -------------------------------------------------------------------------------- /src/components/NftCards/UTF8_NFT.vue: -------------------------------------------------------------------------------- 1 | 14 | 37 | 44 | -------------------------------------------------------------------------------- /src/components/Notifications.vue: -------------------------------------------------------------------------------- 1 | 18 | 27 | 87 | -------------------------------------------------------------------------------- /src/components/SidePanels/History/ViewTypes/filterOwnedAddresses.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Filter out addresses not in the given myAddresses array 3 | * @param myAddresses Owned addresses to filter against 4 | * @param addresses Array of addresses to filter 5 | */ 6 | export function filterOwnedAddresses(myAddresses: string[], addresses: string[]) { 7 | myAddresses = myAddresses.map((addr) => addr.split('-')[1] || addr) 8 | addresses = addresses.map((addr) => addr.split('-')[1] || addr) 9 | 10 | return addresses.filter((addr) => { 11 | return myAddresses.includes(addr) 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /src/components/SidePanels/types.ts: -------------------------------------------------------------------------------- 1 | import { BN } from 'avalanche' 2 | export interface TransactionValueDict { 3 | [address: string]: number 4 | } 5 | 6 | export interface TransactionAssetsDict { 7 | [assetId: string]: { 8 | amount: BN 9 | addresses: Set 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/components/TestNetBanner.vue: -------------------------------------------------------------------------------- 1 | 6 | 23 | 43 | -------------------------------------------------------------------------------- /src/components/misc/AddressDropdown/ListItem.vue: -------------------------------------------------------------------------------- 1 | 10 | 21 | 37 | -------------------------------------------------------------------------------- /src/components/misc/BalancePopup/BalanceRow.vue: -------------------------------------------------------------------------------- 1 | 8 | 28 | 55 | -------------------------------------------------------------------------------- /src/components/misc/CopyText.vue: -------------------------------------------------------------------------------- 1 | 12 | 32 | 66 | -------------------------------------------------------------------------------- /src/components/misc/CurrencySelect/CurrencySelect.vue: -------------------------------------------------------------------------------- 1 | 7 | 20 | 48 | -------------------------------------------------------------------------------- /src/components/misc/CurrencySelect/types.ts: -------------------------------------------------------------------------------- 1 | export type CurrencyType = 'USD' | 'AVAX' 2 | -------------------------------------------------------------------------------- /src/components/misc/DayNightToggle.vue: -------------------------------------------------------------------------------- 1 | 7 | 50 | 59 | -------------------------------------------------------------------------------- /src/components/misc/EVMInputDropdown/types.ts: -------------------------------------------------------------------------------- 1 | import ERC721Token from '@/js/ERC721Token' 2 | 3 | export interface iErc721SelectInput { 4 | id: string 5 | token: ERC721Token 6 | } 7 | -------------------------------------------------------------------------------- /src/components/misc/Expandable.vue: -------------------------------------------------------------------------------- 1 | 12 | 26 | 57 | -------------------------------------------------------------------------------- /src/components/misc/FaucetLink.vue: -------------------------------------------------------------------------------- 1 | 10 | 24 | 51 | -------------------------------------------------------------------------------- /src/components/misc/Hexagon.vue: -------------------------------------------------------------------------------- 1 | 7 | 15 | 28 | -------------------------------------------------------------------------------- /src/components/misc/Identicon.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 33 | 38 | -------------------------------------------------------------------------------- /src/components/misc/ImageDayNight.vue: -------------------------------------------------------------------------------- 1 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /src/components/misc/LanguageSelect/types.ts: -------------------------------------------------------------------------------- 1 | export interface LanguageItem { 2 | code: string 3 | name: string 4 | nativeName: string 5 | } 6 | -------------------------------------------------------------------------------- /src/components/misc/MultiSelect.vue: -------------------------------------------------------------------------------- 1 | 15 | 42 | 80 | -------------------------------------------------------------------------------- /src/components/misc/NetworkLoadingBlock.vue: -------------------------------------------------------------------------------- 1 | 9 | 25 | 57 | -------------------------------------------------------------------------------- /src/components/misc/NftInputDropdown.vue: -------------------------------------------------------------------------------- 1 | 4 | 7 | -------------------------------------------------------------------------------- /src/components/misc/NftPayloadView/NftPayloadAllow.vue: -------------------------------------------------------------------------------- 1 | 13 | 28 | 46 | -------------------------------------------------------------------------------- /src/components/misc/NftPayloadView/blacklist.ts: -------------------------------------------------------------------------------- 1 | export const URLBLacklist = [`avax-reward.su`] 2 | 3 | /*** 4 | * Checks if the given URL partially matches anything in the blacklist. 5 | * @param url 6 | */ 7 | export function isUrlBanned(url: string) { 8 | for (let i = 0; i < URLBLacklist.length; i++) { 9 | if (url.includes(URLBLacklist[i])) { 10 | return true 11 | } 12 | } 13 | return false 14 | } 15 | -------------------------------------------------------------------------------- /src/components/misc/NftPayloadView/views/UtfPayloadView.vue: -------------------------------------------------------------------------------- 1 | 6 | 19 | 30 | -------------------------------------------------------------------------------- /src/components/misc/NftPayloadView/views_small/JsonPayloadView.vue: -------------------------------------------------------------------------------- 1 | 7 | 65 | 86 | -------------------------------------------------------------------------------- /src/components/misc/NftPayloadView/views_small/UrlPayloadView.vue: -------------------------------------------------------------------------------- 1 | 16 | 48 | 75 | -------------------------------------------------------------------------------- /src/components/misc/NftPayloadView/views_small/UtfPayloadView.vue: -------------------------------------------------------------------------------- 1 | 7 | 42 | 78 | -------------------------------------------------------------------------------- /src/components/misc/NumberCounter.vue: -------------------------------------------------------------------------------- 1 | 4 | 45 | -------------------------------------------------------------------------------- /src/components/misc/RadioButtons.vue: -------------------------------------------------------------------------------- 1 | 15 | 31 | 74 | -------------------------------------------------------------------------------- /src/components/misc/Spinner.vue: -------------------------------------------------------------------------------- 1 | 8 | 11 | 35 | -------------------------------------------------------------------------------- /src/components/misc/TextDisplayCopy.vue: -------------------------------------------------------------------------------- 1 | 9 | 32 | 58 | -------------------------------------------------------------------------------- /src/components/misc/ToS.vue: -------------------------------------------------------------------------------- 1 | 8 | 17 | -------------------------------------------------------------------------------- /src/components/misc/Tooltip.vue: -------------------------------------------------------------------------------- 1 | 13 | 20 | -------------------------------------------------------------------------------- /src/components/misc/UrlBanner.vue: -------------------------------------------------------------------------------- 1 | 13 | 29 | 41 | -------------------------------------------------------------------------------- /src/components/misc/ValidatorList/types.ts: -------------------------------------------------------------------------------- 1 | export interface ValidatorRaw { 2 | connection: boolean 3 | endTime: string 4 | nodeID: string 5 | stakeAmount: string 6 | startTime: string 7 | uptime: string 8 | delegatorWeight: string 9 | delegatorCount: string 10 | delegationFee: string 11 | potentialReward: string 12 | rewardOwner: ValidatorRewardOwner 13 | txID: string 14 | } 15 | 16 | export interface DelegatorPendingRaw { 17 | startTime: string 18 | endTime: string 19 | stakeAmount: string 20 | nodeID: string 21 | } 22 | 23 | export interface ValidatorPendingRaw { 24 | startTime: string 25 | endTime: string 26 | stakeAmount: string 27 | nodeID: string 28 | delegationFee: string 29 | connected: boolean 30 | } 31 | 32 | export interface ValidatorRewardOwner { 33 | addresses: string[] 34 | locktime: string 35 | threshold: string 36 | } 37 | 38 | export interface ValidatorDict { 39 | [nodeId: string]: ValidatorRaw 40 | } 41 | -------------------------------------------------------------------------------- /src/components/misc/VuetifyDateInput.vue: -------------------------------------------------------------------------------- 1 | 29 | 66 | 71 | -------------------------------------------------------------------------------- /src/components/modals/AccountSettings/DeleteAccount.vue: -------------------------------------------------------------------------------- 1 | 10 | 39 | 42 | -------------------------------------------------------------------------------- /src/components/modals/AccountSettings/SaveKeys.vue: -------------------------------------------------------------------------------- 1 | 11 | 44 | 51 | -------------------------------------------------------------------------------- /src/components/modals/AccountSettings/style.scss: -------------------------------------------------------------------------------- 1 | form{ 2 | width: 100%; 3 | * { 4 | margin: 4px 0; 5 | } 6 | 7 | input { 8 | background-color: var(--bg-light); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/components/modals/AvmNftSelectModal.vue: -------------------------------------------------------------------------------- 1 | 16 | 57 | 80 | -------------------------------------------------------------------------------- /src/components/modals/ConfirmLogout.vue: -------------------------------------------------------------------------------- 1 | 21 | 60 | 69 | -------------------------------------------------------------------------------- /src/components/modals/ERC721ViewModal.vue: -------------------------------------------------------------------------------- 1 | 8 | 29 | 40 | -------------------------------------------------------------------------------- /src/components/modals/HdDerivationList/HdDerivationListModal.vue: -------------------------------------------------------------------------------- 1 | 8 | 32 | 39 | -------------------------------------------------------------------------------- /src/components/modals/HdDerivationList/types.ts: -------------------------------------------------------------------------------- 1 | import Big from 'big.js' 2 | 3 | export interface DerivationListBalanceDict { 4 | [key: string]: Big 5 | } 6 | -------------------------------------------------------------------------------- /src/components/modals/LedgerWalletLoading.vue: -------------------------------------------------------------------------------- 1 | 9 | 41 | 49 | -------------------------------------------------------------------------------- /src/components/modals/MnemonicPhraseModal.vue: -------------------------------------------------------------------------------- 1 | 12 | 37 | 76 | -------------------------------------------------------------------------------- /src/components/modals/NFTViewModal.vue: -------------------------------------------------------------------------------- 1 | 8 | 28 | 39 | -------------------------------------------------------------------------------- /src/components/modals/PrivateKey.vue: -------------------------------------------------------------------------------- 1 | 12 | 32 | 62 | -------------------------------------------------------------------------------- /src/components/modals/XpubModal.vue: -------------------------------------------------------------------------------- 1 | 19 | 39 | 62 | -------------------------------------------------------------------------------- /src/components/wallet/TopCards/AddressCard/ChainSelect.vue: -------------------------------------------------------------------------------- 1 | 8 | 28 | 53 | -------------------------------------------------------------------------------- /src/components/wallet/earn/ChainTransfer/types.ts: -------------------------------------------------------------------------------- 1 | import { ChainIdType } from '@/constants' 2 | import { BN } from 'avalanche' 3 | 4 | export enum TxState { 5 | failed = -1, 6 | waiting = 0, 7 | started = 1, 8 | success = 2, 9 | } 10 | 11 | export interface ChainSwapFormData { 12 | sourceChain: ChainIdType 13 | destinationChain: ChainIdType 14 | amount: BN 15 | } 16 | -------------------------------------------------------------------------------- /src/components/wallet/earn/Delegate/helper.ts: -------------------------------------------------------------------------------- 1 | import { ValidatorListFilter } from '@/components/wallet/earn/Delegate/types' 2 | import { ValidatorListItem } from '@/store/modules/platform/types' 3 | import { DAY_MS } from '@/constants' 4 | import { ONEAVAX } from 'avalanche/dist/utils' 5 | import { BN } from 'avalanche' 6 | 7 | function filterValidatorList( 8 | list: ValidatorListItem[], 9 | filter: ValidatorListFilter | null 10 | ): ValidatorListItem[] { 11 | const now = Date.now() 12 | if (!filter) return list 13 | 14 | const minDurationMs = filter.minDuration * DAY_MS 15 | const res = list.filter((val: ValidatorListItem) => { 16 | // Filter by remaining stake amount 17 | const minSpace = ONEAVAX.mul(new BN(filter.availableSpace)) 18 | if (val.remainingStake.lt(minSpace)) { 19 | return false 20 | } 21 | 22 | // Filter by time 23 | const endTime = val.endTime 24 | if (endTime.getTime() - now < minDurationMs) { 25 | return false 26 | } 27 | 28 | // Filter by fee 29 | if (val.fee > filter.maxFee) { 30 | return false 31 | } 32 | 33 | // Filter by uptime 34 | if (val.uptime < filter.minUptime / 100) { 35 | return false 36 | } 37 | 38 | return true 39 | }) 40 | return res 41 | } 42 | 43 | export { filterValidatorList } 44 | -------------------------------------------------------------------------------- /src/components/wallet/earn/Delegate/types.ts: -------------------------------------------------------------------------------- 1 | export interface ValidatorListFilter { 2 | minDuration: number 3 | maxFee: number 4 | minUptime: number 5 | availableSpace: number 6 | } 7 | -------------------------------------------------------------------------------- /src/components/wallet/earn/StakingCalculator.vue: -------------------------------------------------------------------------------- 1 | 4 | 11 | -------------------------------------------------------------------------------- /src/components/wallet/portfolio/ERC721FamilyRow.vue: -------------------------------------------------------------------------------- 1 | 22 | 43 | 46 | -------------------------------------------------------------------------------- /src/components/wallet/portfolio/nft_card.scss: -------------------------------------------------------------------------------- 1 | .nft_card { 2 | height: 100%; 3 | position: relative; 4 | display: flex; 5 | flex-direction: column; 6 | border: 2px solid var(--bg-light); 7 | } 8 | 9 | $countW: 28px; 10 | .count { 11 | position: absolute; 12 | top: -$countW/3; 13 | right: -$countW/3; 14 | width: $countW; 15 | height: $countW; 16 | border-radius: $countW; 17 | line-height: $countW; 18 | font-size: 12px; 19 | text-align: center; 20 | background-color: var(--primary-color); 21 | //border: 1px solid var(--bg-wallet); 22 | color: var(--bg); 23 | font-weight: bold; 24 | z-index: 2; 25 | } 26 | 27 | .view { 28 | width: 100%; 29 | height: 240px; 30 | } 31 | 32 | .generic_nft_meta { 33 | //border-top: 2px solid var(--bg-light); 34 | padding-top: 0 !important; 35 | 36 | .nft_title { 37 | font-weight: bold; 38 | } 39 | } 40 | .nft_info { 41 | border-top: 2px solid var(--bg-light); 42 | font-size: 12px; 43 | 44 | > * { 45 | padding: 8px 12px; 46 | } 47 | 48 | .meta_bar { 49 | display: flex; 50 | flex-direction: row; 51 | justify-content: space-between; 52 | 53 | .nft_button { 54 | opacity: 0.5; 55 | 56 | &:hover { 57 | opacity: 1; 58 | } 59 | } 60 | 61 | > div { 62 | display: flex; 63 | flex-direction: row; 64 | } 65 | 66 | p, 67 | button { 68 | opacity: 0.5; 69 | } 70 | 71 | button, 72 | .nft_button { 73 | margin: 0px 4px; 74 | } 75 | 76 | button:hover { 77 | opacity: 1; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/components/wallet/portfolio/portfolio.scss: -------------------------------------------------------------------------------- 1 | .add_token_row { 2 | display: flex !important; 3 | justify-content: center; 4 | padding: 24px; 5 | border: none !important; 6 | 7 | span { 8 | color: var(--primary-color-light); 9 | align-self: center; 10 | margin: 0px 12px; 11 | } 12 | 13 | button { 14 | border: 1px solid var(--primary-color-light); 15 | border-radius: 22px; 16 | padding: 8px 24px; 17 | border-color: var(--secondary-color); 18 | color: var(--secondary-color); 19 | &:hover { 20 | opacity: 0.6; 21 | //border-color: var(--secondary-color); 22 | //color: var(--secondary-color); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/components/wallet/portfolio/tokens.scss: -------------------------------------------------------------------------------- 1 | .nft_family_row { 2 | margin-bottom: 4vh; 3 | } 4 | .fam_header { 5 | width: 100%; 6 | margin: 12px 0; 7 | margin-bottom: 16px; 8 | font-size: 18px; 9 | display: grid; 10 | grid-template-columns: max-content max-content 1fr; 11 | padding-bottom: 12px; 12 | border-bottom: 2px solid var(--bg-light); 13 | } 14 | 15 | .fam_id { 16 | word-break: break-all; 17 | text-align: right; 18 | color: var(--primary-color-light); 19 | font-size: 13px; 20 | align-self: center; 21 | } 22 | .name { 23 | padding-right: 10px; 24 | } 25 | .symbol { 26 | padding-left: 10px; 27 | color: var(--primary-color-light); 28 | border-left: 1px solid var(--primary-color-light); 29 | } 30 | 31 | .list { 32 | padding-right: 10px; 33 | display: grid; 34 | grid-gap: 1em; 35 | grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); 36 | } 37 | 38 | .group { 39 | align-self: flex-start; 40 | width: 100%; 41 | height: 100%; 42 | } 43 | -------------------------------------------------------------------------------- /src/components/wallet/portfolio/types.ts: -------------------------------------------------------------------------------- 1 | import { UTXO } from 'avalanche/dist/apis/avm' 2 | 3 | export interface NftGroupDict { 4 | [key: string]: [UTXO] 5 | } 6 | -------------------------------------------------------------------------------- /src/components/wallet/studio/mint/SelectMintUtxo/SelectMintUTXO.vue: -------------------------------------------------------------------------------- 1 | 11 | 35 | 62 | -------------------------------------------------------------------------------- /src/components/wallet/studio/mint/forms/JsonForm.vue: -------------------------------------------------------------------------------- 1 |