Feature list
Symbols:
-
not needed
Wallet
THOR | BNB / BEP2 | BTC | BCH | DOGE | ETH / ERC20 | LTC | TERRA | COSMOS | |
---|---|---|---|---|---|---|---|---|---|
Keystore | |||||||||
Ledger * | |||||||||
Send ** | |||||||||
Receive | |||||||||
Upgrade *** | - | - | - | - | - | - | |||
Deposit | - | - | - | - | - | - | - | - | |
Shares | |||||||||
History | |||||||||
Synths |
(*) Ledger THOR
is not supported at stagenet
. Ledger LTC
/BCH
/DOGE
/Terra
are not supported at testnet
(**) With or without memo
(***) Upgrade RUNE (BEP2) or RUNE (ERC20) to RUNE (Native)
Exchange
THOR | BNB / BEP2 | BTC | BCH | DOGE | ETH / ERC20 | LTC | TERRA | COSMOS | |
---|---|---|---|---|---|---|---|---|---|
Pools overview | - | ||||||||
Pool detail | - | ||||||||
Swap | |||||||||
Deposit * | |||||||||
Withdraw * | |||||||||
Recovery tool | |||||||||
Synths |
(*) Symmetrical deposit/withdraw only
THORNode
Overview | Status | BOND | UNBOND | LEAVE |
---|---|---|---|---|
Languages
ENGLISH |
GERMAN |
FRENCH |
RUSSIAN |
---|---|---|---|
Misc.
- 100% open-source (built by the community)
- Security first
- No extra (affiliate) fees
ASGARDEX uses following libraries, frameworks and more:
(in alphabetical order)
- Ant Design
- Create React App
- ESLint
- Electron
- fp-ts
- Jest
- Observable Hooks
- Prettier
- ReactJS
- Styled Components
- Testcafe
THORChain Byzantine Module- RxJS
- Typescript
- xchainjs-lib
- and others ...
Install
It's recommended to use a Node version as same as Electron is running with (currently: Electron v19.x
/ Node 16.14.2
). It's recommened to install nvm to run as same Node version locally as used for building ASGARDEX on CI.
git clone https://github.com/thorchain/asgardex-electron.git asgardex
cd asgardex
yarn
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
- Build sources needed by
main
process (only once or whenever you change something inpreload.ts
orelectron.ts
)
yarn prebuild
- Build everything needed by
renderer
process and run application inwatch
mode
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 types and endpoints for Midgard
Whenever Midgard has been updated with a new release, run following script to auto-generate types and endpoints
generate:types
Generated files are based on Midgard's swagger.json.
Generate ERC20 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
yarn generate:erc20whitelist
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
How to enable (more) chains for development
Add chains you want to have for development to REACT_APP_CHAINS_ENABLED
, for example
REACT_APP_CHAINS_ENABLED=THOR,BNB,BTC,ETH,LTC
Note: String of chains have to be as same as definitions in xchain-util
Tests
unit
yarn test
e2e
Note: Running test-cafe is disabled (see #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
Note: Running storybook
is broken currently due lack of React 18
support (see #2248). It will be fixed as soon as storybook
supports React 18
.
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:
- Disable the Node.js integration in renderers that display remote content
- Enable context isolation in renderers that display remote content
- Expose IPC-based APIs to provide one method per IPC message
- Disable the remote module
- Do not use openExternal with untrusted content. Provided hostnames are defined in
EXTERNALS_WHITELIST
, all others are blocked. This list has to be extended if needed. - Use a current version of Electron
Packaging
Important note for macOS
users: Please follow guide of "How to package ASGARDEX
on macOS" before running following command.
yarn package:electron
Keystore
By creating a new wallet or importing an existing one, ASGARDEX is saving wallet's phrase encrypted in keystore.json
on your machine in Electron's appData
folder at following location:
Windows
# ASGARDEX installed from *.exe
%APPDATA%/ASGARDEX/storage/keystore.json
# ASGARDEX built and run locally
%APPDATA%/Electron/storage/keystore.json
macOS
# ASGARDEX installed from *.dmg
~/Library/Application Support/ASGARDEX/storage/keystore.json
# ASGARDEX built and run locally
~/Library/Application Support/Electron/storage/keystore.json
Linux
# ASGARDEX installed from *.deb
~/.config/ASGARDEX/storage/keystore.json
# ASGARDEX built and run locally
~/.config/Electron/storage/keystore.json
keystore.json
can be removed in ASGARDEX by clicking "Remove wallet" in Wallet -> Settings
or by removing it manually.
Git branching workflow
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