I often chat with people in the Stellar Slack who want to build something similar to Venmo and they tend to struggle understanding how different concepts apply for what they are trying to do.
For this SBC I'll be working on a set of tutorials to create a complete walk through on how to create an app similar to Venmo using Stellar and include an open source reference architecture that others can use to get started quickly.
In the Stellar universe, an entity like Venmo is called an Anchor. From the Stellar documentation:
Anchors are entities that people trust to hold their deposits and issue credits into the Stellar network for those deposits.
The official documentation to create an anchor suggests two ways to maintain customers accounts. The first one is to maintain a Stellar account for each customer and the second one is to maintain a single account and use the memo field to identify who is the recipient. The documentation then expands on the second method without covering the first one.
In this set of tutorials, I'll maintain a Stellar account for each customer and making it transparent that I am using Stellar. Users will use their twitter handle or something similar to send "dollars" to each other and our back-end will take care of signing transactions on behalf of the customers.
By the end of the series I will have:
- A React-Native wallet similar(ish) to Venmo released under MIT license.
- A node server to sign transactions, create and setup accounts.
List of articles for this series:
- Creating your own Asset: How to create an asset representing fiat and information on trustlines.
- Understanding multisig: How to manage accounts with a multisig schema and considerations.
- Using the Stellar-SDK in React-Native: Introduce the Stellar-SDK polyfill and how to display an account data in a RN app.
- Creating an user signup flow: Very simple user signup flow based in user name. It shows how to setup Stellar account, multisig and trustline schema.
- Depositing "fiat" into your wallet: A fake implementation in the wallet similar to transferring money from a bank.
- Showing account transactions: Implements the transaction history in the RN wallet.
- Sending payments: Flow for doing P2P payments.
- Cashing out: A fake implementation for transferring money to the bank account
Note: For a production level application using AWS directly instead of Heroku would be a better idea but for this tutorial I'll make some assumptions and then leave notes where things will require better security considerations.
Looking forward to hearing your comments and learning what would you like me to write about with these articles.