You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Gaëtan Renaudeau 965af3bd3b Disable minimize for all bundles 7 years ago
.circleci Refresh circleci cache key 7 years ago
.github Update enhancement.md 7 years ago
.storybook Integrate countervalues changes 7 years ago
build Make electron-builder package icon for .AppImage 7 years ago
docs better screenshot.png 7 years ago
flow-defs include git revision in sentry & export file name 7 years ago
scripts Lint shell scripts 7 years ago
src More robust implementation of Error fallback 7 years ago
static More robust implementation of Error fallback 7 years ago
webpack Disable minimize for all bundles 7 years ago
.babelrc Use REAL babel.config in electron-webpack 7 years ago
.eslintrc include git revision in sentry & export file name 7 years ago
.flowconfig bump some deps 7 years ago
.gitignore refactor icons to move react element into constants 7 years ago
.npmrc \n 7 years ago
.nvmrc Add \n to .nvmrc 7 years ago
.prettierignore Reverse transactions in accounts reducers 7 years ago
.prettierrc init 🎉 7 years ago
LICENSE Add LICENSE 7 years ago
README.md README: new images 7 years ago
babel.config.js don't disable the displayName of styled components 7 years ago
crowdin.yml crowdin config 7 years ago
electron-builder.yml Disable useless .tar.gz and tweak AppImage and compile options 7 years ago
jest.config.js __APP_VERSION__ jest global 7 years ago
package.json Add context menu 7 years ago
yarn.lock Merge pull request #1015 from gre/fix-logs 7 years ago

README.md

Ledger Live (desktop) CircleCI Crowdin

Ledger Live is a new generation wallet desktop application providing a unique interface to maintain multiple cryptocurrencies for your Ledger Nano S / Blue. Manage your device, create accounts, receive and send cryptoassets, ...and many more.

Architecture

Ledger Live is an hybrid desktop application built with Electron, React, Redux, RxJS,.. and highly optimized with ledger-core C++ library to deal with blockchains (sync, broadcast,..) via ledger-core-node-bindings. It communicates to Ledger hardware wallet devices (Nano S / Blue) to verify address and sign transactions with ledgerjs. Some logic is shared with live-common.

Setup

Requirements

Optional

  • In the application we use Museo Sans font. To include it in the app, you need to have a zip file museosans.zip which you should extract and place inside the static/fonts/museosans directory

Install

# install dependencies
yarn

Run

# launch the app
yarn start

Build

# Build & package the whole app
# Creates a .dmg for Mac, .exe installer for Windows, or .AppImage for Linux
# Output files will be created in dist/ folder
yarn dist

Note: Use yarn dist:dir to speed up the process: it will skip the packaging step. Handy for debugging builds. You can also use BUNDLE_ANALYZER=1 yarn dist:dir to generate webpack-bundle-analyzer report.


Config (optional helpers)

Environment variables

(you can use a .env or export environment variables)

DEV_TOOLS_MODE=bottom # devtools position Options: right, bottom, undocked, detach
HIDE_DEV_WINDOW=0

## flags for development purpose
DEBUG_DEVICE=1
DEBUG_NETWORK=1
DEBUG_COMMANDS=1
DEBUG_DB=1
DEBUG_ACTION=1
DEBUG_TAB_KEY=1
DEBUG_LIBCORE=1
DEBUG_WS=1
LEDGER_RESET_ALL=1
LEDGER_DEBUG_ALL_LANGS=1
SKIP_GENUINE=1
SKIP_ONBOARDING=1
SHOW_LEGACY_NEW_ACCOUNT=1
HIGHLIGHT_I18N=1

## constants
GET_CALLS_TIMEOUT=30000
GET_CALLS_RETRY=2
SYNC_MAX_CONCURRENT=6
SYNC_BOOT_DELAY=2000
SYNC_ALL_INTERVAL=60000
CHECK_APP_INTERVAL_WHEN_INVALID=600
CHECK_APP_INTERVAL_WHEN_VALID=1200
CHECK_UPDATE_DELAY=5000
DEVICE_DISCONNECT_DEBOUNCE=500

Launch storybook

We use storybook for UI development.

yarn storybook

Run code quality checks

yarn lint                # launch eslint
yarn prettier            # launch prettier
yarn flow                # launch flow
yarn test                # launch unit tests

Programmatically reset app files

# clear the dev electron user data directory
# it remove sqlite db, accounts, settings
# useful to start from a fresh state

yarn reset-files

File structure

.
├── dist : output folder generate by the build
├── scripts : commands (for building, releasing,...)
├── src
│   ├── internals : code that run on the 'internal' thread.
│   ├── main : code that run on the 'main' thread.
│   ├── renderer : code that run on the 'renderer' thread
│   ├── components : all the React components
|       └── modals : sub levels for the modals
│   ├── api : related to HTTP APIs
│   ├── bridge : an abstraction on top of blockchains apis (libcore / js impls)
│   ├── commands : an abstraction to run code over the internal thread
│   ├── icons : all the icons of our app, as React components.
│   ├── config : contains the constants,...
│   ├── helpers : generic folder for our business logic (might be reorganized in the future)
│   ├── middlewares : redux middlewares
│   ├── actions : redux actions
│   ├── reducers : redux reducers
│   ├── sentry : for our bug tracker
│   ├── stories : for storybook
│   ├── styles : theme
│   ├── logger.js : abstraction for all our console.log s
│   └── types : global flow types
├── static
│   ├── docs
│   ├── fonts
│   ├── i18n
│   ├── images
│   └── videos
├── webpack : build configuration
└── yarn.lock