I have had the idea for some time to build an XRP wallet. After attending the PayID Developer Conference and seeing what the PayID protocol had to offer, I wanted to take up the challenge and build something on top of it. I also found the idea of being able to abstract the XRP wallet address a great idea making it as easy as sending an email to someone to pay someone in XRP.
What it does
My app allows you to send XRP payments to other PayID addresses or to other XRP addresses. There is no limit on only sending payments to people who use our app to create their PayID. As long as the PayID has a valid XRP wallet linked to it, our app can send a payment to the other PayID address.
I give the user the ability to link both one MAINNET XRP wallet (production) and one TESTNET XRP wallet to their PayID.
If a user wants to get comfortable using our app and sending PayID or XRP payments, they can easily switch to the XRPL TESTNET in the settings. They then have the ability to create test wallets and link a test wallet to there PayID.
- Create your unique PayID address and start accepting XRP payments using your PayID address
- Share feature to share your PayID with others
- Share feature to share XRP wallet addresses
- QR Code created for your PayID that others can scan to send payments
- Ability to create multiple production XRP Wallets and multiple test XRP Wallets
- Ability to dynamically change the test or production XRP wallet that is linked to your PayID address directly from the app
- User Case: You want someone to send you a payment to a different wallet. Make the change in a matter of seconds, and you have different XRP wallet linked to your PayID
- View XRP Wallet balance
- View Transaction of each wallet from the app
- Ability to send payment between your wallets in the app
- Ability to send payment from individual wallets to other XRP Wallets or PayID addresses
- After a user has sent a payment they receive an app notification after the payment has settled on the ledger
- I show a green link icon in the corner of the wallet that is currently linked to a user's PayID. That way, the user knows which wallet is currently linked to their PayID.
- Settings section allows a user to switch between test wallets and production wallets
- Settings section allows users to changed the name of their XRP wallets
- All sensitive wallet data is store locally on a user's device and never sent to our servers for extra security.
How I built it (Technical Specs.)
I built the app using the following technologies and flow:
- SwiftUI to design the front end of the iOS app
- Swift to code the backend that interacts with the front end
- Realm to store wallet data on the user's device
- Firebase to store the users PayID to sync between devices
- AWS API Gateway to proxy the request to the AWS Lambda functions that communicate with the PayID Admin API endpoints
- AWS Lambda functions to make calls to the PayID server securely
- AWS RDS as the backend database for the PayID Servers
- AWS EC2 instances to run the load-balanced PayID Servers
- LetsEncrypt to generate the SSL certificates to securely communicate over HTTPS
- Google Firebase for user authentications and authorization
- Google Firebase Cloud Functions to securely makes calls to the AWS API Gateway endpoint from the mobile front end
- All interactions with the XRP Ledger uses the Xpring SDK which saved me a lot of time
Challenges I ran into
- The first challenge I ran into was figuring out how to securely communicate with the PayID Admin APIs from a mobile app without exposing the PayID admin endpoints to the outside world.
- I overcame this challenge by combining various cloud technologies to secure the admin endpoints
- The second challenge that I faced was syncing the users PayID address between multiple devices
Accomplishments that I'm proud of
What I am most proud of is being able to put together a payment application that uses XRP as its payment method, and being able to build it from start to finish in about three and half weeks.
What I learned
I learned the following things:
- I learned a lot about the PayID protocol and how to use it to build production payment apps on top of the protocol
- I learned to take advantage of multiple cloud providers and not just one provider to build a complete solution on top of them
What's next for DigiXPayID
Here is what's next
- Continue to build out features to the app such as:
- Figure out a way to integrate the Interledger protocol for payments
- The ability to add other supported wallet types to a users PayID (BTC, ETH, and others as support is added)
- See where there are possible integration points between exchanges such as Uphold and Coinbase
- Add the ability to restore wallets with seed words
- Based on user traction I will also release an Android version
- Refine the user interface
- Based on traction possibly seek funding to expand features, functionality, and growth of the application