Thoughts on a CompactTxStreamer compatibility gate for lightwalletd and Zaino

Hi everyone,

Wanted to put this idea out here and get input from people who work on wallets, backends, or related infrastructure in Zcash.

The idea is a small tool called Zcash CompactTxStreamer Compatibility Gate.

The job of the tool would be to run a set of black-box checks against CompactTxStreamer-compatible backends like lightwalletd and Zaino and flag behavior drift on a small set of important wallet-facing gRPC methods before those changes reach downstream wallets and tools.

This is not meant to be a broad testing toolkit. It is not a devnet, not a JSON-RPC test suite, and not a performance benchmark. The scope is much narrower than that. The point is to have a small public release-check tool for a part of the stack that already has multiple implementations.

At a high level, the tool would include:

  • a small CLI runner
  • a versioned case set
  • backend profiles for lightwalletd and Zaino
  • JSON and Markdown diff reports
  • a GitHub Action for fast CI checks

For a first version, the method scope we are thinking about is:

  • GetLatestBlock
  • GetBlockRange
  • GetTreeState
  • GetLatestTreeState
  • GetSubtreeRoots
  • GetMempoolTx
  • GetTaddressTransactions
  • deprecated method handling for GetTaddressTxids
  • a few error-path checks like invalid ranges and invalid height or hash requests

The gap this is trying to fill is that there is a shared wallet-facing protocol surface with more than one implementation, but there is no small public compatibility gate for checking whether a defined set of important methods still behaves as expected across implementations after releases or protocol changes.

Would especially appreciate input on three things:

  1. Does this solve a real problem from your perspective?
  2. Is the v1 scope about right, or does it need to be tighter?
  3. Does this feel genuinely useful as a standalone tool, or too close to testing workflows that already exist?

Thanks in advance for any thoughts.

a solid solution to bridge the gap between backend implementations!

This is a fantastic proposal! Subtle behavior drifts between lightwallet and Zaino have always been a major headache for wallet developers. Every time a backend gets updated, it feels like carrying a ‘hidden time bomb,’ so having a tool like this would be a huge relief.

Focusing on the heavy hitters like GetTreeState and GetSubtreeRoots shows that you’ve identified exactly where the most friction occurs in practice. I really appreciate how the scope stays lean and stays focused on the essential gRPC methods - it makes the tool feel very practical and high-impact.

It feels less like just another test suite and more like a Peacekeeper that will help standardize the ecosystem. Setting this up with GitHub Actions to automatically verify compatibility will go a long way in building trust between backend maintainers and wallet developers. Truly a great initiative!

Hi! @oscar-pepper already developed this for rust in a previous grant for Zaino. And we are currently porting these tests to the integration-tests repo.

If you’d like to chime in development please ping me and we could figure something out for you folks to collaborate on. I’m sure @zancas and @nuttycom have good ideas.

You can also pick up ready to work issues from this board as well Projects · wallet · GitHub

1 Like