Hey,
I wanted to add a little context as to why I think this work is:
(A) important for the completion of Z3, AND
(B) different to the work set out in the initial Zaino dev grant."
The extension grant we are proposing centres around 2 goals, both important for a reliable and user friendly Z3.
Zcashd RPC replacement:
We have started this work in the current Zaino dev grant, however the number of RPCs that are required was unknown at that point and our initial research centred around the Zcash RPC services required for wallet (in particular lightwallet) functionality. We are currently working with the ECC to implement the remaining functionality required for Zallet (and other “full node” wallets).
We did set time aside for unplanned functionality in the current grant (3 weeks dev time), but it is now clear that it is not possible to complete all the work necessary to fully support block explorers and exchanges in the allotted time. During planning the engineering teams have suggested that full support of these use cases is top priority, and should not be deferred.
We made the decision that it would make more sense to use the extra time in the current grant to switch Json RPC libraries to have parity with Zebra and Zallet (Reqwest → JsonRpSee) and to add the Json RPC server required to serve these RPCs (originally we had planned to only serve gRPC). Although this leaves the unplanned RPCs for the continuation grant it means we have all the functionality in place to quickly add new RPCs as required.
Updated Zcash PRC spec:
The current Zcash RPC spec is both confusing and non-optimal. The biggest source of confusion is that there are currently 2 RPC specs (the Zcash RPC Interface and the lightwallet CompactTxStreamer), that are on the surface very similar but hold subtle differences that have caused confusion even among experienced wallet devs. This, along with redundant RPCs (eg. get_block
), confusing names (eg. get_taddress_txids
) and even RPCs that can introduce bugs (see conversation relating to get_mempool_stream
in [Issues encountered while integrating Zaino into Zallet · Issue #249 · zingolabs/zaino · GitHub] for one exmple), is a big barrier to entry for anyone wanting to integrate with Zcash.
We want to update this spec to a single set of gRPC services that are easy to understand and are robust in design. We would continue to serve the current zcash RPC specs for an extended deprecation period (~2 years?), and could even keep on maintaining them beyond then if a backward compatibility option is desired.
While updating the current spec we also plan to add several new RPCs that have been discussed (eg. and RPC serving a transparent outpoint to tx
index). This will also tie into work on crosslink, as I believe the current plan is to only use gRPC (the current Zcash RPC spec is only implemented for Json RPC).