# Cryptocurrency Wallet as A Service A unified interface acted as wallets for customers to interact with cryptocurrency blockchains. [TOC] ## Api Document https://tinyurl.com/raha7sa4 ## Attributes 1. Secure: Properly generate/store/encrypt/decrypt private keys. 2. Multi-currency supported: Bitcoin / Ether / Tron / Tether (Erc20) / Tether (Trc20) 3. Fast and Stable: * an good average response time for every APIs. * an acceptable process time for blockchain transactions. ## Components For each client *account*, each *cryptocurrency*, the client has their own: * Balance (for checking the balance of the money) * Addresses (for receiving money) * Deposits (for checking the history of deposits) * Withdrawals (for checking the history of withdrawals, transactions fees, ...) * ... ## Capabilities In terms of Http methods: | | read | create | update | | | -------- | ------| ------ | ------ | --------- | | Balances | GET | | | | | Addresses | GET | POST | PATCH | | | Deposits | GET | POST | | Notifications | | Withdrawals | GET | POST | | Notifications | | ... | ... | ... | ... | ... | 1. As an user I can create as many *addresses* as I want to receive bitcoins. 2. As an user I can create an *address* with a prescribed *web-hook* (url) so that I will be notified when the address has received a new deposit. 3. As an user I will be notified when there comes into a new *deposit*. 4. As an user I can check out my balance for my bitcoins. 5. As an user I can withdrawal my bitcoins, and latter be notified when the transaction is confirmed. ## Developer Guide * Ensuring Uniqueness of Withdrawals: Each request is created by client-side, and the server(api) and the client must ensure uniqueness of every request under the possible network failures. (via e.g. `client_id`) * Ensuring Account Separation: Prevent an client from withdrawal more money than their balances. * Ensuring Rejection of Potential Fake Deposits for a Cryptocurrency: * For example: **Ripple Partial Payment Exploit** - https://xrpl.org/partial-payments.html#partial-payments-exploit * Ensuring Never Exposing Private Keys to Networks. * About Tests: * Unit Tests (Automated) * Integration Tests (Automated) * Scenario Tests on Testnet environment (Manual) * Scenario Tests on Mainnet environment (Manual) * Languages, Frameworks, Deployment ...: * TypeScript/Node14 * JavaScript/Node14 * MongoDB * Jest * Drone CI * Docker * GCP with Cloud Key Management, Secret Manager, Load Balancer