# Changelog
All notable changes to this project are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org).
## [12.0.0] - 2026-09-23
### Breaking Changes
- `zebra-chain`'s `Transaction` type is now a newtype over `zcash_primitives::transaction::Transaction`, and appears in this crate's public API ([#10461](https://github.com/ZcashFoundation/zebra/pull/10461)).
- `Sigops::scripts` returns `Vec<Vec<u8>>` instead of an iterator. Transaction inputs and outputs are rebuilt from `zcash_primitives` on each call, so the scripts cannot borrow from the transaction ([#10461](https://github.com/ZcashFoundation/zebra/pull/10461)).
- Removed `CachedFfiTransaction::inputs()`. It is no longer needed inside Zebra, and with `Transaction` now wrapping `zcash_primitives` it could only return a copy of the inputs, which caused quadratic memory consumption when every input is verified concurrently ([#11353](https://github.com/ZcashFoundation/zebra/pull/11353)). Eventually it might be replaced by a method that returns a reference to the original `zcash_transparent` inputs ([#10461](https://github.com/ZcashFoundation/zebra/pull/10461)).
## [11.0.0] - 2026-08-10
### Breaking Changes
- Requires `zebra-chain` 12.0.0, whose transaction, transparent output, network upgrade, and error
types appear in this crate's public API.
### Changed
- Updated the following local packages: zebra-chain
## [10.1.2] - 2026-07-27
### Changed
- Updated `zcash_primitives` to 0.30. No other changes to this crate
([#11111](https://github.com/ZcashFoundation/zebra/pull/11111)).
- `zebra-chain` dependency bumped to `11.3.0`.
## [10.1.1] - 2026-07-17
### Changed
- `zebra-chain` dependency bumped to `11.2.0`.
## [10.1.0] - 2026-07-10
### Added
- The per-input P2SH sigop counter `p2sh_input_sigop_count` is now public, so callers
can apply per-input standardness limits (zcashd's `MAX_P2SH_SIGOPS`) in addition to
the existing transaction-wide `p2sh_sigop_count` total.
### Changed
- MSRV is now 1.88
## [10.0.0] - 2026-07-02
### Changed
- `zebra-chain` dependency bumped to `11.0.0`.
- Migrated to `zcash_primitives 0.29.0-pre.0`. No other changes to this crate.
## [9.0.0] - 2026-06-10
### Changed
- `zebra-chain` dependency bumped to `10.0.0`. No other changes to this crate.
## [8.0.0] - 2026-06-02
### Changed
- Update to `zebra-chain` 9.0.0 (NU6.2 support). No other changes to this crate.
## [7.0.1] - 2026-05-29
This release fixes one consensus security issue:
- The last P2SH input sigop count fix was incorrect. Properly fixed it to match zcashd
([GHSA-2prc-cj5x-4443](https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-2prc-cj5x-4443)).
The impact of the issue for crate users will depend on the particular usage;
if you use it as a building block for a consensus node, you should update.
## [7.0.0] - 2026-05-28
This release fixes one consensus security issue:
- Route P2SH input sigop counts through the C++ FFI (`legacy_sigop_count_script`)
instead of the pure-Rust `script::Code::sig_op_count` so the result matches
`zcashd`'s `CScript::GetSigOpCount(true)` exactly. Prevents a consensus split
on attacker-chosen redeem scripts
([GHSA-gf9r-m956-97qx](https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-gf9r-m956-97qx)).
The impact of the issue for crate users will depend on the particular usage;
if you use it as a building block for a consensus node, you should update.
### Changed
- `zebra-chain` dependency bumped to `8.0.0`. No direct public-API changes in
this crate beyond the consensus fix above, but consumers inherit
`zebra-chain`'s breaking changes (notably `transparent::Input::Coinbase.data`
changing from `CoinbaseData` to `Vec<u8>`).
## [6.0.1] - 2026-05-04
This release fixes one security issue:
- Reject V5 transparent inputs signed with `SIGHASH_SINGLE` (or
`SIGHASH_SINGLE|ANYONECANPAY`) when the input has no transparent output at the
same index
([GHSA-pvmv-cwg8-v6c8](https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-pvmv-cwg8-v6c8)).
Follow-up to
[GHSA-cwfq-rfcr-8hmp](https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-cwfq-rfcr-8hmp).
The impact of the issue for crate users will depend on the particular usage;
if you use it as a building block for a consensus node, you should update.
No public-API changes; internal-only fix.
## [6.0.0] - 2026-05-01
This release fixes an important security issue:
- [CVE-2026-XXXXX: Consensus Divergence in Transparent Sighash Hash-Type
Handling due to Stale
Buffer](https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-gq4h-3grw-2rhv)
The impact of the issue for crate users will depend on the particular usage;
if you use it as a building block for a consensus node, you should update.
### Added
- `CachedFfiTransaction::p2sh_sigops(&self) -> u32`.
- `p2sh_sigop_count(tx, spent_outputs) -> u32`.
### Changed
- Migrated to `zcash_primitives 0.27` (and the rest of the librustzcash 2026-04
release wave), which replaces the yanked `core2` dependency with `corez`.
- `Sigops::scripts` now returns `impl Iterator<Item = Vec<u8>>` instead of
`impl Iterator<Item = &[u8]>`. The change ripples through every `Sigops`
implementation:
- `impl Sigops for zebra_chain::transaction::Transaction`
- `impl Sigops for zebra_chain::transaction::UnminedTx`
- `impl Sigops for CachedFfiTransaction`
- `impl Sigops for zcash_primitives::transaction::Transaction`
## [5.0.1] - 2026-04-17
This release fixes an important security issue:
- [CVE-2026-XXXXX: Consensus Divergence in Transparent Sighash Hash-Type Handling](https://github.com/ZcashFoundation/zebra/security/advisories/GHSA-8m29-fpq5-89jj)
The impact of the issue for crate users will depend on the particular usage;
if you use it as a building block for a consensus node, you should update.
## [5.0.0] - 2026-03-12
- `zebra-chain` was bumped to `6.0.0`
## [4.0.0] - 2026-02-04
- `zebra-chain` was bumped to 5.0.0, requiring a major release
## [3.0.2] - 2026-01-21 - Yanked
This should have been a major release, see 4.0.0.
Dependencies updated.
## [3.0.1] - 2025-11-28
No API changes; internal dependencies updated.
## [3.0.0] - 2025-10-15
### Breaking changes
- Updated to the last version of `zcash_script` ([#9927](https://github.com/ZcashFoundation/zebra/pull/9927))
## [2.0.0] - 2025-08-07
### Breaking Changes
- Removed `legacy_sigop_count`; use the `Sigops` trait instead.
## [1.0.0] - 2025-07-11
First "stable" release. However, be advised that the API may still greatly
change so major version bumps can be common.