An ongoing Rust implementation of a Zcash node. 🦓

Overview

Zebra logotype


codecov License

Contents

About

Zebra is the Zcash Foundation's independent, consensus-compatible implementation of a Zcash node, currently under development. It can be used to join the Zcash peer-to-peer network, which helps keeping Zcash working by validating and broadcasting transactions, and maintaining the Zcash blockchain state in a distributed manner. Please join us on Discord if you'd like to find out more or get involved!

Zcash is a cryptocurrency designed to preserve the user's privacy. Like most cryptocurrencies, it works by a collection of software nodes run by members of the Zcash community or any other interested parties. The nodes talk to each other in peer-to-peer fashion in order to maintain the state of the Zcash blockchain. They also communicate with miners who create new blocks. When a Zcash user sends Zcash, their wallet broadcasts transactions to these nodes which will eventually reach miners, and the mined transaction will then go through Zcash nodes until they reach the recipient's wallet which will report the received Zcash to the recipient.

The original Zcash node is named zcashd and is developed by the Electric Coin Company as a fork of the original Bitcoin node. Zebra, on the other hand, is an independent Zcash node implementation developed from scratch. Since they implement the same protocol, zcashd and Zebra nodes can communicate with each other and maintain the Zcash network interoperably.

If you just want to send and receive Zcash then you don't need to use Zebra directly. You can download a Zcash wallet application which will handle that for you. (Eventually, Zebra can be used by wallets to implement their functionality.) You would want to run Zebra if you want to contribute to the Zcash network: the more nodes are run, the more reliable the network will be in terms of speed and resistance to denial of service attacks, for example.

These are some of the advantages or benefits of Zebra:

  • Better performance: since it was implemented from scratch in an async, parallelized way, Zebra is currently faster than zcashd.
  • Better security: since it is developed in a memory-safe language (Rust), Zebra is less likely to be affected by memory-safety and correctness security bugs that could compromise the environment where it is run.
  • Better governance: with a new node deployment, there will be more developers who can implement different features for the Zcash network.
  • Dev accessibility: supports more developers, which gives new developers options for contributing to Zcash protocol development.
  • Runtime safety: with an independent implementation, the detection of consensus bugs can happen quicker, reducing the risk of consensus splits.
  • Spec safety: with several node implementations, it is much easier to notice bugs and ambiguity in protocol specification.
  • User options: different nodes present different features and tradeoffs for users to decide on their preferred options.
  • Additional contexts: wider target deployments for people to use a consensus node in more contexts e.g. mobile, wasm, etc.

Beta Releases

Every few weeks, we release a new Zebra beta release.

Zebra's network stack is interoperable with zcashd, and Zebra implements all the features required to reach Zcash network consensus.

The goals of the beta release series are for Zebra to act as a fully validating Zcash node, for all active consensus rules as of NU5 activation.

Currently, Zebra does not validate the following Zcash consensus rules:

Sprout

  • Validation of Sprout anchors (root of the Sprout note commitment tree)

Other

  • Undocumented rules derived from Bitcoin
  • Undocumented network protocol requirements

Getting Started

Building zebrad requires Rust, libclang, and a C++ compiler.

Build and Run Instructions

zebrad is still under development, so there is no supported packaging or install mechanism. To run zebrad, follow the instructions to compile zebrad for your platform:

  1. Install cargo and rustc.
  2. Install Zebra's build dependencies:
    • libclang: the libclang, libclang-dev, llvm, or llvm-dev packages, depending on your package manager
    • clang or another C++ compiler: g++, Xcode, or MSVC
  3. Run cargo install --locked --git https://github.com/ZcashFoundation/zebra --tag v1.0.0-beta.3 zebrad
  4. Run zebrad start (see Running Zebra for more information)

If you're interested in testing out zebrad please feel free, but keep in mind that there is a lot of key functionality still missing.

For more detailed instructions, refer to the documentation.

System Requirements

The recommended requirements for compiling and running zebrad are:

  • 4+ CPU cores
  • 16+ GB RAM
  • 50GB+ available disk space for finalized state
  • 100+ Mbps network connections

We continuously test that our builds and tests pass on:

The latest GitHub Runners for:

  • Windows Server
  • macOS
  • Ubuntu

Docker:

  • Debian Buster

Zebra's tests can take over an hour, depending on your machine. We're working on making them faster.

zebrad might build and run fine on smaller and slower systems - we haven't tested its exact limits yet.

For more detailed requirements, refer to the documentation.

Memory Troubleshooting

If Zebra's build runs out of RAM, try setting: export CARGO_BUILD_JOBS=2

If Zebra's tests timeout or run out of RAM, try running: cargo test -- --test-threads=2

(cargo uses all the processor cores on your machine by default.)

macOS Test Troubleshooting

Some of Zebra's tests deliberately cause errors that make Zebra panic. macOS records these panics as crash reports.

If you are seeing "Crash Reporter" dialogs during Zebra tests, you can disable them using this Terminal.app command:

defaults write com.apple.CrashReporter DialogType none

Network Ports and Data Usage

By default, Zebra uses the following inbound TCP listener ports:

  • 8233 on Mainnet
  • 18233 on Testnet

zebrad's typical network usage is:

  • Initial sync: 30 GB download
  • Ongoing updates: 10-50 MB upload and download per day, depending on peer requests

For more detailed information, refer to the documentation.

Network Troubleshooting

Some of Zebra's tests download Zcash blocks, so they might be unreliable depending on your network connection. You can set ZEBRA_SKIP_NETWORK_TESTS=1 to skip the network tests.

Zebra may be unreliable on Testnet, and under less-than-perfect network conditions. See our roadmap for details.

Known Issues

There are a few bugs in Zebra that we're still working on fixing:

Zebra's state commits changes using database transactions. If you forcibly terminate it, or it panics, any incomplete changes will be rolled back the next time it starts.

Future Work

In 2021, we intend to finish NU5 validation, start adding RPC support and start adding wallet integrations. This phased approach allows us to test Zebra's independent implementation of the consensus rules, before asking users to entrust it with their funds.

Features:

  • Full consensus rule validation
  • Wallet functionality
  • RPC functionality

Performance and Reliability:

  • Reliable syncing on Testnet
  • Reliable syncing under poor network conditions
  • Batch verification
  • Performance tuning

Currently, the following features are out of scope:

  • Mining support
  • Optional Zcash network protocol messages
  • Consensus rules removed before Canopy activation (Zebra checkpoints on Canopy activation)

Documentation

The Zebra website contains user documentation, such as how to run or configure Zebra, set up metrics integrations, etc., as well as developer documentation, such as design documents. We also render API documentation for the external API of our crates, as well as internal documentation for private APIs.

Security

Zebra has a responsible disclosure policy, which we encourage security researchers to follow.

License

Zebra is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT.

Comments
  • change(state): Write non-finalized blocks to the state in a separate thread, to avoid network and RPC hangs

    change(state): Write non-finalized blocks to the state in a separate thread, to avoid network and RPC hangs

    Motivation

    This PR sends queued non-finalized blocks down a channel to the writer task, which makes state block writes concurrent

    Part of https://github.com/ZcashFoundation/zebra/issues/4937.

    Designs

    Solution

    Use block write task to:

    • Commit non-finalized blocks.
    • Propagate errors from queued parent blocks to queued children and skip validate_and_commit calls.
    • Finalize blocks on best chain past MAX_REORG_HEIGHT.

    Related cleanups:

    • Removes unused chain_tip_sender and non_finalized_state_sender fields of StateService.

    Review

    This PR is part of regular scheduled work.

    Reviewer Checklist

    • [x] Will the PR name make sense to users?
      • [ ] Does it need extra CHANGELOG info? (new features, breaking changes, large changes)
    • [x] Are the PR labels correct?
    • [ ] Does the code do what the ticket and PR says?
    • [ ] How do you know it works? Does it have tests?

    Follow Up Work

    • Avoid removing and re-adding known_utxos by nesting the SentHashes and QueuedBlocks inside another struct that holds that tracks the known_utxos
    • Avoid now-redundant checks against the chains in the Request::AwaitUtxo call by skipping to db.utxo(&outpoint).map(|utxo| utxo.utxo) instead of routing it to the ReadRequest after checking the queue and sent hashes on StateService.
    • Organize block write task into an object.
    C-bug C-enhancement P-High :fire: I-slow A-state 
    opened by arya2 42
  • fix(test): Wait for zebrad and lightwalletd to reach the tip in tests, to improve test coverage

    fix(test): Wait for zebrad and lightwalletd to reach the tip in tests, to improve test coverage

    Motivation

    We need to make sure lightwalletd and zebrad is at the tip for several tests. Fix https://github.com/ZcashFoundation/zebra/issues/4894 if merged.

    Depends-On: #5307

    Solution

    Add a new function and move common code to check if we are at the tip. Call it from tests. We are calling this function from all tests that call lightwalletd_integration_test and from wallet_grpc_test and send_transaction_test.

    Also, the lightwalletd_test_suite now runs wallet_grpc_test before send_transaction_test so we know cache is up to date when running the tests using the suite.

    Functional changes:

    • use the same code to configure, launch, and wait for zebrad and lightwalletd across all 8 RPC integration tests, this makes all these tests check a bunch of things the same way
    • run the quick tests first in the test suite, then the slow tests

    Refactors:

    • make some test functions easier to call

    Review

    This PR is ready for review.

    Reviewer Checklist

    • [ ] Will the PR name make sense to users?
      • [ ] Does it need extra CHANGELOG info? (new features, breaking changes, large changes)
    • [ ] Are the PR labels correct?
    • [ ] Does the code do what the ticket and PR says?
    • [ ] How do you know it works? Does it have tests?
      • [ ] Do the existing tests run, or are we accidentally skipping them? Check the test time and test logs.
    C-bug A-rust C-enhancement P-Medium :zap: C-testing A-rpc 
    opened by oxarbitrage 28
  • feat(state): Send treestate from non-finalized state to finalized state

    feat(state): Send treestate from non-finalized state to finalized state

    Motivation

    When Zebra commits a finalized block, it re-calculates all the note commitment and history trees. This uses a lot of extra CPU. Zebra also fetches these structures from the database for each block coming from the non-finalized state.

    The non-finalized state computes the treestate for each block, and it also stores it in RAM. It could pass the treestate over to the finalized state.

    Solution

    I created a new structure FinalizedWithTrees that wraps the treestate and the finalized block. I did that because the original FinalizedBlock is Eq, but HistoryTree can't be Eq.

    This PR makes Zebra faster because:

    1. The finalized state doesn't retrieve the treestate from the disk if the non-finalized state supplies it.

    2. The finalized state doesn't recompute the treestate if the non-finalized state supplies it.

    Close #4824.

    C-enhancement P-Low :snowflake: I-slow A-state 
    opened by teor2345 27
  • Tracking: sync correctness

    Tracking: sync correctness

    Tracking issue for issues around sync correctness, getting confused downloading blocks, etc.

    First Alpha

    Hangs and Panics:

    • [x] Fix network panic (#1183)
    • [x] Fix state panic (#1182)
    • [x] Diagnose and fix mainnet sync hangs (#1181)
    • [x] Stop deadlocks between the sync service and checkpoint verifier by adding a timeout on block tasks
    • [x] Stop hangs in ObtainTips and ExtendTips by adding a timeout to tip requests

    Logging:

    • [x] Fix or hide Failed to write to hedge histogram: ValueOutOfRangeResizeDisabled logs (issue: tower-rs/tower#475, fix: tower-rs/tower#484)

    Performance:

    • Reduce Zebra's memory usage
      • [x] tuning RocksDB (#1486)
      • [x] limiting queue lengths (#1389)

    Duplicate Downloads:

    • [x] Fix Duplicate/AlreadyVerified errors in the checkpoint verifier (#1259)
      • [x] Reduce the AlreadyVerified log level to trace
    • [x] Cancel download and verify tasks if the sync service has dropped the channel (#1037)
    • [x] Deduplicate download and verify tasks, by using a separate service to handle those tasks to completion - #1041, see also https://github.com/ZcashFoundation/zebra/pull/980#issuecomment-689279394
    • [x] Make tip deduplication order-independent

    Cleanup:

    • [x] Remove redundant ObtainTips retry #1033
    • [x] Remove the out of order block debug logs
      • Depends on out of order block handling in the state (#1011) and inbound network service (#889, inv messages)
      • For details, see https://github.com/ZcashFoundation/zebra/pull/1012#discussion_r485169112

    Reduce Sync Restarts:

    • [x] Hedge slow downloads by starting a duplicate request after a delay #1089
    • [x] Skip the final hash in each set of BlockHashes, due to a zebrad bug
    • [x] Increase default EWMA RTT time, so peers have to prove they are fast (this makes a huge difference) #993
    • [x] Ignore errors for blocks which are already in the state
    • [x] Tweak and document sync timeouts #993

    Work out if we need to remove duplicate downloads using:

    • [x] the list of hashes from earlier queries in the current ObtainTips or ExtendTips (download_set) [Yes, as done in the current code]
    • [x] the list of hashes that are being downloaded and verified in spawned futures [No, because we deduplicate in each extension and we check that each extension is an extension]
    • [x] the list of hashes that have failed download or verify recently [No, because failures cause us to restart with clean sync state]
    • [x] the hashes of verified blocks in the state [Only in obtain_tips, as done in the current code].

    Design Questions:

    • [x] Work out how to get each new block as it is mined, when we have synced to the tip
      • In a79ce97 and #887, we skip responses that only extend by 1 block:
        • ObtainTips: https://github.com/ZcashFoundation/zebra/blob/main/zebrad/src/commands/start/sync.rs#L219
        • ExtendTips: https://github.com/ZcashFoundation/zebra/blob/main/zebrad/src/commands/start/sync.rs#L296
      • See #889, where we get new blocks through the gossip protocol.
    • [x] Decide if the BLOCK_TIMEOUT is too low for slow or high-latency networks
      • [x] Work out if we can run Zebra over Tor [No, it's bad for Tor, and slow for Zebra]

    Database:

    • [x] Implement the sled tree changes in the design RFC #902, section Notes on Sled Trees

    Future Releases

    Documentation:

    • [x] Document minimum network requirements for Zebra
      • [x] a minimum bandwidth of 10 Mbps
      • [ ] a maximum latency of 1 second
      • [x] we don't support running Zebra over Tor
    • [ ] Document the peerset target size config, as a useful option for bandwidth-constrained nodes
      • [ ] test the minimum supported peerset target size, and add it to the docs (it's probably 4-12)
    • [x] Check Zebra's memory usage during sync, and document the minimum requirement
    • [ ] Update the sync RFC to document the new sync algorithm #899
      • See previous changes in a79ce97 and #887

    Performance improvements:

    • [ ] Work out how to improve genesis and post-restart sync latency, particularly on Testnet
    • [x] Deploy extra zcashd instances on Testnet (#1222)

    Possible Future Work:

    • [ ] Consider disconnecting from peers that return bad responses

    • [ ] Consider disconnecting from peers that are sending blocks that we no longer want

    • [ ] Churn peers, using a regular timer to disconnect a random peer

    • [ ] Analyse the bandwidth and latency of current Zcash mainnet and testnet peers

    • [ ] Create a peer reputation service

    • [ ] Refactor out the core sync algorithms, and write unit tests for them #730

    C-tracking-issue 
    opened by hdevalence 26
  • Block Subsidy and Founders Reward Amounts

    Block Subsidy and Founders Reward Amounts

    This PR calculates:

    • block subsidy amounts
    • founders reward amounts

    And checks:

    • founders reward amounts

    We can't check the block subsidy yet, because we don't calculate miner fees in this PR.

    Part of https://github.com/ZcashFoundation/zebra/issues/338

    opened by oxarbitrage 25
  • Flesh out 'start' command to actually start syncing.

    Flesh out 'start' command to actually start syncing.

    • [x] Start a sync component / service that is in charge of managing peer requests for blocks and firing validation / management. - #140
    • [x] When a storage interface actually exists, send internal requests to save down blocks to the block cache and derived data to the state storage. - #136, #414
    C-design 
    opened by dconnolly 25
  • change(state): Write finalized blocks to the state in a separate thread, to avoid network and RPC hangs

    change(state): Write finalized blocks to the state in a separate thread, to avoid network and RPC hangs

    Motivation

    This PR starts moving state block write requests into their own task. When it is finished, it will make state block writes fully concurrent.

    Part of #4937. Closes #5125.

    Designs

    See #4937 and https://docs.google.com/drawings/d/1FXpAUlenDAjl8nkftrypdAPsj0jr-Ut9gZlSP57nuyc/edit

    Solution

    Add a block write task:

    • Commit finalized blocks to the state in a separate task
    • Add last_block_hash_sent to the state service, to avoid database accesses when draining the queue
    • Add task handles to check for task exits and panics

    Add block write channels:

    • Finalized state
    • Non-finalized state (not used in this PR)
    • Close the finalized block channel when we're finished with it
    • Remove a redundant block_in_place()

    Deal with errors & shutdowns:

    • Update last_block_hash_sent regardless of commit errors
    • Check for panics in the block write task
    • Close state channels and tasks on drop
    • Drop channels and check for closed channels in the block commit task
    • Work around a RocksDB shutdown bug in the tests, by removing previous code that cancelled RocksDB background work on shutdown
    • Drop any leftover queued blocks when finished with the finalized state, and return an error on their channels
    • Return an error on the channels of replaced duplicate blocks

    Related fixes:

    • Wait for the block commit task in tests, and check for errors
    • Wait for chain tip updates in the RPC tests
    • Improve RPC error logging
    • When running a proptest that sleeps a lot, only run it once
    • Explain finalized block duplicate handling and consensus rules

    Related cleanups:

    • Remove some duplicate fields across StateService and ReadStateService
    • Rename a field to StateService.max_queued_finalized_height

    Testing

    We should run a full sync on this before we merge, and make sure it is not significantly slower than the main branch.

    Review

    This PR is part of regular scheduled work.

    Reviewer Checklist

    • [ ] Code implements Specs and Designs
    • [ ] Tests for Expected Behaviour
    • [ ] Tests for Errors

    Follow Up Work

    Handle non-finalized blocks. Handle task exits and panics correctly. Testing.

    C-bug C-enhancement P-Medium :zap: I-slow A-state 
    opened by teor2345 24
  • Add hints to port conflict and lock file panics

    Add hints to port conflict and lock file panics

    Motivation

    The port conflict and the lock file messages are hard to understand. We want to add a hint so the user can rerun with a fixed configuration.

    Solution

    We add 2 panics in this PR with custom messages. We filter the issue url as we don't want users to report this as it is expected to happen if they have another instance of zebrad running in the same machine.

    There are 3 different ports that can conflict, and the lock file can conflict:

    • [x] metrics listener (#1484)
    • [x] tracing listener (#1484)
    • [x] Zcash network protocol listener (#1509)
    • [x] RocksDB LOCK file (#1508)

    We need to cover all 4 cases in this PR.

    The code in this pull request has:

    • [x] Documentation Comments
    • [x] Unit Tests and Property Tests

    Review

    Maybe @yaahc and/or @teor2345 . Not urgent.

    Related Issues

    Close https://github.com/ZcashFoundation/zebra/issues/1484, close https://github.com/ZcashFoundation/zebra/issues/1508, close https://github.com/ZcashFoundation/zebra/issues/1632, close https://github.com/ZcashFoundation/zebra/issues/1509 if merged.

    Follow-Up Tasks

    Make initial peers DNS resolution async #1613 Make listener DNS resolution non-blocking #1631 Interrupt handler does not work when a blocking task is running #1351 Windows state path message #1654

    C-bug A-dependencies A-rust C-enhancement C-cleanup P-Low :snowflake: 
    opened by oxarbitrage 23
  • Create and parse checkpoint height/hash lists

    Create and parse checkpoint height/hash lists

    For the checkpoint verifier, we need to create checkpoint height and hash lists for:

    • [x] main net, and
    • [x] test net, and
    • [x] parse those lists into Zebra data structures.

    Since the sapling checkpoint is mandatory, we want to compile the lists into Zebra.

    Eventually, we also want to:

    • [ ] re-implement the list generation bash scripts in Rust (opened #684)
    • [ ] support generating incremental updates to the checkpoint lists, given the final checkpoint height (opened #685)

    Open questions:

    • [x] Is 256 MB spacing too high? Do we need to impose a maximum number of blocks as well?
      • We decided on a maximum 2000 block spacing
    • [ ] Should we remove any checkpoints after Heartwood activation?

    The block spacing range for 256 MB checkpoints is:

    • Mainnet: 400 - 50,000
    • Testnet: 10,000 - 250,000

    Heartwood activated at:

    • Mainnet: 903000 (16 July 2020)
    • Testnet: 903800 (4 May 2020)

    Our initial draft list of checkpoints was created before Heartwood on mainnet, but after Heartwood on testnet. The testnet checkpoints include a post-Heartwood block.

    opened by teor2345 23
  • NU5 Tracking: The Spec

    NU5 Tracking: The Spec

    This epic will track the tasks that need to happen somewhere in code in order to implement Zcash Orchard and the other NU5 ZIPs in Zebra, as defined by the Zcash Specification.

    This may include pieces of code contributed to the https://github.com/zcash/orchard crate or https://github.com/zcash/halo2 crate, by the zebrad team or the zcashd or whomever, but they need to happen by someone.

    This tracking issue contains segments for the whole spec that includes Orchard changes for now. A checkbox means that that part of the specification describes something to implement.

    A checked box or strikethrough means that we:

    • have implemented that item
    • are tracking that item in another Epic, or
    • have otherwise resolved that item.

    Our mandatory Canopy checkpoint significantly reduces the number of features that we have to implement.

    Leaf nodes are marked by – and correspond to implementable items. They should be followed by issue references that track the status of that issue, or a short explanation. Some pieces of the spec that pertain to sending or receiving money or blockchain scanning are noted here, but not linked to issues, as we are not doing that work for Zebra for NU5 activation.

    Also remember that consensus ZIPs are part of the spec

    Epic 
    opened by dconnolly 22
  • Stop using the default ports in the zebrad acceptance tests

    Stop using the default ports in the zebrad acceptance tests

    When I run the zebrad command acceptance tests, they use the default zebrad ports.

    If we use the default ports, the tests could fail if there is a running zebrad instance. (Or they could make it impossible to launch another zebrad instance.)

    TODO:

    • [ ] create a config that overrides the default Zcash protocol listener port in zebrad
    • [ ] pass "0" for the Zcash protocol listener port, so that zebrad chooses any available port
    • [ ] run all the tests at the same time, to make sure there aren't any port or file conflicts

    Diagnostics and Dependencies:

    • [x] check that any optional ports are disabled by default (#660)
      • If we run all the tests at the same time, they will test that these ports are disabled
    • [x] print the listener ports on startup (#867)
      • [x] if we can't get the listener ports easily, we should just print the configured port

    Currently, Zebra's Zcash protocol listener is enabled by default, and all the other listeners are off by default.

    Edit: we don't use env vars any more Edit: #660 made the tracing and metrics listeners optional and disabled by default

    C-bug A-rust E-help-wanted E-needs-test 
    opened by teor2345 22
  • build(deps): bump shimataro/ssh-key-action from 2.4.0 to 2.5.0

    build(deps): bump shimataro/ssh-key-action from 2.4.0 to 2.5.0

    Bumps shimataro/ssh-key-action from 2.4.0 to 2.5.0.

    Release notes

    Sourced from shimataro/ssh-key-action's releases.

    ssh-key-action 2.5.0 released

    Happy Holidays! :tada: Here is a present from me! :gift:

    Added

    • remove SSH directory at the end of workflow #199
    Changelog

    Sourced from shimataro/ssh-key-action's changelog.

    [2.5.0] - 2022-12-24

    Added

    • remove SSH directory at the end of workflow
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    A-dependencies A-infrastructure P-Low :snowflake: C-trivial 
    opened by dependabot[bot] 0
  • build(deps): bump tj-actions/changed-files from 35.1.0 to 35.1.1

    build(deps): bump tj-actions/changed-files from 35.1.0 to 35.1.1

    Bumps tj-actions/changed-files from 35.1.0 to 35.1.1.

    Release notes

    Sourced from tj-actions/changed-files's releases.

    v35.1.1

    What's Changed

    Full Changelog: https://github.com/tj-actions/changed-files/compare/v35...v35.1.1

    Changelog

    Sourced from tj-actions/changed-files's changelog.

    Changelog

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    A-dependencies A-infrastructure C-enhancement P-Low :snowflake: C-trivial 
    opened by dependabot[bot] 0
  • feat(zebra-checkpoint): make `zebra-checkpoint` work for zebrad backend

    feat(zebra-checkpoint): make `zebra-checkpoint` work for zebrad backend

    Motivation

    Zebra has an utility tool to create checkpoints. Until now this tool only work if zcashd is used as the backend.

    This PR make the changes to make it work with zebrad as the backend while zcashd is still supported.

    Close https://github.com/ZcashFoundation/zebra/issues/5852

    Solution

    When i started on this i was only expecting to make changes to the zebra-checkpoints binary, however i realized later we were going to need changes in the getblock rpc method.

    The binary is expecting height, hash and size fields of a getblock call with verbosity = 1. Currently (and because ligthwalletd only make use of the tx field of the object response), we are not returning any additional data.

    this PR updated the getblock rpc method to return the additional data needed to make the tool work.

    Also, in the zebra-checkpoints we changed the use of getblockcount to the blocks field of getblockchaininfo call as suggested in the proposed changes section of the ticket.

    Review

    This is optional and low priority. It can wait until people get back. Anyone can review.

    Reviewer Checklist

    • [ ] Will the PR name make sense to users?
      • [ ] Does it need extra CHANGELOG info? (new features, breaking changes, large changes)
    • [ ] Are the PR labels correct?
    • [ ] Does the code do what the ticket and PR says?
      • [ ] Does it change concurrent code, unsafe code, or consensus rules?
    • [ ] How do you know it works? Does it have tests?

    Follow Up Work

    • [x] Update some docs mentioning this in zebra book or checkpoint README ?
    • [x] Do manual tests of differences between zcashd and zebrad generated checkpoints.
    • [x] Compare the speed of using zebrad against zcashd as the backend.
    P-Low :snowflake: A-rpc C-feature no-review-reminders 
    opened by oxarbitrage 2
  • change(docs): Update 'Design Overview' page of Zebra book.

    change(docs): Update 'Design Overview' page of Zebra book.

    Motivation

    We want to update the design overview page with some notable blog posts and a graph of service dependencies to help new developers understand zebrad faster.

    Related to #2740, unclear if this is enough to close the issue yet.

    Solution

    • Add links to notable blog posts
    • Add a simplified graph of service dependencies

    Related changes:

    • Correction of issue/PR references in Pipelineable Block Lookup RFC
    • Remove some out-of-date text

    Review

    Anyone can review.

    Reviewer Checklist

    • [ ] Will the PR name make sense to users?
      • [ ] Does it need extra CHANGELOG info? (new features, breaking changes, large changes)
    • [ ] Are the PR labels correct?
    • [ ] Does the code do what the ticket and PR says?
      • [ ] Does it change concurrent code, unsafe code, or consensus rules?
    • [ ] How do you know it works? Does it have tests?
    A-docs C-enhancement P-Low :snowflake: no-review-reminders 
    opened by arya2 1
  • Detect mempool changes for getblocktemplate long polling with a channel

    Detect mempool changes for getblocktemplate long polling with a channel

    Motivation

    We could help miners collect higher fees, shorten the wait-time for transactions to be mined, and make Zebra more efficient by returning from long polling immediately when the mempool changes.

    Designs

    • Pass the mempool_transaction_receiver from the start method here to RPCServer::spawn and add it as a field on GetBlockTemplateRpcImpl (All mempool changes are currently observed by either mempool_transaction_receiver or latest_chain_tip)
    • When getblocktemplate is called with a long_poll_id:
      • Call mempool_transaction_receiver.borrow_and_update()
      • Fetch mempool transactions to get the current long_poll_id and return immediately if it's different from the client's long_poll_id
      • Wait for mempool_transaction_receiver.changed(), latest_chain_tip.changed(), or wait_for_max_time
    A-rust C-enhancement S-needs-triage P-Optional :sparkles: A-rpc A-concurrency 
    opened by arya2 0
  • change(test): Call getblocktemplate in proposal mode from acceptance test

    change(test): Call getblocktemplate in proposal mode from acceptance test

    Motivation

    We want to use getblocktemplate in proposal mode in the acceptance test to check that it's producing valid templates.

    Depends on https://github.com/ZcashFoundation/zebra/pull/5870.

    Closes #5685, supersedes #5803.

    Solution

    • Add proposal_block_from_template fn for making a block proposal from GetBlockTemplate data
    • Call getblocktemplate in proposal mode with the hex-encoded block proposal data

    Review

    Anyone can review.

    Reviewer Checklist

    • [ ] Will the PR name make sense to users?
      • [ ] Does it need extra CHANGELOG info? (new features, breaking changes, large changes)
    • [ ] Are the PR labels correct?
    • [ ] Does the code do what the ticket and PR says?
      • [ ] Does it change concurrent code, unsafe code, or consensus rules?
    • [ ] How do you know it works? Does it have tests?
    C-enhancement P-Low :snowflake: C-testing A-rpc no-review-reminders 
    opened by arya2 1
Releases(v1.0.0-rc.2)
  • v1.0.0-rc.2(Dec 6, 2022)

    Zebra's latest release continues work on mining pool RPCs, fixes a rare RPC crash that could lead to memory corruption, and uses the ZIP-317 conventional fee for mempool size limits.

    Zebra's consensus rules, node sync, and lightwalletd RPCs are ready for user testing and experimental use. Zebra has not been audited yet.

    Breaking Changes

    This release has the following breaking changes:

    • Evict transactions from the mempool using the ZIP-317 conventional fee (#5703)
      • If there are a lot of unmined transactions on the Zcash network, and Zebra's mempool becomes full, Zebra will penalise transactions that don't pay at least the ZIP-317 conventional fee. These transactions will be more likely to get evicted.
      • The ZIP-317 convention fee increases based on the number of logical transparent or shielded actions in a transaction.
      • This change has no impact under normal network conditions.

    Security

    • Fix a rare crash and memory errors when Zebra's RPC server shuts down (#5591)
    • Evict transactions from the mempool using the ZIP-317 conventional fee (#5703)

    Added

    • Add submitblock RPC method (#5526)
    • Add a mining section with miner address to config (#5491)

    Changed

    • Select getblocktemplate RPC transactions according to ZIP-317 (#5724)
    • Add transaction fields to the getblocktemplate RPC (#5496 and #5508)
    • Populate some getblocktemplate RPC block header fields using the state best chain tip (#5659)
    • Return an error from getblocktemplate method if Zebra is not synced to network tip (#5623)
    • Implement coinbase conversion to RPC TransactionTemplate type (#5554)
    • Check block and transaction Sprout anchors in parallel (#5742)
    • Contextually validates mempool transactions in best chain (#5716 and #5616)
    • Generate coinbase transactions in the getblocktemplate RPC (#5580)
    • Log loaded config path when Zebra starts up (#5733)
    • Update mainnet and testnet checkpoints on 2022-12-01 (#5754)
    • Bump zcash_proofs from 0.8.0 to 0.9.0 and zcash_primitives from 0.8.1 to 0.9.0 (#5631)

    Fixed

    • Check network and P2SH addresses for mining config and funding streams(#5620)
    • Return an error instead of panicking in the batch verifier on shutdown (#5530)
    • Use a more reliable release template branch name and docker command (#5519)
    • Make the syncer ignore some new block verification errors (#5537)
    • Pause new downloads when Zebra reaches the lookahead limit (#5561)
    • Shut down the RPC server properly when Zebra shuts down (#5591)
    • Print usage info for --help flag (#5634)
    • Fix RPC bugs (#5761)
    • Clarify inbound and outbound port requirements (#5584)

    Contributors

    Thank you to everyone who contributed to this release, we couldn't make Zebra without you: @arya2, @oxarbitrage, @teor2345, and @mpguerra

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-rc.1(Nov 1, 2022)

    This is the second Zebra release candidate. Zebra's consensus rules, node sync, and lightwalletd RPCs are ready for user testing and experimental use. Zebra has not been audited yet.

    This release starts work on mining pool RPCs, including some mempool fixes. It also restores support for Rust 1.64.

    Breaking Changes

    This release has the following breaking changes:

    • Remove unused buggy cryptographic code from zebra-chain (#5464). This code was never used in production, and it had known bugs. Anyone using it should migrate to librustzcash instead.

    Added

    • Introduce getblocktemplate-rpcs feature (#5357)
      • Add getblockcount rpc method (#5357)
      • Add getblockhash rpc method (#4967)
      • Add getblocktemplate rpc call with stub fields (#5462)
    • Add block commit task metrics (#5327)
    • Document how we tag and release Zebra (#5392)
    • Document how to use Zebra with Docker (#5504)

    Changed

    • Update mainnet and testnet checkpoints (#5512)

    Fixed

    • Reject mempool transactions with spent outpoints or nullifiers (#5434)
    • Allow extra lookahead blocks in the verifier, state, and block commit task queues. This reduces the number of downloaded blocks that are dropped due to the lookahead limit. (#5465)

    Contributors

    Thank you to everyone who contributed to this release, we couldn't make Zebra without you: @arya2, @gustavovalverde, @oxarbitrage, @teor2345 and @upbqdn

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-rc.0(Oct 12, 2022)

    This is the first Zebra release candidate. Zebra's consensus rules, node sync, and lightwalletd RPCs are ready for user testing and experimental use. Zebra has not been audited yet.

    This release also makes significant performance improvements to RPCs, and temporarily removes support for Rust 1.64.

    Breaking Changes

    This release has the following breaking changes:

    • Rust 1.64 is unsupported due to a performance regression when downloading the Zcash parameters. Zebra currently builds with Rust 1.63 (#5251).
    • Use correct TOML syntax in Docker zebrad.toml (#5320)

    Major RPC Performance Improvements

    This release improves RPC performance:

    • Initial lightwalletd sync is about twice as fast (#5307)
    • RPCs can run while a block is being committed to the state, previously they could be delayed by 5-15 seconds (#5134, #5257)

    Security

    • Make default command work in docker images, disable optional listener ports (#5313)
    • Update yanked versions of cpufeatures (orchard/aes), ed25519 (tor), and quick-xml (flamegraph) (#5308)
    • Bump rand_core from 0.6.3 to 0.6.4, fixes unsoundness bug (#5175)

    Changed

    • Log git metadata and platform info when zebrad starts up (#5200)
    • Update mainnet and testnet checkpoints (#5360)
    • Update README for the release candidate (#5314)
    • change(docs): Add links to CI/CD docs in the zebra book's sidebar (#5355)

    Fixed

    • Use correct TOML syntax in Docker zebrad.toml (#5320)
    • Look back up to 10,000 blocks on testnet for a legacy chain (#5133)

    Performance

    • Build zebrad with Rust 1.63 to avoid Zcash parameter download hangs (#5251)
    • Write blocks to the state in a separate thread, to avoid network and RPC hangs (#5134, #5257)
    • Fix slow getblock RPC (verbose=1) using transaction ID index (#5307)
    • Open the database in a blocking tokio thread, which allows tokio to run other tasks (#5228)

    Contributors

    Thank you to everyone who contributed to this release, we couldn't make Zebra without you: @arya2, @gustavovalverde, @oxarbitrage, @teor2345 and @upbqdn.

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.15(Sep 19, 2022)

    This release improves Zebra's sync and RPC performance, improves test coverage and reliability, and starts creating Docker Hub binaries for releases.

    It also changes some of zebra-network's unstable Rust APIs to provide more peer metadata.

    Breaking Changes

    This release has the following breaking changes:

    • Zebra's JSON-RPC server has an isolated thread pool, which is single threaded by default (#4806). Multi-threaded RPCs disable port conflict detection, allowing multiple Zebra instances to share the same RPC port (#5013). To activate multi-threaded RPC server requests, add this config to your zebrad.toml:
    [rpc]
    parallel_cpu_threads = 0
    
    • Docker users can now specify a custom zebrad config file path (#5163, #5177). As part of this feature, the default config path in the Docker image was changed.

    • zebrad now uses a non-blocking tracing logger (#5032). If the log buffer fills up, Zebra will discard any additional logs. Moving logging to a separate thread also changes the timing of some logs, this is unlikely to affect most users.

    • Zebra's gRPC tests need protoc installed (#5009). If you are running Zebra's lightwalletd gRPC test suite, see the tonic README for details.

    Added

    Releasing Zebra

    • Create Docker hub binaries when tagging releases (#5138)
    • Document how Zebra is versioned and released (#4917, #5026)
    • Allow manual Release Drafter workflow runs (#5165)

    Network Peer Rust APIs

    Note: Zebra's Rust APIs are unstable, they are not covered by semantic versioning.

    • Return peer metadata from connect_isolated functions (#4870)

    Testing

    • Check that the latest Zebra version can parse previous configs (#5112)
    • Test disabled lightwalletd mempool gRPCs via zebrad logs (#5016)

    Documentation

    • Document why Zebra does a UTXO check that looks redundant (#5106)
    • Document how Zebra CI works (#5038, #5080, #5100, #5105, #5017)

    Changed

    Zebra JSON-RPCs

    • Breaking: Add a config for multi-threaded RPC server requests (#5013)
    • Isolate RPC queries from the rest of Zebra, to improve performance (#4806)

    Zebra State

    • Send treestates from non-finalized state to finalized state, rather than re-calculating them (#4721)
    • Run StateService read requests without shared mutable chain state (#5132, #5107)
    • Move the finalized block queue to the StateService (#5152)
    • Simplify StateService request processing and metrics tracking (#5137)

    Block Checkpoints

    • Update Zebra checkpoints (#5130)

    Docker Images

    • Breaking: Allow Docker users to specify a custom zebrad config file path (#5163, #5177)

    Continuous Integration and Deployment

    • Wait 1 day before creating cached state image updates (#5088)
    • Delete cached state images older than 2 days, but keep a few recent images (#5113, #5124, #5082, #5079)
    • Simplify GitHub actions caches (#5104)
    • Use 200GB disks for managed instances (#5084)
    • Improve test reliability and test output readability (#5014)

    Zebra Dependencies

    • Breaking: Update prost, tonic, tonic-build and console-subscriber to the latest versions (#5009)
    • Upgrade zcash\_script and other shared zcash dependencies (#4926)
    • Update deny.toml developer docs and file comments (#5151, #5070)
    • Update other Zebra Rust dependencies to the latest versions (#5150, #5160, #5176, #5149, #5136, #5135, #5118, #5009, #5074, #5071, #5037, #5020, #4914, #5057, #5058, #5047, #4984, #5021, #4998, #4916, #5022, #4912, #5018, #5019)

    CI Dependencies

    • Update Zebra CI dependencies to the latest versions (#5159, #5148, #5117, #5073, #5029)

    Removed

    Continuous Integration

    • Disable beta Rust tests (#5090, #5024)

    Fixed

    Logging

    • Breaking: Switch zebrad to a non-blocking tracing logger (#5032)

    Testing

    • Increase full sync timeout to 32 hours (#5172, #5129)
    • Disable unreliable RPC port conflict tests on Windows and macOS (#5072)
    • Increase slow code log thresholds to reduce verbose logs and warnings (#4997)

    Continuous Integration

    • Fix full sync CI failures by adding an extra GitHub job (#5166)
    • Make checkpoint disk image names short enough for Google Cloud (#5128)
    • Label lightwalletd cached state images with their sync height (#5086)

    Lints

    • Fix various Rust clippy lints (#5131, #5045)
    • Fix a failure in tj-actions/changed-files on push (#5097)

    Documentation

    • Enable all cargo features in Zebra's deployed documentation (#5156)

    Security

    JSON-RPC Server

    • Isolate RPC queries from the rest of Zebra, so that lightwalletd clients are more isolated from each other (#4806)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.14(Sep 1, 2022)

    This release contains a variety of CI fixes, test fixes and dependency updates. It contains two breaking changes:

    • the recommended disk capacity for Zebra is now 300 GB, and the recommended network bandwidth is 100 GB per month, and
    • when no command is provided on the command line, zebrad automatically starts syncing (like zcashd).

    The sync performance of lightwalletd is also improved.

    Added

    • Store history trees by height in the non-finalized state (#4928)
    • Breaking: Add start as default subcommand for zebrad (#4957)

    Changed

    • Fix a performance regression when serving blocks via the Zcash network protocol and RPCs (#4933)
    • Update block hash checkpoints for mainnet (#4919, #4972)
    • Enable a tinyvec feature to speed up compilation (#4796)
    • Split the zebra_state::service::read module (#4827)
    • Disallow Orchard ivk = 0 on IncomingViewingKey::from & SpendingKey generation (#3962)

    Docs

    • Increase disk and network requirements for long-term deployment (#4948, #4963)
    • Update supported Rust versions in README.md (#4938)
    • Document edge cases in sync workflows (#4973)
    • Add missing status badges & sections (#4817)

    Rust Dependencies

    • Bump serde from 1.0.137 to 1.0.144 (#4865, #4876, #4925)
    • Bump serde_json from 1.0.81 to 1.0.83 (#4727, #4877)
    • Bump serde_with from 1.14.0 to 2.0.0 (#4785)
    • Bump futures from 0.3.21 to 0.3.23 (#4913)
    • Bump futures-core from 0.3.21 to 0.3.23 (#4915)
    • Bump chrono from 0.4.19 to 0.4.20 (#4898)
    • Bump criterion from 0.3.5 to 0.3.6 (#4761)
    • Bump thiserror from 1.0.31 to 1.0.32 (#4878)
    • Bump vergen from 7.2.1 to 7.3.2 (#4890)
    • Bump tinyvec from 1.5.1 to 1.6.0 (#4888)
    • Bump insta from 1.15.0 to 1.17.1 (#4884)
    • Bump semver from 1.0.12 to 1.0.13 (#4879)
    • Bump bytes from 1.1.0 to 1.2.1 (#4843)
    • Bump tokio from 1.20.0 to 1.20.1 (#4864)
    • Bump hyper from 0.14.19 to 0.14.20 (#4764)
    • Bump once_cell from 1.12.0 to 1.13.0 (#4749)
    • Bump regex from 1.5.6 to 1.6.0 (#4755)
    • Bump inferno from 0.11.6 to 0.11.7 (#4829)

    CI Dependencies

    • Bump actions/github-script from 6.1.0 to 6.2.0 (#4986)
    • Bump reviewdog/action-actionlint from 1.27.0 to 1.29.0 (#4923, #4987)
    • Bump tj-actions/changed-files from 24 to 29.0.2 (#4936, #4959, #4985)
    • Bump w9jds/firebase-action from 2.2.2 to 11.5.0 (#4905)
    • Bump docker/build-push-action from 3.0.0 to 3.1.1 (#4797, #4895)

    Fixed

    • Increase the number of blocks checked for legacy transactions (#4804)

    CI

    • Split a long full sync job (#5001)
    • Stop cancelling manual full syncs (#5000)
    • Run a single CI workflow as required (#4981)
    • Fix some clippy warnings (#4927, #4931)
    • Improve Zebra acceptance test diagnostics (#4958)
    • Expand cached state disks before running tests (#4962)
    • Increase full sync timeouts for longer syncs (#4961)
    • Fix a regular expression typo in a full sync job (#4950)
    • Write cached state images after update syncs, and use the latest image from any commit (#4949)
    • Increase CI disk size to 200GB (#4945)
    • Make sure Rust tests actually run in deploy-gcp-tests.yml (#4710)
    • Copy lightwalletd from the correct path during Docker builds (#4886)
    • Use FHS for deployments and artifacts (#4786)
    • Retry gcloud authentication if it fails (#4940)
    • Disable beta Rust tests and add parameter download logging (#4930)
    • Do not run versioning job when pushing to main (#4970)
    • Deploy long running node instances on release (#4939)
    • Run build and test jobs on cargo and clippy config changes (#4941)
    • Increase Mergify batch sizes (#4947)

    Networking

    • Send height to peers (#4904)
    • Fix handshake timing and error handling (#4772)

    Tests

    • Show full Zebra test panic details in CI logs (#4942)
    • Update timeout for Zebra sync tests (#4918)
    • Improve test reliability and performance (#4869)
    • Use FuturesOrdered in fallback_verification test (#4867)
    • Skip some RPC tests when ZEBRA_SKIP_NETWORK_TESTS is set (#4849)
    • Truncate the number of transactions in send transaction test (#4848)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.13(Jul 31, 2022)

    This release fixes multiple bugs in proof and signature verification, which were causing big performance issues near the blockchain tip. It also improves Zebra's sync performance and reliability under heavy load.

    Disk and Network Usage Changes

    Zebra now uses around 50 - 100 GB of disk space, because many large transactions were recently added to the block chain. (In the longer term, several hundred GB are likely to be needed.)

    When there are a lot of large user-generated transactions on the network, Zebra can upload or download 1 GB or more per day.

    Configuration Changes

    • Split the checkpoint and full verification sync concurrency options (#4726, #4758):
      • Add a new full_verify_concurrency_limit
      • Rename max_concurrent_block_requests to download_concurrency_limit
      • Rename lookahead_limit to checkpoint_verify_concurrency_limit For backwards compatibility, the old names are still accepted as aliases.
    • Add a new parallel_cpu_threads sync concurrency option (#4776). This option sets the number of threads to use for CPU-bound tasks, such as proof and signature verification. By default, Zebra uses all available CPU cores.

    Rust Compiler Bug Fixes

    • The Rust team has recently fixed compilation bugs in function coercions of impl Trait return types, and async fn lifetimes. We recommend that you update your Rust compiler to release 1.62.1, and re-compile Zebra.

    Added

    • Add a rayon thread pool for CPU-bound tasks (#4776)
    • Run multiple cryptographic batches concurrently within each verifier (#4776)
    • Run deserialization of transaction in a rayon thread (#4801)
    • Run CPU-intensive state updates in parallel rayon threads (#4802)
    • Run CPU-intensive state reads in parallel rayon threads (#4805)
    • Support Tiers and supported platforms per Tier doc (#4773)

    Changed

    • Update column family names to match Zebra's database design (#4639)
    • Update Zebra's mainnet and testnet checkpoints (#4777, #4833)
    • Process more blocks and batch items concurrently, so there's a batch ready for each available CPU (#4776)
    • Wrap note commitment trees in an Arc, to reduce CPU and memory usage (#4757)
    • Increment tokio dependency from 1.19.2 to 1.20.0, to improve diagnostics (#4780)

    Fixed

    • Only verify halo2 proofs once per transaction (#4752)
    • Use a separate channel for each cryptographic batch, to avoid dropped batch results (#4750)
    • Improve batch fairness and latency under heavy load (#4750, #4776)
    • Run all verifier cryptography on blocking CPU-bound threads, using tokio and rayon (#4750, #4776)
    • Use tokio's PollSemaphore, instead of an outdated Semaphore impl (#4750)
    • Check batch worker tasks for panics and task termination (#4750, #4777)
    • Limit the length of the reject network message's message and reason fields (#4687)
    • Change the bitvec dependency from 1.0.0 to 1.0.1, to fix a performance regression (#4769)
    • Fix an occasional panic when a zebra-network connection closes (#4782)
    • Stop panicking when the connection error slot is not set (#4770)
    • When writing blocks to disk, don't block other async tasks (#4199)
    • When sending headers to peers, only deserialize the header data from disk (#4792)
    • Return errors from send_periodic_heartbeats_with_shutdown_handle (#4756)
    • Make FindHeaders and FindHashes run concurrently with state updates (#4826)
    • Stop reading redundant blocks for every FindHashes and FindHeaders request (#4825)
    • Generate sapling point outside the method (#4799)

    CI

    • Workaround lightwalletd hangs by waiting until we're near the tip (#4763)
    • Split out Canopy logs into a separate job (#4730)
    • Make full sync go all the way to the tip (#4709)
    • Split Docker logs into sprout, other checkpoints, and full validation (#4704)
    • Add a Zebra cached state update test, fix lightwalletd tests (#4813)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.12(Jun 29, 2022)

    This release improves Zebra's Orchard proof verification performance and sync performance. Zebra prefers to connect to peers on the canonical Zcash ports.

    This release also contains some breaking changes which:

    • improve usability, and
    • make Zebra compile faster.

    Breaking Changes

    Cache Deletion

    • Zebra deletes unused cached state directories in <OS-specific cache dir>/zebra (#4586) These caches only contain public chain data, so it is safe to delete them.

    Compile-Time Features

    • Most of Zebra's tracing and metrics features are off by default at compile time (#4539, #4680)
    • The enable-sentry feature has been renamed to sentry (#4623)

    Config

    • Times in zebrad.config change from seconds/nanoseconds to a human-readable format. Remove times in the old format, or use zebrad generate to create a new config. (#4587)

    Added

    Diagnostics

    • Show the current network upgrade in progress logs (#4694)
    • Add some missing tracing spans (#4660)
    • Add tokio-console support to zebrad (#4519, #4641)
    • Add fallible_impl_from clippy lint (#4609)
    • Add unwrap_in_result clippy lint (#4667)

    Testing

    • Check that old zebrad.toml configs can be parsed by the latest version (#4676)
    • Test cargo doc warnings and errors (#4635, #4654)
    • Document how to run full sync and lightwalletd tests (#4523)

    Continuous Integration

    • Add beta rust to CI (#4637, #4668)
    • Build each Zebra crate individually (#4640)

    Changed

    Chain Sync

    • Update mainnet and testnet checkpoint hashes (#4708)

    Diagnostics

    • Update transaction verification dashboard to show all shielded pool sigs, proofs, nullifiers (#4585)

    Testing

    • Add an identifiable suffix to zcash-rpc-diff temp directories (#4577)

    Dependencies

    • Managecargo-mdbook as a GitHub action (#4636)

    Continuous Integration

    • Automatically delete old GCP resources (#4598)

    Documentation

    • Improve the release checklist (#4568, #4595)

    Removed

    Continuous Integration

    • Remove redundant build-chain-no-features job (#4656)

    Fixed

    Performance

    • Upgrade halo2 and related dependencies to improve proof verification speed (#4699)
    • Change default sync config to improve reliability (#4662, #4670, #4679)
    • Fix a lookahead config panic (#4662)

    Continuous Integration

    • Actually create a cached state image after running a sync (#4669)
    • Split docker run into launch, logs, and wait, to avoid GitHub job timeouts (#4675, #4690)
    • Ignore lightwalletd test hangs for now (#4663)
    • Disable zcash_rpc_conflict test on macOS (#4614)
    • Use latest lightwalletd image for Zebra's Dockerfile (#4599)
    • Increase lightwalletd timeout, remove testnet tests (#4584)

    Documentation

    • Fix various cargo doc warnings (#4561, #4611, #4627)
    • Clarify how Zebra and zcashd interact in README.md (#4570)
    • Improve lightwalletd tutorial (#4566)
    • Simplify README and link to detailed documentation (#4680)

    Diagnostics

    • Resolve some lifetime and reference lints (#4578)

    Security

    • When connecting to peers, ignore invalid ports, and prefer canonical ports (#4564)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.11(Jun 3, 2022)

    This release cleans up a lot of tech debt accumulated in the previous development and improves the documentation.

    Added

    • Log the tracing level when it is set or reloaded (#4515)

    CI

    • Add a codespell linting action (#4482)
    • Add grpc tests to CI (#4453)
    • Require network names in cached state disk names (#4392)

    RPC

    • Add support for verbosity=1 in getblock (#4511)
    • Add z_gettreestate gRPC tests (#4455)

    Documentation

    • Explain what Zebra does when it starts up (#4502)
    • Add a lightwalletd tutorial (#4526)

    Changed

    • Immediately disconnect from pre-NU5 nodes (#4538)
    • Upgrade tracing-subscriber and related dependencies (#4517)
    • Disable debug logging at compile time in release builds (#4516)
    • Activate the mempool after 2 syncer runs at the chain tip, rather than 4 (#4501)
    • Run coverage on stable (#4465)
    • Allow more time for tests to end gracefully (#4469)
    • Do not create draft PRs if not needed (#4540)

    Rust Dependencies

    • Bump inferno from 0.11.3 to 0.11.4 (#4534)
    • Bump insta from 1.14.0 to 1.14.1 (#4542)
    • Bump log from 0.4.14 to 0.4.17 (#4530)
    • Bump serde_with from 1.13.0 to 1.14.0 (#4532)
    • Bump indexmap from 1.8.1 to 1.8.2 (#4531)
    • Bump vergen from 7.1.0 to 7.2.0 (#4521)
    • Bump prost from 0.10.3 to 0.10.4 (#4490)
    • Bump regex from 1.5.5 to 1.5.6 (#4463)
    • Bump once_cell from 1.11.0 to 1.12.0 (#4462)
    • Bump once_cell from 1.10.0 to 1.11.0 (#4447)

    CI Dependencies

    • Bump tj-actions/changed-files from 20 to 21 (#4510)
    • Bump google-github-actions/auth from 0.7.3 to 0.8.0 (#4478)
    • Bump tj-actions/changed-files from 21 to 22 (#4541)
    • Bump w9jds/firebase-action from 2.1.0 to 2.1.2 (#4431)
    • Bump reviewdog/action-actionlint from 1.24.0 to 1.25.0 (#4432)
    • Bump reviewdog/action-actionlint from 1.25.0 to 1.25.1 (#4479)

    Fixed

    • Index spending transaction IDs for each address (#4355)
    • Resolve various clippy warnings (#4473)

    Documentation

    • Fix various doc warnings (#4514)
    • Fix the syntax of links in comments (#4494)

    CI

    • Test RPCs with zcash/lightwalletd, to fix post-NU5 failures in adityapk00/lightwalletd (#4553)
    • Add lightwalletd gRPC, clippy, rustfmt patch jobs (#4518)
    • Permanently fix unreliable sync finished log regex (#4504)
    • Always run patch jobs that depend on cached cloud disks (#4496)
    • Temporarily finish full sync at 99% (#4457)
    • Increase clippy timeout (#4472)
    • Set a network env variable to be used in get-available-disks (#4477)
    • Temporarily stop full sync at 97%, but send transactions at 100% (#4483)
    • Mount the lwd-cache dir to the lightwalletd-full-sync (#4486)
    • Require cached state for the send transactions test (#4487)
    • Make reusable workflow job names match patch job names (#4466)
    • Update docker patch jobs for recent changes (#4460)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.10(May 19, 2022)

    Zebra's latest beta continues adding support for lightwalletd RPC methods and continues with the testing of each of these features. Also, this beta sets the NU5 mainnet activation height.

    Added

    RPC

    • z_gettreestate RPC (#3990)
    Tests
    • grpc test for GetTaddressBalanceStream and GetAddressUtxosStream (#4407)
    • snapshot tests for RPC methods responses (#4352 #4401)

    CI

    • lightwalletd_update_sync test to CI (#4269)
    • lightwalletd_full_sync test to CI (#4268)

    Changed

    • Set NU5 mainnet activation height and current network protocol version (#4390)
    • NU5 mainnet dependency upgrades (#4405)
    • Use the latest lightwalletd version (#4398)

    Rust Dependencies

    • orchard, redjubjub, jubjub, group, bls12_381, bitvec, halo2, jubjub, primitive_types, librustzcash, zcash_history, zcash_encoding, bellman, zcash_script, incrementalmerkletree (#4405)
    • vergen from 7.0.0 to 7.1.0 (#4420)
    • tokio-util from 0.7.1 to 0.7.2 (#4406)
    • inferno from 0.11.2 to 0.11.3 (#4357)
    • tokio from 1.18.1 to 1.18.2 (#4358)
    • prost from 0.10.2 to 0.10.3 (#4348)
    • bech32 from 0.8.1 to 0.9.0 (#4394)

    CI Dependencies

    • google-github-actions/auth from 0.7.1 to 0.7.3 (#4404 #4419)
    • tj-actions/changed-files from 19 to 20 (#4403)
    • w9jds/firebase-action from 2.0.0 to 2.1.0 (#4402)

    Others

    • Rename workflow files (#3941)
    • Added block hash and height to syncer errors (#4287)
    • Drop sentry dependencies when enable-sentry feature is disabled (#4372)
    • Deprecate gcr.io as a registry and build faster (#4298)
    • Clippy: Remove redundant bindings, allocations, and generics (#4353)

    Documentation

    • Added "old state directories aren't deleted" to known issues (#4365)
    • Added support for Mermaid to render graphs (#4359)
    • Fix some typos (#4397)

    Fixed

    RPC

    • Use the Sapling activation height in gRPC tests (#4424)

    State

    • Return non-finalized UTXOs and tx IDs in address queries (#4356)
    • List cached state files before or after tests (#4409)

    CI and testing fixes

    • Updated Cargo.lock check job name in patch workflow (#4428)
    • Put gRPC tests behind an optional feature flag to fix production build issues (#4369)
    • Stop failing the send transaction test (#4416)
    • Require cached lightwalletd state for the send transaction tests (#4303)
    • Errors in Docker entrypoint (#4411)
    • Only use cached state disks with the same state version (#4391)
    • Output length in some tests (#4387)
    • Wrong file being referenced by CI (#4364)
    • Make test selection and logging consistent (#4375)
    • Allow builds over 1 hour and tests without the sentry feature (#4370)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.9(May 9, 2022)

    Zebra's latest beta continues our work on lightwalletd RPC methods, and contains some internal CI improvements.

    Added

    RPCs

    • Add a script for comparing zcashd and zebrad RPC responses (#4219)
    • Add Rust tests for lightwalletd sync from Zebra (#4177)
    • Add integration test to send transactions using lightwalletd (#4068)
    • RPC test with fully synced Zebra (#4157)
    • Log unrecognized RPC requests (#3860)
    • Implement the get_address_tx_ids RPC method query (#4119)
    • Implement getaddressbalance RPC (#4138)
    • Add a query function for transparent UTXOs (#4111)

    CI

    • Add sending_transactions_using_lightwalletd test to CI (#4267)
    • Add a zebrad tip-height utility command (#4289)
    • Add fully_synced_rpc_test test to CI (#4223)
    • Add a reusable workflow for deployable integration tests (#4271)
    • Add wallet grpc tests (#4253)
    • Implement reusable workflows for image building (#4173)
    • Implement getaddressutxos RPC method. (#4087)

    Changed

    • Increase block validation timeouts (#4156)
    • Decrease the peer handshake timeout to 3 seconds, to speed up the initial sync (#4212)
    • Use link-time optimisation in release builds (#4184)
    • Add an extra block retry, to speed up the initial sync (#4185)
    • Update Zebra's block hash checkpoints (#4183)
    • Document coinbase rules, refactor to ease understanding (#4056)
    • Disconnect from testnet peers using the first NU5 testnet rules (#3976)

    RPCs

    • Simplify RPC types and add documentation (#4218)

    Documentation

    • Add transaction index diagram to RFC-0005 (#4330)

    CI

    • Skip tests when doing a manual full sync (#4333)
    • Add cached state version to disk images (#4314)
    • Check specific files for each job when linting (#4311)
    • Use debian for faster mounting and bump readiness time (#4276)
    • Use docker instead of Konlet for GCP deployments in CI (#4252)
    • Create a full sync disk to add the cached state inside (#4266)
    • Increase the Zcash parameter fetch timeout (#4148)

    Fixed

    • Fix testnet syncer loop on large Orchard blocks (#4286)

    RPCs

    • Fix some RPC response formats to match zcashd (#4217)
    • Make Zebra RPC compatible with the zcash-cli RPC client (#4215)
    • Use a structure for parameters of getaddresstxids (#4264)

    CI

    • Only update cached states when needed (#4332)
    • Run sync tests according to the right conditions (#4313)
    • Stop actionlint from failing in main (#4317)
    • Make the full sync tests cache state at /zebrad-cache (#4308)
    • Avoid docker cache contamination and invalidation (#4254)
    • Garbage collect instances no matter previous steps status (#4255)
    • Do not delete instances from main branch on merge (#4206)
    • Retry after docker log follow ssh failures (#4198)
    • Share GitHub runner caches between branches (#4149)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.8(Apr 19, 2022)

    Zebra's latest beta completes our work on the NU5 consensus rules. It continues our work on lightwalletd RPC methods, and contains some internal CI improvements.

    Added

    RPCs

    • Implement a retry queue for transactions sent via RPCs (#4015)
    • Partially implement the getaddresstxids RPC method (#4062)

    State

    • Add a transparent address balance index (#3963)
    • Add a transparent address UTXO index (#3999)
    • Add a transparent address transaction index (#4038)
    • Add transparent address indexes to the non-finalized state (#4022)
    • Add a query function for transparent address balances (#4097)

    CI

    • Create cached state disk image after a successful full sync test (#3986)

    Changed

    NU5

    • Update to new zcash_script V5 API (#3799)
    • Update network protocol versions for the second NU5 activation on testnet (#3799)
    • Update the consensus branch ID and the second NU5 testnet activation height (#3799)
    • Bump database version to trigger testnet rollback (#3799)

    State

    • Store transactions in a separate database index, to improve query speed (#3934)
    • Store UTXOs by transaction location rather than transaction hash (#3978)
    • Stop storing redundant transparent output fields in the database (#3992)
    • Use LZ4 compression for RocksDB (#4027)
    • Use Ribbon filters for database index lookups (#4040)
    • Tune state database file compaction configuration (#4045)

    CI

    • Put the state version in cached state disk names (#4073)
    • Improve mergify merge throughput (#4094, #4120)
    • Run cached state rebuilds in main branch (#4107)
    • Use GitHub Branch Protection checks instead of Mergify (#4103, #4105)
    • Lint and standardize the actions structure (#3940)

    Rust Dependencies

    • Update shared Zcash dependencies for the second NU5 activation on testnet (#3799)
    • Disable unused rocksdb compression features (#4082)
    • Bump rlimit from 0.7.0 to 0.8.3 (#4051)

    CI Dependencies

    • Bump docker/metadata-action from 3.6.2 to 3.7.0 (#4049)
    • Bump google-github-actions/auth from 0.6.0 to 0.7.0 (#4050)
    • Bump tj-actions/changed-files from 18.6 to 18.7 (#4065)
    • Bump reviewdog/action-actionlint from 1.21.0 to 1.23.0 (#4099, #4125)
    • Bump actions/checkout from 3.0.0 to 3.0.1 (#4126)

    Fixed

    CI

    • Validate tests exit code after reading the container logs (#3968, #4069)
    • Give enough time to zebra before reading logs (#4123)

    Rust Clippy

    • Ignore clippy drop warnings in tests (#4081)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.7(Apr 5, 2022)

    Zebra's latest beta fixes a cargo install build failure in the previous beta release. It also fixes a lightwalletd RPC bug, and improves test coverage.

    Changed

    Database and State

    • Update database design to put ordered list values in RocksDB keys (#3997)
    • Make transparent address index database design more consistent (#4019)

    CI

    • Do not invalidate cache between PRs (#3996)

    Dependency Updates

    • Bump hyper from 0.14.17 to 0.14.18 (#3946)
    • Bump indexmap from 1.8.0 to 1.8.1 (#4003)
    • Bump semver from 1.0.6 to 1.0.7 (#3982)
    • Bump serde-big-array from 0.3.2 to 0.4.1 (#4004)
    Test Dependency Updates
    • Bump insta from 1.13.0 to 1.14.0 (#3980)
    • Bump tokio-util from 0.7.0 to 0.7.1 (#3981)
    CI Dependency Updates
    • Bump tj-actions/changed-files from 18.4 to 18.6 (#4002)

    Fixed

    Build

    • Fix a compilation error caused by a test-only method in production code (#4000)
    • Add a job to ci.yml that does cargo install --locked --path ./zebrad/ zebrad (#3998)

    RPC

    • Tell lightwalletd to wait for missing blocks in the getblock RPC (#3977)

    State

    • Stop panicking when a state block commit fails (#4016)

    Logging

    • Log hashes as hex strings in block committment errors (#4021)

    Tests

    • Check for accidental database incompatibilities in cached state tests (#4020)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.6(Mar 28, 2022)

    Zebra's latest beta adds RPC server support, including some of the RPC calls needed to become a lightwalletd back end. As part of the RPC changes, we made performance improvements to cached state access.

    Added

    RPC

    • RPC server support (#3589 #3863)
    • getinfo RPC method (#3660)
    • sendrawtransaction RPC method (#3685 #3706)
    • getbestblockhash RPC method (#3754 #3864)
    • getblock RPC method (#3707)
    • getrawmempool RPC method (#3851)
    • getblockchaininfo RPC method (#3891)
    • getrawtransactionRPC method (#3908)

    Tests

    • Basic RPC server tests (#3641 #3726 #3879)
    • Lightwalletd integration test (#3619 #3627 #3628 #3859 #3824 #3758 #3903)
    • Full sync test (#3582)

    Documentation

    • Document RPC methods (#3868)
    • Document consensus rules from 4.6 Action Descriptions (#3549)

    CI

    • Add lightwaletd integration test build and CI pipeline (#3657 #3700 #3705)

    Others

    • Added TransactionsByMinedId to mempool (#3907)
    • Added code owners and automatic review assigment to the repository (#3677 #3708 #3718)
    • Validate ZIP-212 grace period blocks using checkpoints (#3889)
    • Store Sapling and Orchard note commitment trees in finalized and non-finalized state (#3818)
    • Get addresses from transparent outputs (#3802)
    • Explain the different ways .txt files are usedin the CI (#3743)

    Changed

    The Zebra team made a huge refactor to the database storage and the state to serve RPC calls efficiently. The refactor is accompanied with extensive low level tests in the form of snapshots.

    Database and State

    • Tests: #3691 #3759 #3630
    • Database: #3717 #3741 #3874 #3578 #3579 #3590 #3607 #3617
    • State: #3778 #3810 #3846 #3847 #3870 #3865 #3866 #3811 #3826

    CI

    • Cleanup GCP instances on a single PR (#3766)
    • Use OCI Image Format Specification for labels (#3728)
    • Use improved OIDC for gcloud authentication (#3885)
    • Use gcloud to search for cached disk state (#3775)

    Dependency updates

    • Remove an outdated dependabot ignore rule (#3719)
    • Manually upgraded some dependencies (#3625)
    • Replace unmantained multiset with mset (#3595)
    • Update sha2 from 0.9.8 to 0.9.9 (#3585)
    • Update semver from 1.0.5 to 1.0.6 (#3610)
    • Update secp256k1 from 0.21.2 to 0.21.3 (#3632)
    • Update insta from 1.12.0 to 1.13.0 (#3762)
    • Update inferno from 0.10.12 to 0.11.1 (#3748 #3919)
    • Update regex from 1.5.4 to 1.5.5 (#3797)
    • Update google-github-actions/setup-gcloud from 0.5.1 to 0.6.0 (#3814)
    • Update docker/login-action from 1.12.0 to 1.14.1 (#3570 #3761)
    • Update actions/cache from 2 to 3 (#3918)
    • Update tj-actions/changed-files from 14.4 to 18.4 (#3667 #3917 #3796 #3895 #3876)
    • Update docker/build-push-action from 2.9.0 to 2.10.0 (#3878)
    • Update once_cell from 1.9.0 to 1.10.0 (#3747)
    • Update actions/checkout from 2.4.0 to 3.0.0 (#3806)
    • Update owo-colors from 3.2.0 to 3.3.0 (#3920)
    • Update vergen from 6.0.2 to 7.0.0 (#3837)

    Documentation

    • Simplify the database design using prefix iterators (#3916)
    • Link to Conventional Commits specification in CONTRIBUTING file (#3858)
    • Update database design for read-only state service (#3843)
    • Explain optional zebra-network/tor dependencies (#3765)
    • Simplify zebra-checkpoints summary (#3612)

    Tests

    • Turn on full backtraces and disable frame filtering (#3763)
    • Decouple full sync from other tests (#3735)
    • Split zebrad acceptance tests into sub-modules (#3901)
    • Improve zebrad test API (#3899 #3892)

    Others

    • Move mempool request and response types to a new zebra-node-services crate (#3648)
    • Enable checkpoint_sync by default (#3777)
    • Update Zebra's hard-coded blockchain checkpoint lists (#3606)
    • Clippy lints: warn on manual printing to stdout or stderr (#3767)

    Removed

    • Temporally removed Windows support from CI (#3819)

    Fixed

    • Make FromHex consistent with ToHex for tx/block hashes (#3893)
    • Prevent synchronizer loop when very close to tip (#3854)
    • Use RwLock for note commitment tree root caches (#3809)

    Tests

    • Use the correct stop condition for the cached state tests (#3688)
    • Stop excessive logging which causes test hangs (#3755)
    • Use all available checkpoints in the full sync test (#3613)
    • Use TEST_FAKE_ACTIVATION_HEIGHTS at runtime and fix tests (#3749)
    • Check for zebrad test output in the correct order (#3643)

    CI

    • Do not use GHA cache for images (#3794)
    • Run coverage collection when pushing to main (#3561)
    • Check for duplicate dependencies with optional features off (#3592)
    • Remove coverage from mergify because nightly builds fail (#3886)
    • Only run the full sync test on mergify queue PRs (#3773)
    • Fix syntax in some yml workflows (#3957)
    • Update CI job path triggers (#3692)
    • Change pd-extreme to pd-ssd to avoid quotas (#3823)
    • Use a specific shortening length for SHAs (#3929)
    • Path format for cached state rebuild (#3873)
    • Re-enable manual dispatch for test full sync (#3812)
    • Use correct conditional in job to deploy Mainnet nodes (#3750)
    • Missing job key and timeout bump for build (#3744)

    Security

    • Forbid non-ascii identifiers (#3615)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.5(Feb 21, 2022)

    Zebra's latest beta brings better networking, documents more consensus rules and improves the CI pipelines.

    Added

    • Estimate network chain tip height based on local node time and current best tip (#3492)
    • Add extra integer lints, and partially fix some code (#3409)
    • Prepare for changes in ZIP-244 (#3415, #3446)
    • Support large block heights (#3401)
    • Check coinbase data is at least 2 bytes long (#3542)
    • Ignore non-verack and non-version messages in handshake (#3522)
    • Allow forcing zebrad to use color output (#3547)

    Tests

    • Add a test for peerset broadcast panic (#3470)
    • Add PeerSet readiness and request future cancel-safety tests (#3252)
    • Add full chain synchronization acceptance tests (#3543)
    • Add chain tip estimate test: log chain progress while Zebra is syncing (#3495)

    Networking

    • Avoid repeated requests to peers after partial responses or errors (#3505)
    • Send notfound when Zebra doesn't have a block or transaction (#3466)
    • Route peer requests based on missing inventory (#3465)
    • Create an API for a missing inventory registry, but don't register any missing inventory yet (#3255)

    Documentation

    • Document consensus rules from 7.3 Spend Description Encoding and Consensus (#3575)
    • Document second part of consensus rules from 7.6 Block Header Encoding and Consensus (#3566)
    • Document consensus rules from 3.9 Nullifier Sets (#3521)
    • Update README goals and performance troubleshooting (#3525)
    • Document consensus rules from 4.5 Output Descriptions (#3462)
    • Document shielded pools consensus rules from 7.1.2 Transaction Consensus Rules (#3486)
    • Document Transaction encodings: sprout fields (#3499)
    • Document Transaction encodings: transparent fields (#3498)
    • Document Transaction encodings: orchard fields (#3507)
    • Document Transaction encodings: sapling fields (#3501)
    • Document Transaction encodings: header fields (#3491)
    • Document consensus rules from 4.4 Spend Descriptions (#3460)
    • Document consensus rules from 4.3 JoinSplit Descriptions (#3452)
    • Document Transaction consensus rules: Size rules (#3461)
    • Document Transaction consensus rules: Coinbase rules (#3464)
    • Document Transaction consensus rules: Header rules (#3456)

    Changed

    • Reduce log level of components (#3418, #3437)
    • Change Type To Force Consensus Rule Validation (#3544)
    • Split The Database Module (#3568)
    • Dockerize Tests And Run Sync In Detached Mode (#3459)
    • Improve Docker And Gcloud Usage Without Cloud Build (#3431)
    • Make better use of variables, secrets and versions (#3393)

    Removed

    • Remove founders reward code (#3430)

    Fixed

    • Use the new increase_nofile_limit function from rlimit 0.7.0 (#3539)
    • Generate Well-Formed Finalsaplingroot In Arbitrary Implementation (#3573)
    • Rename some lightwalletd database types (#3567)

    Networking

    • Allow more inbound than outbound connections (#3527)
    • Only send responded updates on handshake/ping/pong (#3463)
    • Increase state concurrency and syncer lookahead (#3455)
    • Add a send timeout to outbound peer messages (#3417)

    Tests

    • Make Full Sync Test More Accurate (#3555)
    • Create Disk From Image Before Mounting (#3550)
    • Simplify Resource Conflict Test To Avoid Ci Failures (#3537)
    • Make Full Sync Test More Efficient (#3562)
    • Evaluate "if" conditions correctly and use last disk SHA (#3556)

    CI

    • Improve test requirements and merge conditions for Mergify (#3580)
    • Make The Purpose Of Each Sync Test Clearer (#3574)
    • Delete A Redundant "Test All" Job (#3552)
    • Allow Branches With Dots In The Name (#3557)
    • Allow Unprivileged Runs Of Clippy (#3558)
    • New Lints In Nightly Rust (#3541)
    • Typo In Paths Filtering Keyword (#3516)
    • Do Not Wait For Deprecated Cloud Build (#3509)
    • Restrict Merges With Unresolved Threads (#3453)
    • Put PRs With No Priority Label In The Low Priority Queue (#3454)
    • Temporarily allow forked repos to run PR workflows (#3503)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.4(Jan 26, 2022)

    Zebra's latest beta improves the networking code and fixes some bugs. A couple of fixed bugs had caused Zebra to hang in some situations. Some improvements to the documentation were also included. All Rust crates have now been updated to use Rust 2021 Edition.

    Added

    • Add a copy-state zebrad command, which copies blocks between two state services (#3175)

    Networking

    • Add isolated Tor connection API, but don't enable it by default (#3303)
    • Add a test for message broadcast to the right number of peers (#3284)

    Changed

    • Update to use Rust edition 2021 (#3332)

    Networking

    • Cache incoming unsolicited address messages, and use them as responses (#3294)
    • Cleanup internal network request handler, fix unused request logging (#3295)

    Documentation

    • Document the consensus rules for Spend Transfers, Output Transfers, and their Descriptions (Section 3.6 of the Zcash protocol specification) (#3338)
    • Document the structure of the zebra-network crate (#3317)
    • Document the consensus rules for Note Commitment Trees (Section 3.8 of the Zcash Protocol Specification) (#3319)
    • Document chain value balances consensus rules with new format (#3286)
    • Document part of the block header consensus rules (#3296)

    Fixed

    Consensus

    • Fix interstitial sprout anchors check (#3283)
    • Check jubjub key correctness independent of redjubjub / jubjub (#3154)

    Networking

    • Fix some bugs related to isolated connections (#3302)
    • Ignore unexpected block responses to fix error cascade when synchronizing blocks, improving synchronization speed (#3374)
    • Cancel heartbeats that are waiting for a peer, rather than hanging Zebra (#3325)
    • Stop ignoring some peers when updating the address book (#3292)
    • Fix some address crawler timing issues (#3293)
    • Retry Zcash sprout and sapling parameters download (#3306)
    • Keep track of background peer tasks (#3253)

    Chain Synchronization

    • Fix deadlock in chain tip watch channel, that sometimes caused chain synchronization to hang (#3378)
    • Fix syncer download order and add sync tests (#3168)

    Tests

    • Fix a type resolution error in the tests (#3304)

    Security

    • Stop RocksDB and Tokio from calling unexpected code when zebrad exits (#3392)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.3(Dec 21, 2021)

    Zebra's latest beta works towards enforcing all consensus rules by validating JoinSplit Groth16 proofs used by Sprout transactions. We have also added security and network improvements, and have also added some metrics to help diagnose networking issues.

    Added

    Consensus

    • Validate JoinSplit proofs (#3128, #3180)

    Networking

    • Add and use debug_skip_parameter_preload config option in tests (#3197)
    • Disconnect from outdated peers on network upgrade (#3108)

    Metrics

    • Add diagnostics for peer set hangs (#3203)
    • Add debug-level Zebra network message tracing (#3170)

    Fixed

    • Stop ignoring some connection errors that could make the peer set hang (#3200)
    • Spawn initial handshakes in separate tasks, Credit: Equilibrium (#3189)
    • Fix coinbase height deserialization to reject non-minimal encodings (#3129)
    • Stop doing thousands of time checks each time we connect to a peer (#3106)

    Security

    • Stop ignoring panics in inbound handshakes (#3192)
    • When there are no new peers, stop crawler using CPU and writing logs (#3177)
    • Limit address book size to limit memory usage (#3162)
    • Drop blocks that are a long way ahead of the tip, or behind the finalized tip (#3167)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.2(Dec 2, 2021)

    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

    • Stop closing connections on unexpected messages, Credit: Equilibrium (#3120, #3131)
    • Stop routing inventory requests by peer address (#3090)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.1(Nov 19, 2021)

    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

    • Upgrade cryptographic library dependencies (#3059)
    • Upgrade to Tokio 1.14.0 (#2933, #2994, #3062)

    Documentation

    • README Updates (#2996, #3006)

    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

    • Security: Avoid reconnecting to peers that are likely unreachable (#3030)
    • Security: Limit number of addresses sent to peers to avoid address book pollution (#3007)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.0(Oct 29, 2021)

    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

    • Restore and update mempool tests (#2966)
    • Test multiple chain resets (#2897)

    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:

    • Manually pin Sleep futures (#2914)
    • Refactor handshake rate limiting to not store a Sleep type (#2915)
    • Use single thread Tokio runtime for tests (#2916)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.19(Oct 21, 2021)

    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

    • Upgrade to ed25519-zebra 3.0.0 (#2864)
    • Stop ignoring the mempool conflicting transaction reject list size limit (#2855)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.18(Oct 6, 2021)

    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)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.17(Sep 14, 2021)

    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)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.16(Aug 27, 2021)

    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
    • Refactor Zebra metrics docs (#2678, #2687)

    Fixed

    • Stop converting Message::Inv(TxId+) into Request::TransactionsById (#2660)
    • Fixed test.yml (#2635)
    • Fixed a clippy lint (#2642)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.15(Aug 16, 2021)

    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)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.14(Jul 29, 2021)

    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 to zebra-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

    • Clarify a variable name and check for overflow in new_ordered_outputs (#2510)
    • Update Orchard keys, hashes, and note commitments to match Zcash test vectors (#2445)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.13(Jul 15, 2021)

    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

    • Document some consensus-critical finalized state behaviour (#2476)
    • Value pools design (#2430)

    Changed

    • Move Utxo type to zebra-chain (#2481)
    • Combine near-duplicate Utxo creation functions (#2467)

    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)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.12(Jul 2, 2021)

    Zebra's latest alpha continues our work on NU5, including Orchard and Transaction V5. It also includes documentation updates and security fixes. In particular, Zebra no longer gossips unreachable addresses to other nodes and users should update and restart any running Zebra nodes.

    Added

    • Check if a previous version of Zebra followed a different consensus branch (#2366)
    • API for a minimum protocol version during initial block download (#2395)
    • Add a verification height to mempool transaction verification requests (#2400)
    • Improved error messages by adding database path method to the Finalized State (#2349)
    • Add property test strategies for V5 transactions (#2347)
    • Re-use a shared Tokio runtime for some Zebra tests (#2397)

    Documentation

    • Add CHANGELOG.md file to the zebra git repo (#2346)
    • Client RFC updates (#2367, #2341)
    • Explain how Zebra validates shielded coinbase outputs like other shielded outputs (#2382)
    • Document required request timeouts due to data dependencies (#2337)
    • Update known issues and add inbound network ports to the README (#2373)
    • Document shared to per-spend anchor conversion (#2363)
    • Document note commitment trees storage (#2259)

    Network Upgrade 5

    • Orchard note commitment tree test vectors (#2384)
    • Enable V5 transaction test vectors in the groth16 tests (#2383)
    • Validate transparent inputs and outputs in V5 transactions (#2302)
    • Batch math & variable-time multiscalar multiplication for RedPallas (#2288)
    • Implement asynchronous verifier service for RedPallas (#2318)
    • ZIP-211: Validate Disabling Addition of New Value to the Sprout Value Pool (#2399)

    Changed

    • Various transaction verifier refactors (#2371, #2432)
    • Remove unicode in Zebra's user agent (#2376)
    • Update multiple crates to ensure bitvec 0.22.3 is being used (#2351)
    • Move transaction consensus branch ID check function to zebra-chain (#2354)
    • Replace primitives_types with uint (#2350)
    • Refactor to return errors from state update methods to prepare for contextual validation (#2417)
    • Refactor of the validation of Sapling shielded data (#2419)

    Network Upgrade 5

    • Update spend and output checks for new Orchard consensus rules (#2398)

    Fixed

    • Failed tests in the cached state CI workflow are no longer ignored (#2403)
    • Stop skipping the cached sync tests in CI (#2402)
    • Fix intermittent errors in the groth16 verifier tests (#2412)
    • Skip IPv6 tests when ZEBRA_SKIP_IPV6_TESTS environmental variable is set (#2405)
    • Stop failing after the mandatory Canopy checkpoint due to incorrect coinbase script verification (#2404)
    • Improved docs and panic messages for zebra_test::command (#2406)
    • Gossip dynamic local listener ports to peers (#2277)
    • Stop allowing JoinSplits for Halo (#2428)
    • Fix failing legacy chain tests (#2427)

    Security

    • Zebra no longer gossips unreachable addresses to other nodes (#2392)
      • User Action Required: Update and restart any running Zebra nodes
    • Avoid duplicate peer connections (#2276)
    • Send local listener address to peers (#2276)
    • Limit reconnection rate to individual peers (#2275)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.11(Jun 18, 2021)

    Zebra's latest alpha continues our work on NU5, including Orchard and Transaction V5. It also includes some security fixes.

    Added

    • Add and use a function for the mandatory checkpoint for a given Network (#2314)

    Network Upgrade 5

    • ZIP-221: integrate MMR tree from librustcash (without Orchard) (#2227)

    Changed

    • Replace usage of atomics with tokio::sync::watch in tests for CandidateSet (#2272)

    Network Upgrade 5

    • Use latest librustzcash version in zcash_history (#2332, #2345)

    Testing and Diagnostics

    • Refactor restart_stop_at_height test to make it more flexible (#2315)
    • Use Swatinem/rust-cache@v1 (#2291)
    • Replace bespoke source-based coverage config with cargo-llvm-cov (#2286)
    • Remove outdated pinned nightly in coverage workflow (#2264)

    Fixed

    Network Upgrade 5

    • Stop panicking on invalid orchard nullifiers (#2267)
    • Reject V5 transactions before NU5 activation (#2285)

    Testing

    • Make acceptance test zebrad output matching more robust (#2252)

    Security

    • Stop gossiping failure and attempt times as last seen times (#2273)
    • Return an error rather than panicking on invalid reserved orchard::Flags bits (#2284)
    • Only apply the outbound connection rate-limit to actual connections (#2278)
    • Rate limit initial genesis block download retries, Credit: Equilibrium (#2255)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.10(Jun 9, 2021)

    Zebra's latest alpha continues our work on NU5, including Orchard and Transaction V5. It also includes some security fixes.

    Added

    Network Upgrade 5

    • Store Orchard nullifiers into the state (#2185)

    Testing and Bug Reports

    • Generate test chains that pass basic chain consistency tests (#2221)
    • Make arbitrary block chains pass some genesis checks (#2208)
    • Test Eq/PartialEq for Orchard keys (#2187, #2228)
    • Further test new transaction consensus rules (#2246)
    • Create workflow to regenerate cached state disks for tests (#2247)
    • Add final sapling root test vectors (#2243)

    Changed

    • Make sure the mandatory checkpoint includes the Canopy activation block (#2235)
    • Move the check in transaction::check::sapling_balances_match to V4 deserialization (#2234)

    Network Upgrade 5

    • Implement more Transaction checks for Transaction Version 5 and Orchard (#2229, #2236)

    Testing and Diagnostics

    • Make debugging easier on proptests with large vectors (#2232, #2222)
    • Update test job to use cached state version 5 (#2253)
    • Add the database format to the panic metadata (#2249)

    Developer Workflows

    • Update the GitHub and RFC templates based on retrospectives (#2242)

    Fixed

    • Get redpallas tweak proptests working again (#2219)

    Testing

    • Adjust the benchmark sample size so all benchmarks finish successfully (#2237)
    • Fix scriptCode serialization and sighash test vectors (#2198)
    • Allow multi-digit Zebra alpha versions in the zebrad acceptance tests (#2250)

    Security

    • Don't trust future gossiped last seen times (#2178)
    • Stop panicking when serializing out-of-range times, Credit: Equilibrium (#2203, #2210)
    • Rate limit GetAddr messages to any peer, Credit: Equilibrium (#2254)
    • Prevent bursts of reconnection attempts (#2251)
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-alpha.9(May 26, 2021)

    Zebra's latest alpha continues our work on NU5, including Orchard and Transaction V5, and includes several security fixes.

    Added

    • Added a new zcash_serialize_bytes utility function (#2150)
    • Added new Arbitrary impls for a number of types in zebra-chain and zebra-network (#2179)
    • Zebra support for leap seconds (#2195)

    Network Upgrade 5

    • Zebra can now serialize and deserialize orchard shielded data (#2116)
    • We now have some Action methods for orchard shielded data (#2199)

    Testing and Bug Reports

    • Added extra instrumentation for initialize and handshakes (#2122)

    Changed

    • Collect and send more accurate peer addresses (#2123)
    • Enable cargo env vars when there is no .git during a build, fix tag lookup, add build profile, add modified flag (#2065)

    Testing

    • Stop generating V1-V3 transactions for non-finalized state proptests (#2159)
    • Added some logging to troubleshoot failing tests for redpallas signature (#2169)

    Fixed

    • Fix clippy::cmp_owned for (sapling, orchard)::keys with ConstantTimeEq (#2184)

    Documentation

    • Fixed some typos and links in the documentation(#2157, #2174, #2180)

    Security

    • Reject compact sizes greater than the protocol message limit (#2155)
    • Handle small numbers of initial peers better (#2154)
      • This security issue was reported by Equilibrium
    • Stop panicking on out-of-range version timestamps (#2148)
      • This security issue was reported by Equilibrium
    • Stop gossiping temporary inbound remote addresses to peers (#2120)
      • If Zebra was configured with a valid (not unspecified) listener address, it would gossip the ephemeral ports of inbound connections to its peers. This fix stops Zebra sending these useless addresses to its mainnet and testnet peers.
    • Avoid silently corrupting invalid times during serialization (#2149)
    • Do version checks first, then send a verack response (#2121)
    • Remove checkout credentials from GitHub actions (#2158)
    • Make CandidateSet timeout and initial fanout more reliable (#2172)
    • Remove CandidateSet state and add last seen time limit to validate_addrs (#2177)
    Source code(tar.gz)
    Source code(zip)
Owner
Zcash Foundation
Zcash Foundation
Rust implementation of Zcash protocol

The Parity Zcash client. Gitter Blog: Parity teams up with Zcash Foundation for Parity Zcash client Installing from source Installing the snap Running

Parity Technologies 183 Sep 8, 2022
Zcash - Internet Money

Zcash 4.3.0 What is Zcash? Zcash is an implementation of the "Zerocash" protocol. Based on Bitcoin's code, Zcash intends to offer a far higher standar

Zcash 4.7k Jan 4, 2023
An API and test-app that exposes zcash functionality for app consumption

Zingolib This repo provides both a library for zingoproxyclient and zingo-mobile, as well as an included cli application to interact with zcashd via l

ZingoLabs 5 Dec 15, 2022
Simple node and rust script to achieve an easy to use bridge between rust and node.js

Node-Rust Bridge Simple rust and node.js script to achieve a bridge between them. Only 1 bridge can be initialized per rust program. But node.js can h

Pure 5 Apr 30, 2023
A node and runtime configuration for polkadot node.

MANTA NODE This repo is a fresh FRAME-based Substrate node, forked from substrate-developer-hub/substrate-node-templte ?? It links to pallet-manta-dap

Manta Network 14 Apr 25, 2021
Sample lightning node command-line app built on top of Ldk Node (similar to ldk-sample).

ldk-node-sample Sample lightning node command-line app built on top of Ldk Node (similar to ldk-sample ). Installation git clone https://github.com/op

optout 3 Nov 21, 2023
Ecoball Node is the Official Rust implementation of the Ecoball protocol.

Ecoball Node is the Official Rust implementation of the Ecoball protocol. It is a fork of OpenEthereum - https://github.com/openethereum/

Ecoball Chain 2 Jun 9, 2022
Open source Rust implementation of the Witnet decentralized oracle protocol, including full node and wallet backend 👁️🦀

witnet-rust is an open source implementation of the Witnet Decentralized Oracle Network protocol written in Rust. Components witnet-rust implements ma

The Witnet Project 155 Nov 21, 2022
Clean implementation of TompHTTPs' Bare-server-node in rust!

bare-server-rust bare-server-rust is a fully compliant Rust implementation of TompHTTPs' Bare Server specifications. This is a server that will receiv

Nebula Developer Labs 15 May 27, 2023
Polkadot Node Implementation

Polkadot Implementation of a https://polkadot.network node in Rust based on the Substrate framework. NOTE: In 2018, we split our implementation of "Po

Parity Technologies 6.5k Jan 6, 2023
Statemint Node Implementation

Statemint Implementation of Statemint, a blockchain to support generic assets in the Polkadot and Kusama networks. Statemint will allow users to: Depl

Parity Technologies 72 Oct 30, 2022
Node implementation for aleph blockchain built with Substrate framework

This repository contains the Rust implementation of Aleph Zero blockchain node based on the Substrate framework. Aleph Zero is an open-source layer 1

Aleph Zero Foundation 55 Dec 15, 2022
This is a node implementation of Thippy, a Substrate parachain for smart contracts

Thippy ‒- A Smart Contracts Parachain This is a node implementation of Thippy, a Substrate parachain for smart contracts. Developing Smart Contracts f

Arthur·Thomas 15 Mar 16, 2022
Blazing fast Pedersen hash implementation for Node.JS

pedersen-fast Blazing fast Pedersen hash implementation for Node.JS Exposes starknet-crypto's implementation written in Rust as WASM package. Usage np

L2BEAT 7 Mar 10, 2023
⋰·⋰ Feeless is a Nano cryptocurrency node, wallet, tools, and Rust crate.

⋰·⋰ Feeless What is Feeless? Feeless is a Nano cryptocurrency node, wallet, tools, and Rust crate. This is not the official project for Nano, only an

null 127 Dec 5, 2022
WIP, POC of node js driver for pulsar backed by rust

WIP not ready at all, POC for node js rurt based pulsar driver pulsar-node-rust-client This project was bootstrapped by create-neon. Installing pulsar

Clever Cloud 6 Aug 10, 2022
Basilisk node - cross-chain liquidity protocol built on Substrate

Basilisk node Local Development Follow these steps to prepare a local Substrate development environment ??️ Simple Setup Install all the required depe

Galactic Council 52 Dec 27, 2022
A node API for the dprint TypeScript and JavaScript code formatter

dprint-node A node API for the dprint TypeScript and JavaScript code formatter. It's written in Rust for blazing fast speed. Usage Pass a file path an

Devon Govett 431 Dec 24, 2022
Substrate Node for Anmol Network

Anmol Substrate Node ?? ??️ ?? Anmol is the First Cross-Chain NFT Toolkit, on Polkadot. Introducing: Moulds NFT Breeding Multi-Chain NFT Migration ink

Anmol Network 12 Aug 28, 2022