Releases: ZcashFoundation/zebra
Zebra 1.0.0-beta.2
Zebra's latest beta continues implementing zero-knowledge proof and note commitment tree validation. In this release, we have finished implementing transaction header, transaction amount, and Zebra-specific NU5 validation. (NU5 mainnet validation is waiting on an orchard
crate update, and some consensus parameter updates.)
We also fix a number of security issues that could pose a local denial of service risk, or make it easier for an attacker to make a node follow a false chain.
As of this release, Zebra will automatically download and cache the Sprout and Sapling Groth16 circuit parameters. The cache uses around 1 GB of disk space. These cached parameters are shared across all Zebra and zcashd
instances run by the same user.
Added
Network Upgrade 5
- Validate orchard anchors (#3084)
Groth16 Circuit Parameters
- Automatically download and cache Zcash Sapling and Sprout parameters (#3057, #3085)
- Stop linking the Sapling parameters into the
zebrad
and Zebra test executables (#3057)
Proof & Anchor Verification
- Use prepared verifying key for non-batch Sapling Groth16 verification (#3092)
- Validate sapling anchors⚓ (#3084)
- Add Sprout anchors to
zebra-state
(#3100)
Transaction Amount & Header Validation
- Validate miner transaction fees (#3067, #3093)
- Validate transaction lock times (#3060)
- Validate transaction expiry height (#3082, #3103)
Dashboards
- Add transaction-verification.json Grafana dashboard (#3122)
Fixed
- Shut down channels and tasks on PeerSet Drop (#3078)
- Re-order Zebra startup, so slow services are launched last (#3091)
- Fix slow Zebra startup times, to reduce CI failures (#3104)
- Speed up CI, and split unrelated and conflicting CI jobs (#3077)
Security
Zebra 1.0.0-beta.1
Zebra's latest beta implements a number of consensus rules which will be needed for Zebra to fully validate all of the Zcash network consensus rules, including those which will activate with NU5.
With this release we are also fixing a number of security issues that could pose a DDoS risk or otherwise negatively impact other nodes on the network.
Finally, this release includes an upgrade to the latest version of tokio (1.14.0).
Added
- Check Shielded Input and Output Limits (#3069, #3076)
- Sprout note commitment trees (#3051)
- Check per-block limits on transparent signature operations (#3049)
- Calculate Block Subsidy and Funding Streams (#3017, #3040)
- Check for duplicate crate dependencies in CI (#2986)
- Add unused seed peers to the Address Book (#2974, #3019)
Network Upgrade 5
- Verify Halo2 proofs as part of V5 transaction verification (#2645, #3039)
- ZIP-155: Parse
addrv2
in Zebra (#3008, #3014, #3020, #3021, #3022, #3032) - ZIP 212: validate Sapling and Orchard output of coinbase transactions (#3029)
- Validate Orchard flags in v5 (#3035)
Documentation
- Mempool Documentation (#2978)
Changed
Documentation
Fixed
- Stop downloading unnecessary blocks in Zebra acceptance tests (#3072)
- Implement graceful shutdown for the peer set (#3071)
- Check for panics in the address book updater task (#3064)
- Remove unused connection errors (#3054)
- Fix listener address conflicts in network tests (#3031)
Security
Zebra 1.0.0-beta.0
This is the first beta release of Zebra. Today the mempool work is fully finished and compatible with ZIP-401 and several security issues in the network stack are fixed. In addition to that we improved our documentation specially in the zebrad
crate while we increased our test coverage. Finally, we get started with the task of upgrading Tokio to version 1.
Added
Mempool
- ZIP-401: weighted random mempool eviction (#2889, #2932)
- Reject a mempool transaction if it has internal spend conflicts (#2843)
- Limit transaction size in the mempool (#2917)
Cleanup and performance
- Remove unused mempool errors (#2941)
- Simplify calling add_initial_peers (#2945)
- Disable the new clippy::question_mark lint (#2946)
- Downgrade startup logs to debug to speed up CI (#2938)
- Speed up alternative state and zebrad tests in CI (#2929)
Tests
Security
- Track the number of active inbound and outbound peer connections so we can implement limits (#2912)
- Limit the number of initial peers (#2913)
- Rate-limit initial seed peer connections (#2943)
- Limit the number of inbound peer connections (#2961)
- Rate limit inbound connections (#2928)
- Limit the number of outbound peer connections (#2944)
- Reduce outgoing peers demand (#2969)
Documentation
- Improve main
README
documentation and other book sections (#2967, #2894) - Expand documentation for the mempool::crawler module (#2968)
- Improve mempool documentation (#2942, #2963, #2964, #2965)
- Improve documentation and types in the PeerSet (#2925)
- Update the documentation for value pools (#2919)
- Document why
CheckForVerifiedTransactions
is required for correctness (#2955)
Metrics
- Add user agent metrics (#2957)
Changed
Part of the Tokio version 1 upgrade:
Zebra 1.0.0-alpha.19
Zebra's latest alpha updates dependencies, improves metrics, gossips verified blocks and transactions, and continues the mempool-related implementation.
Added
- Ignore
AlreadyInChain
error in the syncer (#2890) - Give more information to the user in the wrong port init warning (#2853)
- Send looked up UTXOs to the transaction verifier (#2849)
- Return the transaction fee from the transaction verifier (#2876)
- Gossip recently verified block hashes to peers (#2729)
- Compute the serialized transaction size of unmined transactions (#2824)
Mempool
- Add a queue checker task, to make sure mempool transactions propagate (#2888)
- Store the transaction fee in the mempool storage (#2885)
- Add a debug config that enables the mempool (#2862)
- Pass the mempool config to the mempool (#2861)
- Add expired transactions to the mempool rejected list (#2852)
- Send AdvertiseTransactionIds to peers (#2823)
- Add a mempool config section (#2845)
- Add transactions that failed verification to the mempool rejected list (#2821)
- Un-reject mempool transactions if the rejection depends on the current tip
(#2844) - Split storage errors by match type: TXID or WTXID (#2833)
- Remove transactions in newly committed blocks from the mempool (#2827)
Documentation
- Improve the template for release versioning (#2906)
- Improve the documentation for the mempool transaction downloader (#2879)
- Add the documentation for the mempool storage and gossip modules (#2884)
Network Upgrade 5
- Set the minimum testnet network protocol version to NU5 (#2851)
Testing and CI
- Add some additional checks to the acceptance mempool test (#2880)
Metrics
- Refactor and add some new mempool metrics (#2878)
- Improve logging for initial peer connections (#2896)
- Always zero the mempool metrics when the mempool is disabled (#2875)
- Add a basic mempool storage Grafana dashboard (#2866)
- Add zcash.mempool.size.transactions and zcash.mempool.size.bytes metrics
(#2860) - Make some grafana labels shorter for graph readability (#2850)
- Make block metrics more accurate (#2835)
Changed
Mempool
- Avoid broadcasting mempool rejected or expired transactions to peers (#2858)
- Encapsulate some mempool functions with the Mempool type (#2872)
- Remove duplicate IDs in mempool requests and responses (#2887)
- Refactor mempool spend conflict checks to increase performance (#2826)
- Rename mempool storage methods by match type (#2841)
- Remove unused mempool errors (#2831)
Fixed
- Fix synchronization delay issue (#2921)
- Fix test failures by flushing output streams before exiting Zebra (#2911, #2923)
- Increase Zebra's restart acceptance test timeout (#2910)
- Avoid spurious acceptance test failures by decreasing the peer crawler timeout (#2905)
- Cancel pending download tasks when the mempool is disabled (#2886)
- Stop allowing some newly mined transactions into the mempool (#2874)
- Stop panicking when pruning unused queued blocks (#2842)
Security
Zebra v1.0.0-alpha.18
Zebra's latest alpha updates dependencies, consensus parameters, and Orchard for NU5 testnet activation.
It continues our work on the mempool, including some mempool features that are used during network upgrade activation.
Added
Mempool
- Send crawled transaction IDs to the mempool downloader (#2801)
- Cancel mempool download tasks when a network upgrade activates (#2816)
- Send mined transaction IDs to the mempool download/verify task for cancellation (#2786)
- Remove expired transactions from the mempool (#2774)
- Cancel download and verify tasks when the mempool is deactivated (#2764, #2754)
- Reject mempool transactions with conflicting spends (#2765)
- Clear mempool at a network upgrade (#2773, #2785)
Network Upgrade 5
- Update Zebra's advertised network protocol version to the latest NU5 testnet version (#2803)
Testing and CI
- Add tests to ensure mempool is working correctly (#2769, #2770, #2815)
- Create and use a helper MockService type to help with writing tests (#2810, #2748, #2790)
- Update Zebra tests to use the NU5 testnet activation height (#2802)
- Regenerate NU5 test cases with the latest network upgrade parameters (#2802)
Metrics
- Add Zebra metrics and a Grafana dashboard for connected peers and their network protocol versions (#2804, #2811)
Changed
- Stop sending empty network messages to peers (#2791)
- Correctly validate transactions which never expire (#2782)
Network Upgrade 5
- Update
zcash_script
dependency to support V5 transactions (#2825) - Set the NU5 testnet activation network upgrade parameters (#2802)
- Update shared Zcash Rust NU5 dependencies (#2739)
- Update Zebra to use modified APIs in shared Zcash Rust NU5 dependencies (#2739)
Fixed
- Stop panicking when using sync and async methods on the same
ChainTipChange
(#2800) - Fix an incorrect assertion when the block locator is at the tip (#2789)
- Fix a missing NULL pointer check in
zebra_script
's FFI (#2802)
Security
Network Upgrade 5
- Update Zebra's orchard commitment calculations based on the latest orchard circuit (#2807)
Zebra v1.0.0-alpha.17
Zebra's latest alpha continues work on the mempool.
Added
- Monitor changes to the chain tip, decide if synchronization reached tip (#2695,
#2685, #2686, #2715, #2721, #2722) - Only enable the mempool crawler after synchronization reaches the chain tip (#2667)
- Reply to requests for transactions IDs in the mempool (#2720)
- Reply to requests for transactions in the mempool, given their IDs (#2725)
- Download and verify gossiped transactions (#2679, #2727, #2718, #2741)
- Internal additions and improvements to the mempool (#2742, #2747, #2749)
Documentation
- Document consensus rules for version group IDs (#2719)
- Specify Zebra Client will only support Unified Addresses (#2706)
Fixed
- Stop calculating transaction hashes twice in the checkpoint verifier (#2696)
Security
- Replace older duplicate queued checkpoint blocks with the latest block's data (#2697)
Zebra 1.0.0-alpha.16
Zebra's latest alpha finishes most of the state work needed for NU5 testnet activation and starts the mempool work.
Added
Network Upgrade 5
- Finished ZIP-209: Prohibit Negative Shielded Chain Value Pool Balances (#2599, #2649, #2656, #2648, #2644)
- ZIP-221 and ZIP-244: Commitment validation in non-finalized state and checkpoint verifier (#2609, #2633)
- Orchard binding_verification_key support (#2441)
Mempool
- Mempool component, storage and errors (#2615, #2651)
- Create a transaction crawler for the mempool (#2646, #2672)
- Create and use types for unmined transactions and their IDs (#2634, #2666)
- ZIP-239: Implement mempool transaction v5 data structures and network messages (#2618, #2638)
- Return a transaction verifier from
zebra_consensus::init
(#2665) - Provide recent syncer response lengths as a watch channel (#2602)
- Derive Copy and Clone for zebra-consensus errors (#2664)
- ChainTip trait creation and usage (#2677, #2676)
Metrics
- Add a network message to the grafana dashboard (#2673)
Documentation
Fixed
Zebra 1.0.0-alpha.15
Zebra's latest alpha contains the last of the changes to zebra chain state ahead of NU5 testnet activation and before concentrating on mempool work. The remaining NU5 validation will be completed prior to NU5 mainnet activation.
Added
- Reject connections from outdated peers after network upgrade activation (#2519)
Network Upgrade 5
- ZIP-209: Prohibit Negative Shielded Chain Value Pool Balances Partial Implementation (#2546, #2554, #2561, #2569, #2576, #2577, #2578, #2596)
- ZIP-221: FlyClient - Consensus-Layer Changes Partial Implementation (#2531, #2553, #2583)
- ZIP-244: Implementation of authorizing data commitment (auth_digest) (#2547)
- Check remaining transaction value is non-negative (#2566)
Changed
- Cache note commitment tree roots to speed up chain synchronisation (#2584)
- Update state cache version to v9 (#2598)
- Refactor HistoryTree type into NonEmptyHistoryTree and HistoryTree types (#2582)
Testing and CI
- Reduce number of nullifier property test cases (#2574)
- Ensure
regenerate-stateful-test-disks.yml
syncs to the latest network upgrade (#2601) - Increase coverage for generated chains and proptests (#2540, #2567)
- Remove unreliable tests for generated chains (#2548)
- Add test-only methods for modifying orchard shielded data and joinsplits (#2580)
- Generate test chains with valid chain value pools (#2597)
- Increase timeout of cached database creation (#2581)
- Use fixed genesis coinbase data in generated genesis blocks (#2568)
- Generate valid sapling shielded data for property tests (#2579)
- Optimize build to regenerate the test state faster (#2552)
Fixed
- Fix the storage of anchors in the state (#2563)
- Make
zebra-state
compile successfully by itself (#2611)
Documentation
- Fix Transparent Value sign and definition (#2555)
Zebra 1.0.0-alpha.14
Zebra's latest alpha continues our work on NU5, including Orchard and Transaction V5.
Added
- Reject UTXO double spends (#2511)
- Add a ValueBalance type (#2505)
- Implement Sum for Amount (#2500)
- Add an OrderedUtxo type for transparent spend validation (#2502)
- Pass the finalized state to chain contextual validation (#2503)
- Calculate incremental note commitment trees (#2407)
- Reject duplicate Sapling and Orchard nullifiers (#2497)
- Add
proptest-impl
feature tozebra-state
crate to help simplify tests(#2529) - Track anchors and note commitment trees (#2458)
- Validate spends of transparent coinbase outputs (#2525)
- Calculate the remaining value in the transparent transaction value pool (#2486)
Documentation
- Add value pools design to book summary (#2520)
Testing
- Test consensus-critical Amount deserialization (#2487)
- Update to use new GitHub action names in Google Cloud workflows (#2533)
- Add test intialization helper function for tests (#2539)
Changed
- Decrease the number of randomised test cases in zebra-state (#2521, #2513)
- Make nullifier tests consistent with UTXO tests (#2513)
Testing
- Disable Rust beta tests in CI, due to a Rust bug (#2542)
Fixed
Zebra 1.0.0-alpha.13
Zebra's latest alpha continues our work on NU5, including Orchard and Transaction V5. New validation
rules were implemented for transactions, preventing double spends in the Sprout pool, checking
Sapling spends in V5 transactions, and some initial work to validate parts of Orchard transactions.
Added
- Reject duplicate sprout nullifiers in the state (#2477)
- Add methods for getting block nullifiers (#2465)
- Verify orchard spend auth (#2442)
- Parse and ignore MSG_WTX inventory type in network messages (part of ZIP-239) (#2446)
- Add ZIP-244 signature hash support (#2165)
- Add HistoryTree struct (#2396)
- Add ZIP-0244 TxId Digest support (#2129)
- Validate V5 transactions with Sapling shielded data (#2437)
Documentation
Changed
Documentation
- Update state RFC for incremental trees, value pools, and RocksDB (#2456)
- Modify UTXO and state designs for transparent coinbase output checks (#2413)
Fixed
- When a parent block is rejected, also reject its children (#2479)
- Restore the previous non-finalized chain if a block is invalid (#2478)
- Stop ignoring sapling binding signature errors (#2472)
- Always compute sighash with librustzcash (#2469)
- Fix bug in sighash calculation for coinbase transactions (#2459)
- Increase coverage of cached state tests: full block and transaction validation, and non-finalized state validation (#2463)