Sprint 3 Report - aaronkopplin/Metallic-React-Native GitHub Wiki
Prepared By: Aaron Kopplin, Brad Samack, Josh Hubbard, Myren Mitchell
Intended Progress
For Aaron, this sprint was all about Ethereum accounts. He intended to allow for depositing ether, sending payments, and working with addresses and accounts. Aaron succeeded in depositing test-net ether to the accounts, as well as querying the blockchain for account balances using infura, which is an service provider that allows us to interact with the ethereum blockchain from javascript.
Brad started this sprint with the main task to implement the contacts functionality. This entailed implementing contacts within the database, making each users contacts unique to them, designing the screen, and all the backend programming behind its implementation in code.
Josh went into sprint 3 with the goal of first completing the functionality of the user search screen, which was a rollover from sprint 2, to allow for the list of matches to update dynamically as text is entered. Next was to wireframe and add functionality to the payments screen to allow mock payments to be sent from one account to another. These mock payments will be replaced with actual payments in the next sprint. The search functionality was quickly completed with Aaron's help. As for the payments screen, a full preliminary wireframe has been completed, but sending mock payments between users is still a work in progress and will be completed in the next sprint.
Myren started off the third sprint by first finishing up the styling of the Recent Chats page from the previous sprint. Afterwards, they began working on adding a feature to allow users to upload and change their profile pictures.
Progress Reflection
This sprint, Aaron learned a lot about ethers.js, the javascript library we are using to talk with our ethereum blockchain service provider. This provider is an api endpoint that can interact with the ethereum blockchain. This sprint, he moved the account creation from app.js to the create account page. I also reworked the way that the account is stored and retrieved from memory. Then, he deposited some test ethereum to our accounts and was able to successfully display the correct balance of the accounts. Aaron intended to send payments between accounts this sprint, and he did write a script for that but he has not tested it. Aaron was sidetracked from testing this when he noticed that the addresses for each users account were not stored on firebase yet. So, he went about adding that information to the database. Now, all new accounts have addresses generated for them and the public address is stored on the database. This will allow us to better test the payments page, and next sprint we should be able to make payments between accounts and have them displayed on the app for the user. This sprint, Aaron also moved the account information (public address, private key, and mnemonic) to a separate page that the user can access through the account page. This way, our app is more in line with the idea of hiding the confusing information from the user, and improving the user experience.
Brad made progress in some areas he wasn't planning and fell short in others. Overall, achieving the implementation of contacts within the app. Getting everything to work well required more research and intuitive thinking than he initially expected. The end result is something that Brad's happy with and feels with a few tweaks will be all set.
Josh feels that he has made a reasonable amount of progress throughout sprint 3, but thinks that he could have been a bit more productive when it came to completing the payments screen. Though Josh feels that he could have done more, he did learn a considerable amount about better working with Firebase, which will better help with finishing the payments screen.
Myren did not make as much progress as they wanted, but the work involved in connecting our project to Firebase storage and working with image pickers ended up being much more complicated than we originally though it would be. So far, they have been able to upload photos using the React Native image picker to Firebase Storage and in the next sprint, they will focus on retrieving these photos to be displayed on the MyAccount page.
Problems Encountered
The main issue that Aaron encountered was refactoring the ethereum wallet creation process. It took a while to decide at which point the actual ethereum account would be created and written to memory. Originally, we had it created in the main method for the app, which meant that the account would get created when the app was first launched by the user. However, I decided it made more sense to have the account created when the user made their Metallic account. The benefit here would be that the public address could get written to firebase at the same time as the other account data. This way, the address is now available, which is needed for sending payments on the app. Also, rather than passing props to the screens, we have it so that each screen that needs access to the account will pull it from memory as needed.
Brad encountered a few issues while implementing the contacts. The task started off with what seemed like a simple implementation of an array of contacts. However, getting the information to display proved more specific than anticipated. Getting everything to work properly with lists in JavaScript without errors or warning also resulted in research in how maps and keys worked in JavaScript. With multiple iterations of figuring out how he wanted to go about displaying a list it became apparent that tutorials and questions online could only provide so much information. While creating custom solutions are bound to result in a bit of figuring it out yourself Brad felt that he took the task too lightly due to how common something like a contacts/friends list is in apps.
Josh ran into a few problems while working on the payments screen with one being more critical to progression than the rest. This main problem concerns sending a message from one user to another and having that message to appear on the other's screen shortly after being sent to them. Currently Josh hasn't worked through getting this resolved, but he has found out which method isn't the solution while also finding out what the solution will most likely be. This solution will be working with a realtime database in Firebase rather than with firestore. The other problems that were encountered were minor and just the result of some unfamiliarity working with different aspects of communicating with Firebase.
The main problems that Myren ran into during this sprint revolved around getting information from the React Native image picker, such as the chosen image's filename and uri. Without this information, it is impossible to upload the file to Firebase storage. Then once they were able to upload photos successfully, the file type was changed by Firebase and they realized that it is caused by an error that the development team is currently working on fixing. This ended up taking up much of the second half of the sprint's time since they had to use a different system to send information over to Firebase.
Projected Progress
Next sprint, Aaron will be implementing payments between accounts. He will also be making the user experience better along the lines of ethereum accounts. Users need to be prompted to back up their accounts. Ethereum balances can be retrieved using this mnemonic, which is the random seed that was used to initially generate the public and private keys for the account. Users should also be able to restore an account from their mnemonic. Lastly, Aaron will be displaying a QR code for the account on the account details page, which will allow users to deposit eth to their account by scanning this QR code from another ethereum wallet provider.
Brad aims to finish designing the contacts screen along with getting the app to respond more smoothly to changes. This includes things such as detecting whether someone is a friend and changing the text of the button based on the contents in the database. Brad also feels it's time to work on adding more details and features to the database such as implementing account creation time, public keys for users, and user scores. If time allows, or anyone else finds time Brad also hopes to allow users to customize some of their information such as their name and email address and reflect those changes in the database.
Josh will finish completing the workings of the payments screen in the next sprint. Along with this, he will work on wireframing the recent chats screen, displaying all users that the logged in user has had a chat/payment with on that screen, and on selecting one of these users, navigating to the payments screen and populating it with the corresponding message feed and user information.
For the next sprint, Myren is focusing on getting the photo upload feature working on both the android and ios versions of the app. They also want to be able to re-upload those photos and set them as the profile picture shown on my My Account page.
Update of Burndown Chart
Overall the Burndown chart looks much better than previous sprints. The team overall has been more on top of closing issues once they finish their task, and as a result the chart looks well put together. With some issues coming up we didn't finish everything we set out to do this sprint, but the bulk of the tasks were completed. One take away from this sprint is that while dividing up labor is great for progress it can also create a roadblock at times. Two brains are better than one and there have been many time this sprint we worked together to overcome challenges.
Issues Modified / Migrated over for sprint 4:
-
Allow for payments/messages to be sent from one user to another and have both involved user's payment/message feed to update in real time.
-
Contacts Screen Design | clean up the look of the screen and show the contacts profile picture.
Issues Created for Sprint 4:
- prompt the user to add external eth to their account
- prompt the user to back up their account with mnemonic
- add qr code to account detail page
- work with payments page to make and display payments
- restore account from mnemonic
- Wireframe recent chats screen
- Have recent chats screen show all users for which the logged in user has had a chat with
- Navigate from recent chats screen to payments screen and populate message feed with sent/received messages
More will be added as needed.
Teamwork Reflections
Sprint three was a little overwhelming for Aaron at first with the amount of work that he needed to do. At the beginning of this sprint he was very unfamiliar with ethers js. However this sprint, he learned more about ethers js, and used it to create accounts as well as talk with the ethereum blockchain using the built in provider class, which takes an api key for an infura provider. Aaron had to make an infura account for the app as well. He also learned how to get free test ether from a faucet. Aaron did not accomplish sending payments this sprint, but He did lay the necessary ground work and feels confident about next sprint now that he has more experience with ethers js, firebase, and react native.
Brad's confident in his team and finds the group dynamic to work well. Everyone is open to discussion and able to learn new things quickly. Every time we meetup we quickly reflect on how we all are and it keeps us up to date on any current issues and progress. Brad also feels like we have a more well defined idea of what everyone is able to achieve and thinks we'll be able to divide up work a lot more effectively going forward. Overall, Brad sees everyone in the group as reliable team members.
Josh feels that there continues to be good group teamwork and communication. We are helping each other out when one of us runs into a roadblock and it is brought up in our group meetings. The group dynamic has also worked out in a way that we have figured out what each of our strengths are and have taken tasks that best fit each of us in order to produce quality coding/development at a quicker pace.
Myren has continued to enjoy working with this group. Everyone is extremely helpful and it is easy to get in contact with everyone. Our weekly meetings allow us to track the progress we have made throughout the sprints and it makes it easier for us to work together on more difficult tasks.
Conclusion
Many of the main features of the app started coming together this sprint. Mainly, the addition of contacts, searching for users, and account details will allow for most of the functionality that we will need in the final project. We are looking forward to implementing payments and then polishing up the user experience by tailoring the look, feel, and flow of the app.