/coin-wallet

A browser-based crypto wallet

Primary LanguageJavaScript

Coin Wallet

About

Coin Wallet is a standalone browser-based cryptocurrency wallet. It bootstrapped with Create React App and uses the Material UI React component library. The BlockCypher API is used to interface with the blockchain.

Disclaimer

Be smart and use this at your own risk. I am not responsible for any lost funds.

Features

  • Setup
    • Create new wallet
    • Store wallet in browser's local storage (with encrypted private keys)
    • Download encrypted wallet backup
    • Import existing wallet backup
  • Main page
    • View balance
    • View transactions
    • Send coins
  • Settings
    • Export wallet
    • Change wallet password
    • Reset wallet

Getting Started

  • Clone this repository with git clone https://github.com/mikelduffy/coin-wallet.git && cd ./coin-wallet
  • Install dependencies with yarn install or npm install
  • Run cp .env.local-sample .env.local and add your blockcypher API key to your .env.local file
  • Start the application with yarn start or npm start

Testing

  • Run yarn run test or npm run test to test the application

API Considerations

  • The blockchain.info API does not support a testnet, which complicates the development process. However, their websocket feature would make it easy to update new transactions without the need for long polling.
  • The bitgo API has a pretty robust javascript library which offers testnet support as well as returning promises to utilize async/await. They only support webhook notifications, so a deployed backend and websocket/eventsource would be required for real-time transaction updates. Long polling their list transactions API is also an option. The biggest downside of using their API is their pricing model (0.25% of each outgoing transaction).
  • The blockcypher API supports a test net, multiple currencies, a RESTful API as well as a javascript library. They have a free limited useage API, which would be sufficient for this project. They also have a websocket feature, however it does not have the option to listen for events from a specified address. Using long polling as an alternative makes the blockcypher API the best choice.