Implementation Analysis: Coin Control on the Zcoin Rich Client

Feb 17, 2020

As promised in our previous article covering our last contribution to the Zcoin community, we have returned with another Implementation Analysis! This implementation analysis is particularly special, as it’s the first one funded solely by the Zcoin Community Funding Tool, the “ZCS”, a tool that allows for community members to fund projects of interest for the Zcoin Community.

Arcadia recently completed integrating ZCS Proposal #7, “Integrating Coin Control Functionality into the Zcoin Rich Client”

The Zcoin Rich Client, is a more user-friendly implementation of the traditional Zcoin Wallet, with the same security spec.

This was an interesting first project on the Zcoin Rich Client, as there was a learning curve on the side of how ZMQ communications were implemented, specific implementation choices, and functionality on how Sigma mints are treated when they are being spent.

Our UI/UX process began with our team going and reviewing the existing implementation of Coin Control on the reference Wallet, then attempting to replicate that on the Rich Client while adding some easier UI elements for accounting for Znodes among other considerations.

Our development process began with a run-through of how coin control on the primary wallet (QT) worked on a user flow level, and on an operational level. At the same time, we began reviewing the architecture and compilation processes for the coin control functionality.

One of the Initial Mockup Designs that Was Introduced for The Zcoin Rich Client

We ran into some initial issues with compilation and testing but after some extensive communication with the maintainers, we were able to get a good idea on where we were erring.

After our environments were set and we were able to quickly compile and were somewhat familiar with the codebase, we began implementing the expected API calls on the side of the daemon (ZMQ API).

Once that was complete, we began the process of building out the frontend UI for the rich client and hooking it up to the previously created APIs for Coin Control functions for both the Sigma and Normal Transaction Screens.

After the integrations were done, we did some remediation with the Zcoin Team, where they gave us some pointers on how we could modify the handling of Transaction Events to be more efficient and user-friendly for users with a large number of transactions. As well as updating some UI/UX updates for a better experience.

This project was a bit different than what we were used to, but overall it was definitely a success. We’d like to thank Tadhg Riordon for the major assistance in working with the Rich Client codebase of which he and Praxit are the primary maintainers. We’d also like to thank Reuben Yap for the amazing support and coordination.