Engineering Update (March 9th – March 22nd)

Over the past two weeks we have shipped a new Zebra release, fixed a regtest networking bug that was blocking integration testing, continued steady progress on several long-running protocol features, and picked up new ZIP specification work.

We released Zebra 4.2.0, which included updated mainnet checkpoints and a number of bug fixes. Post-release, we also merged a PR to correct a block subsidy calculation where the Founders’ Reward was not being properly subtracted, which caused Zebra’s getblocksubsidy RPC to diverge from zcashd for older blocks. This fix will be available in the next Zebra release (likely 4.3.0.)

A significant chunk of work this period went into making the regtest stack reliable. We tracked down and fixed a bug to the way Zebra was broadcasting transactions on regtest mode. We are also working on adding a dedicated regtest block relay integration test to prevent regressions, and bumping the z3 stack to Zebra 4.2.0 with Zaino included, to bring the integrated test environment up to date with the latest Zebra version.

We also fixed an issue whereby zebrad was not writing all state to disk on shutdown, ensuring that non-finalized backup will always reflect Zebra’s chain state when shutting down.

On CI, resolved a CI link checker failure caused by GitHub’s rate limits, with a fix to make lychee handle rate-limited responses gracefully. We also patched a git leak where the agent-shell directory was being tracked, and opened a PR to migrate custom lints from .cargo/config.toml to Cargo.toml so that CI actually enforces them.

On the FROST side, we opened a tracking issue to implement COCKTAIL-DKG in the FROST library and filed detailed feedback on the COCKTAIL-DKG specification upstream in the C2SP repository. We also fixed a frostd networking issue to allow binding to non-loopback addresses when TLS is terminated externally, addressing a request from users running frostd behind a reverse proxy.

We have also been collaborating with other Zcash ecosystem engineers to continue to make progress on Zcashd deprecation. On the Zallet side, we are working on implementing z_importkey and z_exportkey for Sapling, along with accompanying integration tests. These are long-requested RPC methods that allow users to import and export Sapling spending keys, and are part of the broader effort to reach parity with zcashd’s wallet RPC surface.

During this period we also contributed to several active ZIPs:

Thanks for reading!

17 Likes

Zebra 4.2.0 shipping with the regtest broadcast fix is solid. The state management catch on shutdown was subtle but important for node operators running monitoring setups. Curious about the block time reduction proposals (75s to 25s) and how that affects sync experience for light wallets.

A change to the block time wouldn’t affect syncing speed. The data fetched for that happens independent of mining and transaction confirmations, which would be affected. Slow sync speeds only really happen to old wallets created before the spam which seriously affected the network usability at the time. Wallets created within the past million blocks or so never need to scan that far back and so any additional slowness would be because of the particular wallet sync algorithm. Zkool and zingo are both exceedingly fast and, assuming the wallets are new-ish, will induce a wait for a few minutes at most to sync up.

1 Like

Nice batch of updates, the regtest fixes sound especially useful. On block time, I don’t think faster blocks will magically fix sync delays, that’s more on the wallet side.