Skip to content

asgardex/asgardex-desktop

Repository files navigation



Version

Test

Electron build Windows

Electron build Linux

Electron build Mac

Discord Follow on Twitter Check our Website

Website

This is the developer source repository, general information, and download page can be found at Asgardex

Feature list

Symbols

✔️ implemented ✅ planned - not needed

Wallet

RUNE BTC BCH DOGE ETH / ERC20 LTC COSMOS BSC AVAX MAYA DASH KUJI
Keystore ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Ledger * ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ - -
Send ** ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Receive ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Deposit ✔️ - - - - - - - - ✔️ - -
Shares ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
History ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Synths ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ - - -

(*) Ledger RUNE is not supported at stagenet. Ledger LTC/BCH/DOGE are not supported at testnet. Maya is not supported on Ledger.

(**) With or without memo

THORChain Exchange

RUNE BSC /BEP20 BTC BCH DOGE ETH / ERC20 LTC COSMOS AVAX
Pools overview - ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Pool detail - ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Swap ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Deposit * ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Withdraw * ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Recovery tool
Synths ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Savers ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Lending - - - - - - - - -

(*) Symmetrical deposit/withdraw only

MAYA Exchange

MAYA RUNE BTC ETH / ERC20 KUJI DASH ARB
Pools overview - ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Pool detail - ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Swap ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Deposit * ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Withdraw * ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Recovery tool
Synths ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
Savers ✖️ ✖️ ✖️ ✖️ ✖️ ✖️ ✖️

(*) Symmetrical deposit/withdraw only

THORNode

Overview Status BOND UNBOND LEAVE THORName
✔️ ✔️ ✔️ ✔️ ✔️

MAYANode

Overview Status BOND UNBOND LEAVE MAYAName
✔️ ✖️ ✖️ ✖️ ✔️

Languages

ENGLISH 🇺🇸 GERMAN 🇩🇪 FRENCH 🇫🇷 RUSSIAN 🇷🇺 HINDI :hi: SPANISH 🇪🇸
✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Misc

  • 100% open-source (built by the community)
  • Security first
  • 10 bps affiliate fees on swaps - free Under $1000

ASGARDEX utilizes the following libraries, frameworks, and more:

(in alphabetical order)

Installation

It's recommended to use a Node version as same as Electron is running with (currently: Electron v26.0.x / Node 18.16.1). It's recommended to install nvm to run as the same Node version locally as used for building ASGARDEX on CI.

git clone https://github.com/asgardex/asgardex-desktop.git asgardex
cd asgardex
yarn

In case you get an an ENAMETOOLONG: name too long error or similar by running yarn install, e.g.

YN0001: │ Error: @storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0: ENAMETOOLONG: name too long, unlink '~/.yarn/berry/cache/@storybook-react-docgen-typescript-plugin-npm-1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0-b31cc57c40-8.zip' -> 'asgardex-desktop/.yarn/cache/@storybook-react-docgen-typescript-plugin-npm-1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0-b31cc57c40-91a3015d38.zip-3439e0483605ccee.tmp'

change cache folder as described in Unable to install latest SB version: Error: ENAMETOOLONG: name too long, unlink... #18441 to run yarn install as follow:

  1. Check your cache dir
yarn cache dir
~/.cache/yarn/v6
  1. Point it to another (short) folder using YARN_CACHE_FOLDER (see Change the cache path for yarn), e.g.
YARN_CACHE_FOLDER=/tmp/y/ yarn install

Environment variables

While environment variables are not required (defaults are set), you can configure them. Create an .env file by copying all content of .env.sample and change these for your needs.

Development

yarn prebuild
yarn dev

In case Node might run into memory issues locally set --max-old-space-size as follow:

export NODE_OPTIONS="--max-old-space-size=4096"

Generate ERC20/BEP20 & Avax & ARB asset white list

Whenever THORChain ERC20 asset whitelist has been updated (usually with a new release of THORNode), run following script to auto-generate this list for ASGARDEX For synths to have an icon the asset in the whitelist needs to be duplicated and the synth boolean flipped true

yarn generate:erc20whitelist
yarn generate:avaxerc20whitelist
yarn generate:bscerc20whitelist
yarn generate:arberc20whitelist

How to auto-unlock a locked wallet while hot-reloading the app (for development only, disabled in production build)

Use REACT_APP_WALLET_PASSWORD to run the app by replacing password with your own password

REACT_APP_WALLET_PASSWORD=password yarn dev

Or add to REACT_APP_WALLET_PASSWORD=password to .env file and run yarn dev

Tests

unit

yarn test

e2e

Note: Running test-cafe is disabled (see https://github.com/asgardex/asgardex-desktop/issues/750)

yarn test:e2e

lint

yarn lint

Note: eslint is provided by react-scripts located in ./node_modules/react-scripts/node_modules/ and don't need to be extra installed. If your editor has some issues to find eslint, you might point it to this location (see VSCode settings file as an example).

Storybook

yarn storybook

bundle analyze

visualize the bundle map using source-map-explorer

yarn analyze

Auto updates

To check locally if auto-update works correctly create dev-app-update.yml file at the root directory with a content based on dev-app-update.sample.yml with providing your GutHub personal access token. After that just play locally with version provided by package.json

Folder structure

src

src
├── index.ts # entry point for CRA
├── main # sources of Electron's main process
├── renderer # sources of Electron's renderer process (aka webapp)
└── shared # shared sources for Electron's main and renderer processes

src/main (Electron's "main" app)

src/main
├── electron.ts # entry point
├── i18n # internationalization (needed for menus)
└── menu # "native" menus

src/renderer (Electron's "renderer" app aka ReactJS webapp)

src/renderer
├── assets # static files (svg, fonts etc.)
├── components # basic components
├── contexts # React contexts to provide "global" accessible states (RxJS based)
├── helpers # helper functions
├── hooks # custom hooks
├── i18n # internationalization (translations etc.)
├── index.tsx # entry point
├── routes # routing
├── services # RxJS based IO handler and states (consumed by contexts)
├── types # TypeScript types (e.g. generated types for Midgard API)
└── views # "Container" components

Security

ASGARDEX follows security recommendation made by Electron team, such as:

Packaging

Important note for macOS users: Please follow guide of "How to package ASGARDEX on macOS" before running following command.

yarn package:electron

Keystores

By creating or importing a keystore wallet, ASGARDEX is adding its encrypted keystore into wallets.json in Electron's appData folder at following location:

Windows

# ASGARDEX installed from *.exe
%APPDATA%/ASGARDEX/storage/wallets.json
# ASGARDEX built and run locally
%APPDATA%/Electron/storage/wallets.json

macOS

# ASGARDEX installed from *.dmg
~/Library/Application Support/ASGARDEX/storage/wallets.json
# ASGARDEX built and run locally
~/Library/Application Support/Electron/storage/wallets.json

Linux

# ASGARDEX installed from *.deb
~/.config/ASGARDEX/storage/wallets.json
# ASGARDEX built and run locally
~/.config/Electron/storage/wallets.json

By removing a wallet in Wallet -> Settings its data will be removed from wallets.json. ASGARDEX will prompt a message to users to inform about saving its phrase on a save place before removing the wallet.

After removing all wallets wallets.json will be empty and won't include any wallet related data.

Ledger accounts

By adding a Ledger account to a wallet, ASGARDEX saves its address and some extra information (chain, network, walletIndex, hdMode) into ledgers.json located in Electron's appData folder:

Windows

# ASGARDEX installed from *.exe
%APPDATA%/ASGARDEX/storage/ledgers.json
# ASGARDEX built and run locally
%APPDATA%/Electron/storage/ledgers.json

macOS

# ASGARDEX installed from *.dmg
~/Library/Application Support/ASGARDEX/storage/ledgers.json
# ASGARDEX built and run locally
~/Library/Application Support/Electron/storage/ledgers.json

Linux

# ASGARDEX installed from *.deb
~/.config/ASGARDEX/storage/ledgers.json
# ASGARDEX built and run locally
~/.config/Electron/storage/ledgers.json

Whenever a Ledger has been removed in Wallet -> Settings, its data will be removed from ledgers.json. By removing all Ledger accounts from each wallet ledgers.json will be empty and won't include any Ledger related data. The same by removing all wallets.

Git branching workflow

See BRANCHING_WORKFLOW.md

Releasing

See RELEASE.md

Docs

See the docs and guides here

Contributing

Everyone is welcome to contribute. Check open issues or create a new one to start your work with and open a PR afterwards. Newcomers might want to check issues labeled as good first issues.

Bug Reports

Please use bug report template to file any bugs.

License

MIT THORChain