MyCrypto is an open-source, client-side tool for generating ether wallets, handling ERC-20 tokens, and interacting with the blockchain more easily. https://mycrypto.com
Go to file
William O'Beirne cb92f59e57 Electron Ledger + Trezor Support (#1836)
* Initial scaffold of enclave

* Cleanup types

* Add comments

* Do not truncate errors, pretty output

* Introduce helpers for sagas

* Update yarn lock

* Convert enclave into its own lib. Implement client and server.

* Check in progress

* Initial types

* Remove unused lib

* Finish types

* cleanup

* Switch over to using electron protocol, remove code thats no longer necessary

* Refactor Ledger and Trezor wallets to provide all functionality via libs. Run chain code generation thru Enclave.

* Check in trezor work

* Transaction signing

* Message signing

* Display address

* Fix deallocation of trezor

* Adjust API

* Remove unused getAddresses

* Fix imports and filenames to cooperate with internal typings

* Fix type uncertainty

* Add persistent message to Ledger unlock.

* Update ledger help link to kb

* Convert ledger over to updated libs

* Fix jest config

* Enclave README

* Unnecessary assertion

* Adjust tip

* Type ledger errors

* Reduce enclave client code.

* No default exports

* l18n user facing enclave errors

* Reduce repeated enclave code by splitting it into its own wallet lib. Fix some types

* tslint

* Reduce repeated enclave code by splitting it into its own wallet lib. Fix some types and error messages.

* Electron TREZOR Support (#1946)

* Type trezor connect.

* Check in trezor code

* Implement TREZOR wallet

* Convert TREZOR to use enclave class like Ledger.

* Switch to mycrypto fork of trezor lib. Remove unused dependencies.

* remove unnecessary window attachment

* tslint
2018-06-15 18:25:29 -05:00
.github Contributor Guidelines (#1054) 2018-02-11 20:59:06 -06:00
common Electron Ledger + Trezor Support (#1836) 2018-06-15 18:25:29 -05:00
electron-app Electron Ledger + Trezor Support (#1836) 2018-06-15 18:25:29 -05:00
jenkins add jenkins config for mac signing (#1664) 2018-04-24 17:55:01 -05:00
jest_config Electron Ledger + Trezor Support (#1836) 2018-06-15 18:25:29 -05:00
scripts Create script to update tokens list from ethereum-lists/tokens (#1247) 2018-04-13 12:02:00 -05:00
shared Electron Ledger + Trezor Support (#1836) 2018-06-15 18:25:29 -05:00
spec [Fix] Estimate Gas on Value Field Change (#1942) 2018-06-13 17:54:05 -05:00
static MyEtherWallet -> MyCrypto (#977) 2018-02-06 22:28:28 -06:00
webpack_config Electron Ledger + Trezor Support (#1836) 2018-06-15 18:25:29 -05:00
.drawbridgerc Add Drawbridge Prod Config (#1801) 2018-05-15 10:52:30 -05:00
.editorconfig Fix editor config (#1458) 2018-04-05 21:08:46 -05:00
.gitignore Mnemonic Redesign (#1501) 2018-04-12 23:50:36 -05:00
.npmrc Update dependencies to enable Greenkeeper 🌴 (#344) 2017-11-07 15:59:27 -08:00
.nvmrc Update Readme, bump nvmrc (#954) 2018-01-29 12:24:20 -06:00
.prettierignore Translation Updates (#1323) 2018-03-21 22:50:25 -05:00
.prettierrc Ensure CI fails on non-prettier compliant PRs (#693) 2018-01-01 17:51:18 -06:00
.travis.yml Add Electron Build to Travis (#1830) 2018-05-22 13:04:10 -05:00
LICENSE MyEtherWallet -> MyCrypto (#977) 2018-02-06 22:28:28 -06:00
README.md Update ReadMe instructions with yarn requirement (#1933) 2018-06-12 10:51:58 -05:00
package.json Electron Ledger + Trezor Support (#1836) 2018-06-15 18:25:29 -05:00
tsconfig.json TS Improvements (#1676) 2018-05-21 13:39:03 -05:00
tslint.json MEW-01-005 Web - Remove all HTTP links (#978) 2018-02-01 16:51:14 -06:00
yarn.lock Electron Ledger + Trezor Support (#1836) 2018-06-15 18:25:29 -05:00

README.md

MyCrypto Web & Desktop Apps

Coverage Status

Requirements

  • Node 8.9.4*
  • Yarn >= 1.7.0**
  • Python 2.7.X***

*Higher versions should work fun, but may cause inconsistencies. It's suggested you run 8.9.4 using nvm.
**npm is NOT supported for package management. MyCrypto uses yarn.lock to ensure sub-dependency versions are pinned, so yarn is required to install node_modules
***Python 3 is not supported, since our dependencies use node-gyp.

Running the App

After yarning all dependencies you can run various commands depending on what you want to do:

Development

# run app in dev mode in browser, rebuild on file changes
yarn dev
# run app in dev mode in electron, rebuild on file changes
yarn dev:electron

Build Releases

# builds the production server app
yarn build
# builds the downloadable version of the site
yarn build:downloadable
# builds the electron apps
yarn build:electron

# builds only one OS's electron app
yarn build:electron:(osx|linux|windows)

All of these builds are output to a folder in dist/.

Unit Tests:

# run unit tests with Jest
yarn test

Integration Tests:

# run integration tests with Jest
yarn test:int

Dev (HTTPS):

Some parts of the site, such as the Ledger wallet, require an HTTPS environment to work. To develop on HTTPS, do the following:

  1. Create your own SSL Certificate (Heroku has a nice guide here)
  2. Move the .key and .crt files into webpack_config/server.*
  3. Run the following command:
yarn dev:https

Address Derivation Checker:

EthereumJS-Util previously contained a bug that would incorrectly derive addresses from private keys with a 1/128 probability of occurring. A summary of this issue can be found here.

As a reactionary measure, the address derivation checker was created.

To test for correct address derivation, the address derivation checker uses multiple sources of address derivation (EthereumJS and PyEthereum) to ensure that multiple official implementations derive the same address for any given private key.

The derivation checker utility assumes that you have:
  1. Docker installed/available
  2. dternyak/eth-priv-to-addr pulled from DockerHub
Docker setup instructions:
  1. Install docker (on macOS, Docker for Mac is suggested)
  2. docker pull dternyak/eth-priv-to-addr
Run Derivation Checker

The derivation checker utility runs as part of the integration test suite.

yarn test:int

Folder structure:

│
├── common
│   ├── actions - Application actions
│   ├── api - Services and XHR utils
│   ├── assets - Images, fonts, etc.
│   ├── components - Components according to "Redux philosophy"
│   ├── config - Various config data and hard-coded json
│   ├── containers - Containers according to "Redux philosophy"
│   ├── libs - Framework-agnostic libraries and business logic
│   ├── reducers - Redux reducers
│   ├── sagas - Redux sagas
│   ├── sass - SCSS styles, variables, mixins
│   ├── selectors - Redux selectors
│   ├── translations - Language JSON dictionaries
│   ├── typescript - Typescript definition files
│   ├── utils - Common use utility functions
│   ├── index.tsx - Entry point for app
│   ├── index.html - Html template file for html-webpack-plugin
│   ├── Root.tsx - Root component for React
│   └── store.ts - Redux reducer combiner and middleware injector
├── electron-app - Code for the native electron app
├── jest_config - Jest testing configuration
├── spec - Jest unit tests, mirror's common's structure
├── static - Files that don't get compiled, just moved to build
└── webpack_config - Webpack configuration

More information is available on the Wiki Pages

Thanks & Support

Cross browser testing and debugging provided by the very lovely team at BrowserStack.