In the previous grant proposal responding to this RFP, we proposed to add a layer to Librustzcash that translates the main Zcash library methods into four different languages, which was possible thanks to Mozilla’s UniFFI library. As a result, the Librustzcash library is now usable in other languages, avoiding the need for double work from these developers. Most of the core functionalities needed to code a small light client or a wallet were exposed.
In this grant proposal, we want to take it three steps further, by:
- moving the UniFFI-supported library closer to the original library,
- creating a small demo of a wallet showcasing how to use this library on Android and iOS
As the Zcash ecosystem grows, so will its technical components, including the Librustzcash codebase. Thus, we should make sure that we keep these upcoming developments in mind and make the Zcash UniFFI library as easy to upgrade and maintain as possible. We want to ease this burden by finding ways to increase the degree of integration between these two libraries, while monitoring future maintenance and preventing hiccups in the normal Librustzcash workflow.
Code demonstrations are often mistaken for purely optional parts of a library’s implementation; many codebases are written down with all kinds of nice tools for static analysis, but more often than not, when developers reach out to use them, they cannot find a way to do so. This is why we would like to include both in the CI and in the examples a demo of the most used functionalities for each major mobile ecosystem, so that a developer may clone it and get up and running quickly on a Zcash-based project.
Most modern blockchain projects utilize Go or Rust as their underlying programming language. Adding Go support the UniFFI library itself would have added value both in itself and for Zcash. The aim of this addition would be to attract developers working on Golang libraries: for instance, from the Cosmos ecosystem, who for some reason would be interested in adding Zcash functionalities, but don’t have easy access to the library. It should be a breeze to include it as a library in an existing Golang project.
We will split the process into three milestones of equal value. Each milestone will be submitted consecutively after completion of the previous one.
To start the integration work, we need to collaborate with the library developers to discuss the best way of conducting a deeper integration of the UniFFI library developers. This may be done parallel to the other two tasks. Some approaches might be
- CI-based: Setup the CI to react by keyword, and implement a soft block on pull requests, i.e. that warns as a standalone on the pre-push checks, warning that a feature was implemented but did not include its FFI version.
- Rust-based: implement some kind of “directive” or “trigger” during compilation that warns when a feature on one side changed and the other did not.
- Manual intervention: the developer has to check whether this breaks the UniFFI part on a case-by-case basis (I suppose doable only when there is a developer having at least half of their time committed to it)
To demonstrate the usage of the library created in our previous endeavour, we will provide sample applications with minimal UI for both Android and iOS platforms, written in Kotlin and Swift, respectively. The demo wallets will have the ability to:
- Show balance at an address
- Build a transaction
- Explore a transaction when inserting the transaction id
- Broadcast a transaction after connecting to a node
- Encode and decode addresses
- Eloy López Peñamaría (Github) is a Cloud Software Engineer with extensive experience in Rust and Go, focusing on observability and resilience, with more than ten years of building backends for cloud environments. He likes to collaborate in blockchain-related projects and distributed high-traffic systems. Always attentive to details and documentation. He is the main member of the team who built the Zcash UniFFI library.
- Tomasz Piotrowski (GitHub, LinkedIn) is a Rust Engineer at Eiger with extensive software development experience. Since joining Eiger he has worked exclusively with Zcashd and Zebra codebases and supported Eiger’s efforts in the Zcash ecosystem.
- Tomasz Piotrowski
- Simon Keliuotis (GitHub) is a Software Engineer at Eiger. Over his eight years as a software engineer, he worked at various start-ups and organisations, developing Android and desktop applications/games, AR and drone control systems, security-oriented tools, and API platforms/backends.
- Luca Campobasso (GitHub, LinkedIn) is a Software Engineer at Eiger. He’s been working on research and development for several projects within the company helping in identifying new research opportunities and taking those ideas to full fledged implementations (e.g. the Zcash UniFFI library). He spends a good amount of his time reading the Zcash protocol, the details of the cryptographic operations and primitives involved, the ZIPs implemented so far and the proposed ones. Additionally, he has experience writing academic research documents.
The promise of web3 is to upgrade the very foundations of our society – from money, finance, and governance to media, gaming, and science. To deliver on that promise, decentralised technologies are to be integrated into the everyday experiences of billions of people. For engineering, this is a mountain of a challenge.
Eiger was founded to develop infrastructure for web3 mass adoption. We help technology companies improve and integrate the core technologies of web3 to meet the climbing demands for scale and performance. We currently employ 30+ senior web3 engineers across the globe and work with some of the most ambitious organisations in the industry, including Forte, Aleo, and XRP Labs, to name a few. Eiger is part of Equilibrium Group, a blockchain powerhouse founded in 2018, composed of three entities:
- Eiger – high-value add engineering services
- Equilibrium – applied research, proprietary products, and investing in early-stage ventures
- Membrane Finance – infrastructure and services for EUROe, a euro-backed stablecoin
- Librustzcash integration - 1 month, 2 engineers (8 FTEs)
- UniFFI demo wallet - 1 month, 2 engineers (8 FTEs)
One FTE is 40 hours. Total FTEs: 16.
The standard rate at Eiger for an engineer is 150 $/hr.
The above quantities result in a total budget ask of
150 $/hour x 40 hours x 16 = $ 96 000