Skip to content
Shashank Shinde edited this page Apr 14, 2022 · 3 revisions

Architecture

Hexa-Pay Sysytem Architecture

System arch

Hexa-Pay App Architecture

App arch

Data Model

User profile

  • Wallet id
  • Device id
  • Instance id
  • Phone number hash

Technical decisions

Database - Watermelon DB vs Realm

Despite the initial inclination towards using Watermelon DB, we chose to move forward w/ Realm(used in Hexa 2.0 as well) as Watermelon doesn't provide a stable encryption mechanism on Android whereas Realm does. Currently, the only problem w/ Realm is that it doesn't work with Chrome Debugger(thereby slowing down the debugging process), however, it can still be used in debug mode w/ flipper.

We'll be using Realm to store all of the sensitive(encrypted) & large app data, while storing the encryption key for the database in the secure enclave(accessible only post user authentication - pin or faceID).

State Management - Redux w/ Redux-Saga & Redux Persist

We'll be using Redux for global state management and the redux-saga middleware for task execution & state updation.

Redux-saga

Redux-persist would be used to persist the reducer states(containing insensitive data) between app sessions. Ideally, we would like to eliminate redux-persist and use Realm for rehydrating reducers.

Process for Releases

We plan to have at-least two releases per week

Issue Tracking

  • Issue tracking will be done through GitHub. (Internal Meeting every working day at 11 am IST)
  • Milestone tagging will be used over labeling for better release management

Issues will have three predefined templates:-

1. Features (Story) Features/Stories to plan big to-dos, which can be part of either one or multiple releases and be further broken down into tasks.
Multiple people can work on this 


2. Tasks Tasks as the name suggests can be used to plan specific tasks which should not take more than 1-2 working days. They are part of a bigger Feature/Story

3. Bugs Bugs that are reported during testing or after releases are tagged here

Issue Tracking will be done through Task Board (Project)

Phases

ToDo -> Requirement Gathering -> In Progress -> In Review -> Dev -> QA -> QA Approved -> Staging -> Done (Release)