GithubHelp home page GithubHelp logo

hexresearch / ergvein Goto Github PK

View Code? Open in Web Editor NEW
35.0 12.0 8.0 44.18 MB

Multiplatform BTC wallet with client side filters

Home Page: https://cypra.io

License: MIT License

Nix 1.15% Haskell 13.49% Shell 0.12% CSS 0.38% C 0.55% Java 0.64% HTML 0.25% JavaScript 83.41% Dockerfile 0.01%
wallet cachix spv privacy desktop mobile bitcoin bitcoin-wallet

ergvein's People

Contributors

aminion avatar fastpok avatar iqsf avatar ivanovs-4 avatar lemarwin avatar licaon-kter avatar nazgull08 avatar nazgull09 avatar ncrashed avatar romcheck avatar shimuuar avatar voidlizard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ergvein's Issues

Awaiting page

Special page that is used as loading screen. Takes text to display and event when to switch next.

Example of usage: generation of wallet after password setup, decryption of wallet after unlocking your wallet.

Page for transaction info

Related to #68. Display:

  • Tx id (copy on tap)
  • Label of tx
  • Blockexplorer url
  • Fee
  • Confirmations
  • Which block was included in
  • Raw bytes of tx (with copy on tap)
  • Outputs (boxes in ergo) created (copy address on tap)
  • Inputs (boxes in erg) spent (copy address on tap)

Widget for menu and header

Widget that adds header with black background on the top of most pages. It contains:

  • Name of wallet (by default is default_wallet)
  • Button for menu (three vertical points)

When user taps on menu button, dropdown or sliding menu appears. The menu will eventually contains options and wallet changing button.

Share button API

Develop function that allows to send bitcoin/ergo address with amount into another app.

Package with API for indexer

  • Create new cabal package that will hold API for indexer only.

  • The package will be compiled with GHCJS, GHC and under Android platform. So, only crossplatform packages are allowed. Template Haskell is allowed but limited.

  • Define API endpoints and types for:

  • Getting balance of given BTC/Ergo address
  • Getting transactions of given address
  • Posting signed transaction into BTC/Ergo blockchain
  • Versioning of API (url prefix like v1 v2)
  • Abstract API for different crypto types (BTC, Ergo)

Fee selection widget

Slider that allows to choose miner fee with desired ETA:

  • From likely 1 block
  • To 25 blocks
  • Add aditional description about estimation like. "Transactions that has that fee were confirmed withing 25 blocks in past several days."

Initial page

The page should consists of two buttons:

  • Create wallet
  • Restore wallet

Page with seed phrase generation

  1. Show user generated seed phrase.
  2. Ask to write down.
  3. Verification: from 3-4 options select all seed words one by one.
  4. Output resulted entropy as widget result.

Error handling

  • ErgveinError -- Error ADT
  • Localization for ErgveinError
  • MonadErrorPoster
  • Error popup widgets

Local storage for app's data

Datatype to store wallet data in a file:

  • EncryptedWalletData
  • Public keys with addresses
  • Transactions concerning the addresses
  • Settings

Make it extendable just in case

Make JSON instances to allow for encrypt/decrypt operations

Configurable storeDir

Make PlatformNatives use configurable storeDir.

storeDir is going to be provided in Settings and will be in Env

Receive page

  • QR code
  • Address display
  • Amount to request
  • Label for tx
  • Request next address
  • Button to save request
  • View saved requests
  • Share button to send address or invoice info

Send page

Display:

  • Form with address, amount, label, fee.
  • Button to switch to camera for QR code recognition.
  • Button to paste info from clipboard
  • Clear button
  • Pay button

Page with password input

Page with password input or simulation of modal window. The page will be used instead of #8 in desktop platform.

Storage of private keys

Module that abstracts storage of encrypted private keys in memory.

  • Define API that always takes pincode/password to return decrypted keys. Like:
getKeys :: Currency -> SecretKeySelector -> Password -> ([SecretKey] -> m a) -> m a
  • SecretKeySelector is some not yet designed type to define which keys we need. Typical scenarios:
    • Getting all keys to sign given transaction inputs (boxes in ergo).
    • Getting master key of currency to generate more keys
  • Keys must be encrypted 99% of time.
  • API to add new keys to storage.
  • API to serialize storage and deserialize it.

QR code recognition

Widget that connects to camera, draws additional overlay to center QR code, returns recognized QR code.

Backbone servant server for indexer

Implement server package for indexer:

  • Make stub endpoints for API
  • Make DB (using persistent + esqueleto) backbone (stub schema with migrations and connection to PostgreSQL)
  • Assemble into server exectutable.

Actual implementation of logic is postponed for the next step.

Back button

Connect Java API for system back button to the new reflex-dom-retractable library

Routing library for reflex

Implement helper monad for reflex-dom that allows to define workflow of widgets with saving history and states of widgets.

Additional important features are needed:

  • A way to clear stack of history
  • Mark widget to not store it in history

Page for transaction history

Display in and out transactions in list with date and amounts. Make redirect to page with tx additional information (id, rawbytes, etc).

Page with currencies

Default page that is visible when you create, restore or unlock your wallet.

Displays:

  • List of currencies
  • Their total balances (confirmed + unconfirmed)
  • State of sync (days behind head)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.