All Projects → memtrip → eosreach-android

memtrip / eosreach-android

Licence: GPL-3.0 license
An EOS wallet developed in Kotlin using the eos-jvm SDK and the model view intent (MVI) design pattern. This wallet serves as a blueprint for how other developers might want to utilise eos-jvm to develop native Android apps that consume the EOS blockchain.

Programming Languages

kotlin
9241 projects

Projects that are alternatives of or similar to eosreach-android

Reaktor
👾 A Framework for reactive and unidirectional Kotlin application archtitecture with RxJava2.
Stars: ✭ 16 (-56.76%)
Mutual labels:  mvi, mvi-architecture
android-mvi
Android MVI design pattern in Kotlin
Stars: ✭ 57 (+54.05%)
Mutual labels:  mvi, mvi-architecture
eosgo-client
A simple Go wrapper of EOS (eosio) RPC API, and more!
Stars: ✭ 29 (-21.62%)
Mutual labels:  eos, eosio
eosdart
EOS API Client in Dart Language
Stars: ✭ 33 (-10.81%)
Mutual labels:  eos, eosio
WeatherApp MVI sample
🌸[Functional reactive programming (FRP)] 🍁Simple Android weather forecast application written in Kotlin, using RxKotlin, Retrofit2, Mosby, Room Persistence ❄️MVI Pattern with Mosby Library
Stars: ✭ 106 (+186.49%)
Mutual labels:  mvi, mvi-architecture
Delish
Delish, a Food Recipes App in Jetpack Compose and Hilt based on modern Android tech-stacks and MVI clean architecture.
Stars: ✭ 356 (+862.16%)
Mutual labels:  mvi, mvi-architecture
UI-Communication-with-MVI
Effective UI Communication with MVI architecture, a BaseActivity and the Repository Pattern.
Stars: ✭ 17 (-54.05%)
Mutual labels:  mvi, mvi-architecture
Reamp
A painkiller for your Android apps
Stars: ✭ 51 (+37.84%)
Mutual labels:  mvi, mvi-architecture
geos
golang implementation of the EOS protocol
Stars: ✭ 67 (+81.08%)
Mutual labels:  eos, eosio
ping-eos
Implementing ping between EOS / React.js
Stars: ✭ 86 (+132.43%)
Mutual labels:  eos, eosio
EOS-Proxy-Token
Proxy token to allow mitigating EOSIO Ram exploit
Stars: ✭ 22 (-40.54%)
Mutual labels:  eos, eosio
eosportal-api
🗳EOSPortal Community Voting
Stars: ✭ 16 (-56.76%)
Mutual labels:  eos, eosio
Trickl
trickl torrent client
Stars: ✭ 50 (+35.14%)
Mutual labels:  mvi, mvi-architecture
eos-jvm
EOS libraries for the JVM, designed primarily for Android development.
Stars: ✭ 38 (+2.7%)
Mutual labels:  eos, eosio
luckydog
luckydog(锦鲤) 一个幸运小游戏
Stars: ✭ 14 (-62.16%)
Mutual labels:  eos, eosio
eosdart ecc
Elliptic curve cryptography functions in Dart. Private Key, Public Key, Signature, AES, Encryption, Decryption
Stars: ✭ 25 (-32.43%)
Mutual labels:  eos, eosio
Keemun
No description or website provided.
Stars: ✭ 13 (-64.86%)
Mutual labels:  mvi, mvi-architecture
namevault
Account creator & name generator for users on EOS and EOSIO compatible blockchains.
Stars: ✭ 17 (-54.05%)
Mutual labels:  eos, eosio
alcor-ui
Alcor Exchange | First self-listing onchain DEX for eosio tokens;
Stars: ✭ 103 (+178.38%)
Mutual labels:  eos, eosio
Pagination-MVI-Flow
Pagination MVI Coroutines Flow. Play MVI with Kotlin Coroutines Flow | MVI pattern on Android using Kotlin Coroutines Flow | Dagger Hilt DI | SharedFlow | StateFlow
Stars: ✭ 45 (+21.62%)
Mutual labels:  mvi, mvi-architecture

EOSREACH

An EOS wallet developed in Kotlin using the eos-jvm SDK.

Foreword

The current generation of browser plugin dependant DApps are not fit for mass market consumption, the average consumer has little interest in the fact that the products they use are running on top of a blockchain technology. We do not see a future for generic wallet apps as a gateway to Dapps running in web views, in comparison to native mobile experiences, the UX is slow and cumbersome.

This wallet serves as a blueprint for how other developers might want to utilise eos-jvm to develop native Android apps that consume the EOS blockchain.

Design pattern

The app uses the model view intent (MVI) design pattern, a unidirectional data flow driven by a single Rx PublishSubject.

Key management

Import private key

When an EOS private key is imported, the EOS public key counterpart is resolved and a new RSA KeyPair is created in the AndroidKeyStore, the base58 EOS public key is used as the alias of this new RSA KeyPair. The KeyPairs contained in the AndroidKeyStore can only be accessed by the app process that created them. Read more about the Android keystore system

The RSA KeyPair created previously is used to encrypt the EOS private key bytes, the encrypted bytes are stored in the Android shared preferences using the base58 EOS public key as the storage key. e.g; sharedPref.edit().putString(eosPublicKeyBase58String, encryptedPrivateKey)

See EosKeyManagerImpl for implementation details

Create account

The memtripissue service is used to create an account on behalf of the user, in this scenario a new EOS key pair is generated on the device and the private key is encrypted using the aforementioned mechanism. The EOS public key counterpart as base58 is sent to the memtripissue service to be assigned as both the owner and active authority of the new account.

Accounts and public keys

The EOS public key counterparts to any imported private keys are stored in a local SQLite database, along with the accounts associated with each public key.

Transaction signing

When an EOS private key is required to sign a transaction, the base58 EOS public key counterpart is used to fetch the RSA encrypted private key bytes from the Android shared preferences. The RSA KeyPair used to encrypted the private key was imported using the base58 EOS public key as the alias, as such the public key fetches the RSA KeyPair and uses it to decrypt the private key bytes. At this point the EOS private key can be used to sign the transaction.

Disabling screen shots

The import key, show private keys and create account activities have the window FLAG_SECURE set. This window option disables the ability to take screenshots, blocking any screen scraping malware from viewing sensitive information.

window.setFlags(
    WindowManager.LayoutParams.FLAG_SECURE,
    WindowManager.LayoutParams.FLAG_SECURE)

Tests

The ui tests in androidTestStub run against the offline stubs defined in the stub product flavour, these are the quickest way to verify the core functionality. The ui tests in androidTestDev run against a local nodeos instance, they are to verify transaction signing and they assume the eos-jvm dev setup script has been ran.

Vote for memtripblock

If you find this app useful, please consider voting for memtripblock as a block producer. We are committed to open sourcing all the software we develop, let’s build the future of EOS on mobile together!

TODO

  • Support for hardware generated private keys

Stability

  • Ensure all screens support screen rotation correctly
  • Ensure every rx call is handling errors properly, easily verified by unit tests
  • sanity check for unused resources and files (lint)
  • write unit tests for all the ViewModels
  • expand the UI integration tests
  • Ensure that all OnError states or repeatable intents include a unique ID (MxViewModel filters intents by distinctUntilChanged)
  • Publish Idle model in a more elegant way and ensure Idle is published after all dialogs

Backlog

  • Import key / create account should trigger an account list refresh
  • Support a generic action type in the action list
  • use https://github.com/ThreeTen/threetenbp rather than Date for times
  • pull to refresh on block producer screen
  • Add a loading indicator to the action lazy loading
  • Add an error indicator to the action lazy loading
  • Handle all airdrop token decimal formats, currently only supporting 0.0000
  • stop the lazy loading from triggering multiple network requests
  • All EOS values in the app should be formatted with 0.0000

Credits

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].