950 lines
46 KiB
Markdown
950 lines
46 KiB
Markdown
# Changelog
|
|
All notable changes to this library will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
and this library adheres to Rust's notion of
|
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [Unreleased]
|
|
|
|
## [0.15.0] - 2024-03-25
|
|
|
|
### Added
|
|
- `zcash_primitives::transaction::components::sapling::zip212_enforcement`
|
|
|
|
### Changed
|
|
- The following modules are now re-exported from the `zcash_protocol` crate.
|
|
Additional changes have also been made therein; refer to the `zcash_protocol`
|
|
changelog for details.
|
|
- `zcash_primitives::consensus` re-exports `zcash_protocol::consensus`.
|
|
- `zcash_primitives::constants` re-exports `zcash_protocol::constants`.
|
|
- `zcash_primitives::transaction::components::amount` re-exports
|
|
`zcash_protocol::value`. Many of the conversions to and from the
|
|
`Amount` and `NonNegativeAmount` value types now return
|
|
`Result<_, BalanceError>` instead of `Result<_, ()>`.
|
|
- `zcash_primitives::memo` re-exports `zcash_protocol::memo`.
|
|
- Update to `orchard` version `0.8.0`
|
|
|
|
### Removed
|
|
- `zcash_primitives::consensus::sapling_zip212_enforcement` instead use
|
|
`zcash_primitives::transaction::components::sapling::zip212_enforcement`.
|
|
- From `zcash_primitive::components::transaction`:
|
|
- `impl From<Amount> for u64`
|
|
- `impl TryFrom<sapling::value::NoteValue> for NonNegativeAmount`
|
|
- `impl From<NonNegativeAmount> for sapling::value::NoteValue`
|
|
- `impl TryFrom<orchard::ValueSum> for Amount`
|
|
- `impl From<NonNegativeAmount> for orchard::NoteValue`
|
|
- The `local_consensus` module and feature flag have been removed; use the module
|
|
from the `zcash_protocol` crate instead.
|
|
- `unstable-nu6` and `zfuture` feature flags (use `--cfg zcash_unstable=\"nu6\"`
|
|
or `--cfg zcash_unstable=\"zfuture\"` in `RUSTFLAGS` and `RUSTDOCFLAGS`
|
|
instead).
|
|
|
|
## [0.14.0] - 2024-03-01
|
|
### Added
|
|
- Dependency on `bellman 0.14`, `sapling-crypto 0.1`.
|
|
- `zcash_primitives::consensus::sapling_zip212_enforcement`
|
|
- `zcash_primitives::legacy::keys`:
|
|
- `AccountPrivKey::derive_secret_key`
|
|
- `NonHardenedChildIndex`
|
|
- `TransparentKeyScope`
|
|
- `zcash_primitives::local_consensus` module, behind the `local-consensus`
|
|
feature flag.
|
|
- The `LocalNetwork` struct provides a type for specifying network upgrade
|
|
activation heights for a local or specific configuration of a full node.
|
|
Developers can make use of this type when connecting to a Regtest node by
|
|
replicating the activation heights used on their node configuration.
|
|
- `impl zcash_primitives::consensus::Parameters for LocalNetwork` uses the
|
|
provided activation heights, and `zcash_primitives::constants::regtest::`
|
|
for everything else.
|
|
- `zcash_primitives::transaction`:
|
|
- `builder::{BuildConfig, FeeError, get_fee, BuildResult}`
|
|
- `builder::Error::SaplingBuilderNotAvailable`
|
|
- `components::sapling`:
|
|
- Sapling bundle component parsers, behind the `temporary-zcashd` feature
|
|
flag:
|
|
- `temporary_zcashd_read_spend_v4`
|
|
- `temporary_zcashd_read_output_v4`
|
|
- `temporary_zcashd_write_output_v4`
|
|
- `temporary_zcashd_read_v4_components`
|
|
- `temporary_zcashd_write_v4_components`
|
|
- `components::transparent`:
|
|
- `builder::TransparentInputInfo`
|
|
- `fees::StandardFeeRule`
|
|
- Constants in `fees::zip317`:
|
|
- `MARGINAL_FEE`
|
|
- `GRACE_ACTIONS`
|
|
- `P2PKH_STANDARD_INPUT_SIZE`
|
|
- `P2PKH_STANDARD_OUTPUT_SIZE`
|
|
- `impl From<TxId> for [u8; 32]`
|
|
- `zcash_primitives::zip32`:
|
|
- `ChildIndex::hardened`
|
|
- `ChildIndex::index`
|
|
- `ChainCode::new`
|
|
- `ChainCode::as_bytes`
|
|
- `impl From<AccountId> for ChildIndex`
|
|
- Additions related to `zcash_primitive::components::amount::Amount`
|
|
and `zcash_primitive::components::amount::NonNegativeAmount`:
|
|
- `impl TryFrom<Amount> for u64`
|
|
- `Amount::const_from_u64`
|
|
- `NonNegativeAmount::const_from_u64`
|
|
- `NonNegativeAmount::from_nonnegative_i64_le_bytes`
|
|
- `NonNegativeAmount::to_i64_le_bytes`
|
|
- `NonNegativeAmount::is_zero`
|
|
- `NonNegativeAmount::is_positive`
|
|
- `impl From<&NonNegativeAmount> for Amount`
|
|
- `impl From<NonNegativeAmount> for u64`
|
|
- `impl From<NonNegativeAmount> for zcash_primitives::sapling::value::NoteValue`
|
|
- `impl From<NonNegativeAmount> for orchard::::NoteValue`
|
|
- `impl Sum<NonNegativeAmount> for Option<NonNegativeAmount>`
|
|
- `impl<'a> Sum<&'a NonNegativeAmount> for Option<NonNegativeAmount>`
|
|
- `impl TryFrom<sapling::value::NoteValue> for NonNegativeAmount`
|
|
- `impl TryFrom<orchard::NoteValue> for NonNegativeAmount`
|
|
- `impl {Clone, PartialEq, Eq} for zcash_primitives::memo::Error`
|
|
|
|
### Changed
|
|
- Migrated to `orchard 0.7`.
|
|
- `zcash_primitives::legacy`:
|
|
- `TransparentAddress` variants have changed:
|
|
- `TransparentAddress::PublicKey` has been renamed to `PublicKeyHash`
|
|
- `TransparentAddress::Script` has been renamed to `ScriptHash`
|
|
- `keys::{derive_external_secret_key, derive_internal_secret_key}` arguments
|
|
changed from `u32` to `NonHardenedChildIndex`.
|
|
- `zcash_primitives::transaction`:
|
|
- `builder`:
|
|
- `Builder` now has a generic parameter for the type of progress notifier,
|
|
which needs to implement `sapling::builder::ProverProgress` in order to
|
|
build transactions.
|
|
- `Builder::new` now takes a `BuildConfig` argument instead of an optional
|
|
Orchard anchor. Anchors for both Sapling and Orchard are now required at
|
|
the time of builder construction.
|
|
- `Builder::{build, build_zfuture}` now take
|
|
`&impl SpendProver, &impl OutputProver` instead of `&impl TxProver`.
|
|
- `Builder::add_sapling_spend` no longer takes a `diversifier` argument as
|
|
the diversifier may be obtained from the note.
|
|
- `Builder::add_sapling_spend` now takes its `ExtendedSpendingKey` argument
|
|
by reference.
|
|
- `Builder::{add_sapling_spend, add_sapling_output}` now return `Error`s
|
|
instead of the underlying `sapling_crypto::builder::Error`s when returning
|
|
`Err`.
|
|
- `Builder::add_orchard_spend` now takes its `SpendingKey` argument by
|
|
reference.
|
|
- `Builder::with_progress_notifier` now consumes `self` and returns a
|
|
`Builder` typed on the provided channel.
|
|
- `Builder::get_fee` now returns a `builder::FeeError` instead of the bare
|
|
`FeeRule::Error` when returning `Err`.
|
|
- `Builder::build` now returns a `Result<BuildResult, ...>` instead of
|
|
using a tuple to return the constructed transaction and build metadata.
|
|
- `Error::OrchardAnchorNotAvailable` has been renamed to
|
|
`OrchardBuilderNotAvailable`.
|
|
- `build` and `build_zfuture` each now take an additional `rng` argument.
|
|
- `components`:
|
|
- `transparent::TxOut.value` now has type `NonNegativeAmount` instead of
|
|
`Amount`.
|
|
- `sapling::MapAuth` trait methods now take `&mut self` instead of `&self`.
|
|
- `transparent::fees` has been moved to
|
|
`zcash_primitives::transaction::fees::transparent`
|
|
- `transparent::builder::TransparentBuilder::{inputs, outputs}` have changed
|
|
to return `&[TransparentInputInfo]` and `&[TxOut]` respectively, in order
|
|
to avoid coupling to the fee traits.
|
|
- `Unauthorized::SaplingAuth` now has type `InProgress<Proven, Unsigned>`.
|
|
- `fees::FeeRule::fee_required` now takes an additional `orchard_action_count`
|
|
argument.
|
|
- The following methods now take `NonNegativeAmount` instead of `Amount`:
|
|
- `builder::Builder::{add_sapling_output, add_transparent_output}`
|
|
- `components::transparent::builder::TransparentBuilder::add_output`
|
|
- `fees::fixed::FeeRule::non_standard`
|
|
- `fees::zip317::FeeRule::non_standard`
|
|
- The following methods now return `NonNegativeAmount` instead of `Amount`:
|
|
- `components::amount::testing::arb_nonnegative_amount`
|
|
- `fees::transparent`:
|
|
- `InputView::value`
|
|
- `OutputView::value`
|
|
- `fees::FeeRule::{fee_required, fee_required_zfuture}`
|
|
- `fees::fixed::FeeRule::fixed_fee`
|
|
- `fees::zip317::FeeRule::marginal_fee`
|
|
- `sighash::TransparentAuthorizingContext::input_amounts`
|
|
- `zcash_primitives::zip32`:
|
|
- `ChildIndex` has been changed from an enum to an opaque struct, and no
|
|
longer supports non-hardened indices.
|
|
|
|
### Removed
|
|
- `zcash_primitives::constants`:
|
|
- All `const` values (moved to `sapling_crypto::constants`).
|
|
- `zcash_primitives::keys` module, as it was empty after the removal of:
|
|
- `PRF_EXPAND_PERSONALIZATION`
|
|
- `OutgoingViewingKey` (use `sapling_crypto::keys::OutgoingViewingKey`
|
|
instead).
|
|
- `prf_expand, prf_expand_vec` (use `zcash_spec::PrfExpand` instead).
|
|
- `zcash_primitives::sapling` module (use the `sapling-crypto` crate instead).
|
|
- `zcash_primitives::transaction::components::sapling`:
|
|
- The following types were removed from this module (moved into
|
|
`sapling_crypto::bundle`):
|
|
- `Bundle`
|
|
- `SpendDescription, SpendDescriptionV5`
|
|
- `OutputDescription, OutputDescriptionV5`
|
|
- `Authorization, Authorized`
|
|
- `GrothProofBytes`
|
|
- `CompactOutputDescription` (moved to `sapling_crypto::note_encryption`).
|
|
- `Unproven`
|
|
- `builder` (moved to `sapling_crypto::builder`).
|
|
- `builder::Unauthorized` (use `builder::InProgress` instead).
|
|
- `testing::{arb_bundle, arb_output_description}` (moved into
|
|
`sapling_crypto::bundle::testing`).
|
|
- `SpendDescription::<Unauthorized>::apply_signature`
|
|
- `Bundle::<Unauthorized>::apply_signatures` (use
|
|
`Bundle::<InProgress<Proven, Unsigned>>::apply_signatures` instead).
|
|
- The `fees` module was removed. Its contents were unused in this crate,
|
|
are now instead made available by `zcash_client_backend::fees::sapling`.
|
|
- `impl From<zcash_primitive::components::transaction::Amount> for u64`
|
|
- `zcash_primitives::zip32`:
|
|
- `sapling` module (moved to `sapling_crypto::zip32`).
|
|
- `ChildIndex::Hardened` (use `ChildIndex::hardened` instead).
|
|
- `ChildIndex::NonHardened`
|
|
- `sapling::ExtendedFullViewingKey::derive_child`
|
|
|
|
### Fixed
|
|
- `zcash_primitives::keys::ExpandedSpendingKey::from_spending_key` now panics if the
|
|
spending key expands to `ask = 0`. This has a negligible probability of occurring.
|
|
- `zcash_primitives::zip32::ExtendedSpendingKey::derive_child` now panics if the
|
|
child key has `ask = 0`. This has a negligible probability of occurring.
|
|
|
|
## [0.13.0] - 2023-09-25
|
|
### Added
|
|
- `zcash_primitives::consensus::BlockHeight::saturating_sub`
|
|
- `zcash_primitives::transaction::builder`:
|
|
- `Builder::add_orchard_spend`
|
|
- `Builder::add_orchard_output`
|
|
- `zcash_primitives::transaction::components::orchard::builder` module
|
|
- `impl HashSer for String` is provided under the `test-dependencies` feature
|
|
flag. This is a test-only impl; the identity leaf value is `_` and the combining
|
|
operation is concatenation.
|
|
- `zcash_primitives::transaction::components::amount::NonNegativeAmount::ZERO`
|
|
- Additional trait implementations for `NonNegativeAmount`:
|
|
- `TryFrom<Amount> for NonNegativeAmount`
|
|
- `Add<NonNegativeAmount> for NonNegativeAmount`
|
|
- `Add<NonNegativeAmount> for Option<NonNegativeAmount>`
|
|
- `Sub<NonNegativeAmount> for NonNegativeAmount`
|
|
- `Sub<NonNegativeAmount> for Option<NonNegativeAmount>`
|
|
- `Mul<usize> for NonNegativeAmount`
|
|
- `zcash_primitives::block::BlockHash::try_from_slice`
|
|
|
|
### Changed
|
|
- Migrated to `incrementalmerkletree 0.5`, `orchard 0.6`.
|
|
- `zcash_primitives::transaction`:
|
|
- `builder::Builder::{new, new_with_rng}` now take an optional `orchard_anchor`
|
|
argument which must be provided in order to enable Orchard spends and recipients.
|
|
- All `builder::Builder` methods now require the bound `R: CryptoRng` on
|
|
`Builder<'a, P, R>`. A non-`CryptoRng` randomness source is still accepted
|
|
by `builder::Builder::test_only_new_with_rng`, which **MUST NOT** be used in
|
|
production.
|
|
- `builder::Error` has several additional variants for Orchard-related errors.
|
|
- `fees::FeeRule::fee_required` now takes an additional argument,
|
|
`orchard_action_count`
|
|
- `Unauthorized`'s associated type `OrchardAuth` is now
|
|
`orchard::builder::InProgress<orchard::builder::Unproven, orchard::builder::Unauthorized>`
|
|
instead of `zcash_primitives::transaction::components::orchard::Unauthorized`
|
|
- `zcash_primitives::consensus::NetworkUpgrade` now implements `PartialEq`, `Eq`
|
|
- `zcash_primitives::legacy::Script` now has a custom `Debug` implementation that
|
|
renders script details in a much more legible fashion.
|
|
- `zcash_primitives::sapling::redjubjub::Signature` now has a custom `Debug`
|
|
implementation that renders details in a much more legible fashion.
|
|
- `zcash_primitives::sapling::tree::Node` now has a custom `Debug`
|
|
implementation that renders details in a much more legible fashion.
|
|
|
|
### Removed
|
|
- `impl {PartialEq, Eq} for transaction::builder::Error`
|
|
(use `assert_matches!` where error comparisons are required)
|
|
- `zcash_primitives::transaction::components::orchard::Unauthorized`
|
|
- `zcash_primitives::transaction::components::amount::DEFAULT_FEE` was
|
|
deprecated in 0.12.0 and has now been removed.
|
|
|
|
## [0.12.0] - 2023-06-06
|
|
### Added
|
|
- `zcash_primitives::transaction`:
|
|
- `Transaction::temporary_zcashd_read_v5_sapling`
|
|
- `Transaction::temporary_zcashd_write_v5_sapling`
|
|
- Implementations of `memuse::DynamicUsage` for the following types:
|
|
- `zcash_primitives::transaction::components::sapling`:
|
|
- `Bundle<Authorized>`
|
|
- `SpendDescription<Authorized>`
|
|
|
|
### Changed
|
|
- MSRV is now 1.65.0.
|
|
- Bumped dependencies to `secp256k1 0.26`, `hdwallet 0.4`, `incrementalmerkletree 0.4`
|
|
`zcash_note_encryption 0.4`, `orchard 0.5`
|
|
|
|
### Removed
|
|
- `merkle_tree::Hashable` has been removed and its uses have been replaced by
|
|
`incrementalmerkletree::Hashable` and `merkle_tree::HashSer`.
|
|
- The `Hashable` bound on the `Node` parameter to the `IncrementalWitness`
|
|
type has been removed.
|
|
- `sapling::SAPLING_COMMITMENT_TREE_DEPTH_U8` and `sapling::SAPLING_COMMITMENT_TREE_DEPTH`
|
|
have been removed; use `sapling::NOTE_COMMITMENT_TREE_DEPTH` instead.
|
|
- `merkle_tree::{CommitmentTree, IncrementalWitness, MerklePath}` have been removed in
|
|
favor of versions of these types that are now provided by the
|
|
`incrementalmerkletree` crate. The replacement types now use const generic
|
|
parameters for enforcing the note commitment tree depth. Serialization
|
|
methods for these types that do not exist for the `incrementalmerkletree`
|
|
replacement types have been replaced by new methods in the `merkle_tree` module.
|
|
- `merkle_tree::incremental::write_auth_fragment_v1` has been removed without replacement.
|
|
- The `merkle_tree::incremental` module has been removed; its former contents
|
|
were either moved to the `merkle_tree` module or were `zcashd`-specific
|
|
serialization methods which have been removed entirely and moved into the
|
|
[zcashd](https://github.com/zcash/zcash) repository.
|
|
- The dependency on the `bridgetree` crate has been removed from
|
|
`zcash_primitives` and the following zcashd-specific serialization methods
|
|
have been moved to the [zcashd](https://github.com/zcash/zcash) repository:
|
|
- `read_auth_fragment_v1`
|
|
- `read_bridge_v1`
|
|
- `read_bridge_v2`
|
|
- `write_bridge_v2`
|
|
- `write_bridge`
|
|
- `read_checkpoint_v1`
|
|
- `read_checkpoint_v2`
|
|
- `write_checkpoint_v2`
|
|
- `read_tree`
|
|
- `write_tree`
|
|
- `merkle_tree::{SER_V1, SER_V2}` have been removed as they are now unused.
|
|
|
|
### Moved
|
|
- The following constants and methods have been moved from the
|
|
`merkle_tree::incremental` module into the `merkle_tree` module to
|
|
consolidate the serialization code for commitment tree frontiers:
|
|
- `write_usize_leu64`
|
|
- `read_leu64_usize`
|
|
- `write_position`
|
|
- `read_position`
|
|
- `write_address`
|
|
- `read_address`
|
|
- `read_frontier_v0`
|
|
- `write_nonempty_frontier`
|
|
- `read_nonempty_frontier_v1`
|
|
- `write_frontier_v1`
|
|
- `read_frontier_v1`
|
|
|
|
### Added
|
|
- `merkle_tree::incremental::{read_address, write_address}`
|
|
- `merkle_tree::incremental::read_bridge_v2`
|
|
- `merkle_tree::write_commitment_tree` replaces `merkle_tree::CommitmentTree::write`
|
|
- `merkle_tree::read_commitment_tree` replaces `merkle_tree::CommitmentTree::read`
|
|
- `merkle_tree::write_incremental_witness` replaces `merkle_tree::IncrementalWitness::write`
|
|
- `merkle_tree::read_incremental_witness` replaces `merkle_tree::IncrementalWitness::read`
|
|
- `merkle_tree::merkle_path_from_slice` replaces `merkle_tree::MerklePath::from_slice`
|
|
- `sapling::{CommitmentTree, IncrementalWitness, MerklePath, NOTE_COMMITMENT_TREE_DEPTH}`
|
|
- `transaction::fees::zip317::MINIMUM_FEE`, reflecting the minimum possible
|
|
[ZIP 317](https://zips.z.cash/zip-0317) conventional fee.
|
|
- `transaction::components::amount::Amount::const_from_i64`, intended for constructing
|
|
a constant `Amount`.
|
|
|
|
### Changed
|
|
- The bounds on the `H` parameter to the following methods have changed:
|
|
- `merkle_tree::incremental::read_frontier_v0`
|
|
- `merkle_tree::incremental::read_auth_fragment_v1`
|
|
- The depth of the `merkle_tree::{CommitmentTree, IncrementalWitness, and MerklePath}`
|
|
data types are now statically constrained using const generic type parameters.
|
|
- `transaction::fees::fixed::FeeRule::standard()` now uses the ZIP 317 minimum fee
|
|
(10000 zatoshis rather than 1000 zatoshis) as the fixed fee. To be compliant with
|
|
ZIP 317, use `transaction::fees::zip317::FeeRule::standard()` instead.
|
|
|
|
### Deprecated
|
|
- `transaction::components::amount::DEFAULT_FEE` has been deprecated. Depending on
|
|
context, you may want to use `transaction::fees::zip317::MINIMUM_FEE`, or calculate
|
|
the ZIP 317 conventional fee using `transaction::fees::zip317::FeeRule` instead.
|
|
- `transaction::fees::fixed::FeeRule::standard()` has been deprecated.
|
|
Use either `transaction::fees::zip317::FeeRule::standard()` or
|
|
`transaction::fees::fixed::FeeRule::non_standard`.
|
|
|
|
## [0.11.0] - 2023-04-15
|
|
### Added
|
|
- `zcash_primitives::zip32::fingerprint` module, containing types for deriving
|
|
ZIP 32 Seed Fingerprints.
|
|
|
|
### Changed
|
|
- Bumped dependencies to `bls12_381 0.8`, `ff 0.13`, `group 0.13`,
|
|
`jubjub 0.10`, `orchard 0.4`, `sha2 0.10`, `bip0039 0.10`,
|
|
`zcash_note_encryption 0.3`.
|
|
|
|
## [0.10.2] - 2023-03-16
|
|
### Added
|
|
- `zcash_primitives::sapling::note`:
|
|
- `NoteCommitment::temporary_zcashd_derive`
|
|
- A new feature flag, `multicore`, has been added and is enabled by default.
|
|
This allows users to selectively disable multicore support for Orchard proof
|
|
creation by setting `default_features = false` on their `zcash_primitives`
|
|
dependency, such as is needed to enable `wasm32-wasi` compilation.
|
|
|
|
## [0.10.1] - 2023-03-08
|
|
### Added
|
|
- Sapling bundle component constructors, behind the `temporary-zcashd` feature
|
|
flag. These temporarily re-expose the ability to construct invalid Sapling
|
|
bundles (that was removed in 0.10.0), and will be removed in a future release:
|
|
- `zcash_primitives::transaction::components::sapling`:
|
|
- `Bundle::temporary_zcashd_from_parts`
|
|
- `SpendDescription::temporary_zcashd_from_parts`
|
|
- `OutputDescription::temporary_zcashd_from_parts`
|
|
|
|
## [0.10.0] - 2023-02-01
|
|
### Added
|
|
- `zcash_primitives::sapling`:
|
|
- `keys::DiversifiedTransmissionKey`
|
|
- `keys::{EphemeralSecretKey, EphemeralPublicKey, SharedSecret}`
|
|
- `keys::{PreparedIncomingViewingKey, PreparedEphemeralPublicKey}`
|
|
(re-exported from `note_encryption`).
|
|
- `note`, a module containing types related to Sapling notes. The existing
|
|
`Note` and `Rseed` types are re-exported here, and new types are added.
|
|
- `Node::from_cmu`
|
|
- `value`, containing types for handling Sapling note values and value
|
|
commitments.
|
|
- `Note::from_parts`
|
|
- `Note::{recipient, value, rseed}` getter methods.
|
|
- `impl Eq for Note`
|
|
- `impl Copy for PaymentAddress`
|
|
|
|
### Changed
|
|
- MSRV is now 1.60.0.
|
|
- `zcash_primitives::transaction::components::sapling::builder`:
|
|
- `SaplingBuilder::add_output` now takes a
|
|
`zcash_primitives::sapling::value::NoteValue`.
|
|
- `zcash_primitives::sapling`:
|
|
- `PaymentAddress::from_parts` now rejects invalid diversifiers.
|
|
- `PaymentAddress::create_note` is now infallible.
|
|
- `DiversifiedTransmissionKey` is now used instead of `jubjub::SubgroupPoint`
|
|
in the following places:
|
|
- `PaymentAddress::from_parts`
|
|
- `PaymentAddress::pk_d`
|
|
- `note_encryption::SaplingDomain::DiversifiedTransmissionKey`
|
|
- `EphemeralSecretKey` is now used instead of `jubjub::Scalar` in the
|
|
following places:
|
|
- `Note::generate_or_derive_esk`
|
|
- `note_encryption::SaplingDomain::EphemeralSecretKey`
|
|
- `note_encryption::SaplingDomain::EphemeralPublicKey` is now
|
|
`EphemeralPublicKey` instead of `jubjub::ExtendedPoint`.
|
|
- `note_encryption::SaplingDomain::SharedSecret` is now `SharedSecret` instead
|
|
of `jubjub::SubgroupPoint`.
|
|
- Note commitments now use
|
|
`zcash_primitives::sapling::note::ExtractedNoteCommitment` instead of
|
|
`bls12_381::Scalar` in the following places:
|
|
- `zcash_primitives::sapling`:
|
|
- `Note::cmu`
|
|
- `zcash_primitives::sapling::note_encryption`:
|
|
- `SaplingDomain::ExtractedCommitment`
|
|
- `zcash_primitives::transaction::components::sapling`:
|
|
- `OutputDescription::cmu`
|
|
- The `cmu` field of `CompactOutputDescription`.
|
|
- Value commitments now use `zcash_primitives::sapling::value::ValueCommitment`
|
|
instead of `jubjub::ExtendedPoint` in the following places:
|
|
- `zcash_primitives::sapling::note_encryption`:
|
|
- `prf_ock`
|
|
- `SaplingDomain::ValueCommitment`
|
|
- `zcash_primitives::sapling::prover`:
|
|
- `TxProver::{spend_proof, output_proof}` return type.
|
|
- `zcash_primitives::transaction::components`:
|
|
- `SpendDescription::cv`
|
|
- `OutputDescription::cv`
|
|
- `zcash_primitives::transaction::components`:
|
|
- `sapling::{Bundle, SpendDescription, OutputDescription}` have had their
|
|
fields replaced by getter methods.
|
|
- The associated type `sapling::Authorization::Proof` has been replaced by
|
|
`Authorization::{SpendProof, OutputProof}`.
|
|
- `sapling::MapAuth::map_proof` has been replaced by
|
|
`MapAuth::{map_spend_proof, map_output_proof}`.
|
|
|
|
### Removed
|
|
- `zcash_primitives::sapling`:
|
|
- The fields of `Note` are now private (use the new getter methods instead).
|
|
- `Note::uncommitted` (use `Node::empty_leaf` instead).
|
|
- `Note::derive_esk` (use `SaplingDomain::derive_esk` instead).
|
|
- `Note::commitment` (use `Node::from_cmu` instead).
|
|
- `PaymentAddress::g_d`
|
|
- `NoteValue` (use `zcash_primitives::sapling::value::NoteValue` instead).
|
|
- `ValueCommitment` (use `zcash_primitives::sapling::value::ValueCommitment`
|
|
or `zcash_proofs::circuit::sapling::ValueCommitmentPreimage` instead).
|
|
- `note_encryption::sapling_ka_agree`
|
|
- `testing::{arb_note_value, arb_positive_note_value}` (use the methods in
|
|
`zcash_primitives::sapling::value::testing` instead).
|
|
- `zcash_primitives::transaction::components`:
|
|
- The fields of `sapling::{SpendDescriptionV5, OutputDescriptionV5}` (they are
|
|
now opaque types; use `sapling::{SpendDescription, OutputDescription}`
|
|
instead).
|
|
- `sapling::read_point`
|
|
|
|
## [0.9.1] - 2022-12-06
|
|
### Fixed
|
|
- `zcash_primitives::transaction::builder`:
|
|
- `Builder::build` was calling `FeeRule::fee_required` with the number of
|
|
Sapling outputs that have been added to the builder. It now instead provides
|
|
the number of outputs that will be in the final Sapling bundle, including
|
|
any padding.
|
|
|
|
## [0.9.0] - 2022-11-12
|
|
### Added
|
|
- Added to `zcash_primitives::transaction::builder`:
|
|
- `Error::{InsufficientFunds, ChangeRequired, Balance, Fee}`
|
|
- `Builder` state accessor methods:
|
|
- `Builder::{params, target_height}`
|
|
- `Builder::{transparent_inputs, transparent_outputs}`
|
|
- `Builder::{sapling_inputs, sapling_outputs}`
|
|
- `zcash_primitives::transaction::fees`, a new module containing abstractions
|
|
and types related to fee calculations.
|
|
- `FeeRule`, a trait that describes how to compute the fee required for a
|
|
transaction given inputs and outputs to the transaction.
|
|
- `fixed`, a module containing an implementation of the old fixed fee rule.
|
|
- `zip317`, a module containing an implementation of the ZIP 317 fee rules.
|
|
- Added to `zcash_primitives::transaction::components`:
|
|
- `amount::NonNegativeAmount`
|
|
- Added to the `orchard` module:
|
|
- `impl MapAuth<orchard::bundle::Authorized, orchard::bundle::Authorized> for ()`
|
|
(the identity map).
|
|
- Added to the `sapling` module:
|
|
- `impl MapAuth<Authorized, Authorized> for ()` (the identity map).
|
|
- `builder::SaplingBuilder::{inputs, outputs}`: accessors for Sapling
|
|
builder state.
|
|
- `fees`, a module with Sapling-specific fee traits.
|
|
- Added to the `transparent` module:
|
|
- `impl {PartialOrd, Ord} for OutPoint`
|
|
- `builder::TransparentBuilder::{inputs, outputs}`: accessors for
|
|
transparent builder state.
|
|
- `fees`, a module with transparent-specific fee traits.
|
|
- Added to `zcash_primitives::sapling`:
|
|
- `Note::commitment`
|
|
- `impl Eq for PaymentAddress`
|
|
- Added to `zcash_primitives::zip32`:
|
|
- `impl TryFrom<DiversifierIndex> for u32`
|
|
- `sapling::DiversifiableFullViewingKey::{diversified_address, diversified_change_address}`
|
|
|
|
### Changed
|
|
- `zcash_primitives::transaction::builder`:
|
|
- `Builder::build` now takes a `FeeRule` argument which is used to compute the
|
|
fee for the transaction as part of the build process.
|
|
- `Builder::value_balance` now returns `Result<Amount, BalanceError>` instead
|
|
of `Option<Amount>`.
|
|
- `Builder::{new, new_with_rng}` no longer fixes the fee for transactions to
|
|
0.00001 ZEC; the builder instead computes the fee using a `FeeRule`
|
|
implementation at build time.
|
|
- `Error` now is parameterized by the types that can now be produced by fee
|
|
calculation.
|
|
- `zcash_primitives::transaction::components::tze::builder::Builder::value_balance` now
|
|
returns `Result<Amount, BalanceError>` instead of `Option<Amount>`.
|
|
|
|
### Deprecated
|
|
- `zcash_primitives::zip32::sapling::to_extended_full_viewing_key` (use
|
|
`to_diversifiable_full_viewing_key` instead).
|
|
|
|
### Removed
|
|
- Removed from `zcash_primitives::transaction::builder`:
|
|
- `Builder::{new_with_fee, new_with_rng_and_fee`} (use `Builder::{new, new_with_rng}`
|
|
instead along with a `FeeRule` implementation passed to `Builder::build`.)
|
|
- `Builder::send_change_to` (change outputs must be added to the builder by
|
|
the caller, just like any other output).
|
|
- `Error::ChangeIsNegative`
|
|
- `Error::NoChangeAddress`
|
|
- `Error::InvalidAmount` (replaced by `Error::BalanceError`).
|
|
- Removed from `zcash_primitives::transaction::components::sapling::builder`:
|
|
- `SaplingBuilder::get_candidate_change_address` (change outputs must now be
|
|
added by the caller).
|
|
- Removed from `zcash_primitives::zip32::sapling`:
|
|
- `impl From<&ExtendedSpendingKey> for ExtendedFullViewingKey` (use
|
|
`ExtendedSpendingKey::to_diversifiable_full_viewing_key` instead).
|
|
- `zcash_primitives::sapling::Node::new` (use `Node::from_scalar` or preferably
|
|
`Note::commitment` instead).
|
|
|
|
## [0.8.1] - 2022-10-19
|
|
### Added
|
|
- `zcash_primitives::legacy`:
|
|
- `impl {Copy, Eq, Ord} for TransparentAddress`
|
|
- `keys::AccountPrivKey::{to_bytes, from_bytes}`
|
|
- `zcash_primitives::sapling::NullifierDerivingKey`
|
|
- Added in `zcash_primitives::sapling::keys`
|
|
- `DecodingError`
|
|
- `Scope`
|
|
- `ExpandedSpendingKey::from_bytes`
|
|
- `ExtendedSpendingKey::{from_bytes, to_bytes}`
|
|
- `zcash_primitives::sapling::note_encryption`:
|
|
- `PreparedIncomingViewingKey`
|
|
- `PreparedEphemeralPublicKey`
|
|
- Added in `zcash_primitives::zip32`
|
|
- `ChainCode::as_bytes`
|
|
- `DiversifierIndex::{as_bytes}`
|
|
- Implementations of `From<u32>` and `From<u64>` for `DiversifierIndex`
|
|
- `zcash_primitives::zip32::sapling` has been added and now contains
|
|
all of the Sapling zip32 key types that were previously located in
|
|
`zcash_primitives::zip32` directly. The base `zip32` module reexports
|
|
the moved types for backwards compatibility.
|
|
- `DiversifierKey::{from_bytes, as_bytes}`
|
|
- `ExtendedSpendingKey::{from_bytes, to_bytes}`
|
|
- `zcash_primitives::transaction::Builder` constructors:
|
|
- `Builder::new_with_fee`
|
|
- `Builder::new_with_rng_and_fee`
|
|
- `zcash_primitives::transaction::TransactionData::fee_paid`
|
|
- `zcash_primitives::transaction::components::amount::BalanceError`
|
|
- Added in `zcash_primitives::transaction::components::sprout`
|
|
- `Bundle::value_balance`
|
|
- `JSDescription::net_value`
|
|
- Added in `zcash_primitives::transaction::components::transparent`
|
|
- `Bundle::value_balance`
|
|
- `TxOut::recipient_address`
|
|
- Implementations of `memuse::DynamicUsage` for the following types:
|
|
- `zcash_primitives::block::BlockHash`
|
|
- `zcash_primitives::consensus`:
|
|
- `BlockHeight`
|
|
- `MainNetwork`, `TestNetwork`, `Network`
|
|
- `NetworkUpgrade`, `BranchId`
|
|
- `zcash_primitives::sapling`:
|
|
- `keys::Scope`
|
|
- `note_encryption::SaplingDomain`
|
|
- `zcash_primitives::transaction`:
|
|
- `TxId`
|
|
- `components::sapling::CompactOutputDescription`
|
|
- `components::sapling::{OutputDescription, OutputDescriptionV5}`
|
|
- `zcash_primitives::zip32::AccountId`
|
|
|
|
### Changed
|
|
- Migrated to `group 0.13`, `orchard 0.3`, `zcash_address 0.2`, `zcash_encoding 0.2`.
|
|
- `zcash_primitives::sapling::ViewingKey` now stores `nk` as a
|
|
`NullifierDerivingKey` instead of as a bare `jubjub::SubgroupPoint`.
|
|
- The signature of `zcash_primitives::sapling::Note::nf` has changed to
|
|
take just a `NullifierDerivingKey` (the only capability it actually required)
|
|
rather than the full `ViewingKey` as its first argument.
|
|
- Made the internals of `zip32::DiversifierKey` private; use `from_bytes` and
|
|
`as_bytes` on this type instead.
|
|
- `zcash_primitives::sapling::note_encryption` APIs now expose precomputations
|
|
explicitly (where previously they were performed internally), to enable users
|
|
to avoid recomputing incoming viewing key precomputations. Users now need to
|
|
call `PreparedIncomingViewingKey::new` to convert their `SaplingIvk`s into
|
|
their precomputed forms, and can do so wherever it makes sense in their stack.
|
|
- `SaplingDomain::IncomingViewingKey` is now `PreparedIncomingViewingKey`
|
|
instead of `SaplingIvk`.
|
|
- `try_sapling_note_decryption` and `try_sapling_compact_note_decryption` now
|
|
take `&PreparedIncomingViewingKey` instead of `&SaplingIvk`.
|
|
|
|
### Removed
|
|
- `zcash_primitives::legacy::Script::address` This method was not generally
|
|
safe to use on arbitrary scripts, only on script_pubkey values. Its
|
|
functionality is now available via
|
|
`zcash_primitives::transaction::components::transparent::TxOut::recipient_address`
|
|
|
|
## [0.8.0] - 2022-10-19
|
|
This release was yanked because it depended on the wrong versions of `zcash_address`
|
|
and `zcash_encoding`.
|
|
|
|
## [0.7.0] - 2022-06-24
|
|
### Changed
|
|
- Bumped dependencies to `equihash 0.2`, `orchard 0.2`.
|
|
- `zcash_primitives::consensus`:
|
|
- `MainNetwork::activation_height` now returns the activation height for
|
|
`NetworkUpgrade::Nu5`.
|
|
|
|
## [0.6.0] - 2022-05-11
|
|
### Added
|
|
- `zcash_primitives::sapling::redjubjub::PublicKey::verify_with_zip216`, for
|
|
controlling how RedJubjub signatures are validated. `PublicKey::verify` has
|
|
been altered to always use post-ZIP 216 validation rules.
|
|
- `zcash_primitives::transaction::Builder::with_progress_notifier`, for setting
|
|
a notification channel on which transaction build progress updates will be
|
|
sent.
|
|
- `zcash_primitives::transaction::Txid::{read, write, from_bytes}`
|
|
- `zcash_primitives::sapling::NoteValue` a typesafe wrapper for Sapling note values.
|
|
- `zcash_primitives::consensus::BranchId::{height_range, height_bounds}` functions
|
|
to provide range values for branch active heights.
|
|
- `zcash_primitives::consensus::NetworkUpgrade::Nu5` value representing the Nu5 upgrade.
|
|
- `zcash_primitives::consensus::BranchId::Nu5` value representing the Nu5 consensus branch.
|
|
- New modules under `zcash_primitives::transaction::components` for building parts of
|
|
transactions:
|
|
- `sapling::builder` for Sapling transaction components.
|
|
- `transparent::builder` for transparent transaction components.
|
|
- `tze::builder` for TZE transaction components.
|
|
- `orchard` parsing and serialization for Orchard transaction components.
|
|
- `zcash_primitives::transaction::Authorization` a trait representing a type-level
|
|
record of authorization types that correspond to signatures, witnesses, and
|
|
proofs for each Zcash sub-protocol (transparent, Sprout, Sapling, TZE, and
|
|
Orchard). This type makes it possible to encode a type-safe state machine
|
|
for the application of authorizing data to a transaction; implementations of
|
|
this trait represent different states of the authorization process.
|
|
- New bundle types under the `zcash_primitives::transaction` submodules, one for
|
|
each Zcash sub-protocol. These are now used instead of bare fields
|
|
within the `TransactionData` type.
|
|
- `components::sapling::Bundle` bundle of
|
|
Sapling transaction elements. This new struct is parameterized by a
|
|
type bounded on a newly added `sapling::Authorization` trait which
|
|
is used to enable static reasoning about the state of Sapling proofs and
|
|
authorizing data, as described above.
|
|
- `components::transparent::Bundle` bundle of
|
|
transparent transaction elements. This new struct is parameterized by a
|
|
type bounded on a newly added `transparent::Authorization` trait which
|
|
is used to enable static reasoning about the state of transparent witness
|
|
data, as described above.
|
|
- `components::tze::Bundle` bundle of TZE
|
|
transaction elements. This new struct is parameterized by a
|
|
type bounded on a newly added `tze::Authorization` trait which
|
|
is used to enable static reasoning about the state of TZE witness
|
|
data, as described above.
|
|
- `zcash_primitives::serialize` has been factored out as a new `zcash_encoding`
|
|
crate, which can be found in the `components` directory.
|
|
- `zcash_primitives::transaction::components::Amount` now implements
|
|
`memuse::DynamicUsage`, to enable `orchard::Bundle<_, Amount>::dynamic_usage`.
|
|
- `zcash_primitives::zip32::diversifier` has been renamed to `find_sapling_diversifier`
|
|
and `sapling_diversifier` has been added. `find_sapling_diversifier` searches the
|
|
diversifier index space, whereas `sapling_diversifier` just attempts to use the
|
|
provided diversifier index and returns `None` if it does not produce a valid
|
|
diversifier.
|
|
- `zcash_primitives::zip32::DiversifierKey::diversifier` has been renamed to
|
|
`find_diversifier` and the `diversifier` method has new semantics.
|
|
`find_diversifier` searches the diversifier index space to find a diversifier
|
|
index which produces a valid diversifier, whereas `diversifier` just attempts
|
|
to use the provided diversifier index and returns `None` if it does not
|
|
produce a valid diversifier.
|
|
- `zcash_primitives::zip32::ExtendedFullViewingKey::address` has been renamed
|
|
to `find_address` and the `address` method has new semantics. `find_address`
|
|
searches the diversifier index space until it obtains a valid diversifier,
|
|
and returns the address corresponding to that diversifier, whereas `address`
|
|
just attempts to create an address corresponding to the diversifier derived
|
|
from the provided diversifier index and returns `None` if the provided index
|
|
does not produce a valid diversifier.
|
|
- `zcash_primitives::zip32::ExtendedSpendingKey.derive_internal` has been
|
|
added to facilitate the derivation of an internal (change) spending key.
|
|
This spending key can be used to spend change sent to an internal address
|
|
corresponding to the associated full viewing key as specified in
|
|
[ZIP 316](https://zips.z.cash/zip-0316#encoding-of-unified-full-incoming-viewing-keys)..
|
|
- `zcash_primitives::zip32::ExtendedFullViewingKey.derive_internal` has been
|
|
added to facilitate the derivation of an internal (change) spending key.
|
|
This spending key can be used to spend change sent to an internal address
|
|
corresponding to the associated full viewing key as specified in
|
|
[ZIP 32](https://zips.z.cash/zip-0032#deriving-a-sapling-internal-spending-key).
|
|
- `zcash_primitives::zip32::sapling_derive_internal_fvk` provides the
|
|
internal implementation of `ExtendedFullViewingKey.derive_internal` but does
|
|
not require a complete extended full viewing key, just the full viewing key
|
|
and the diversifier key. In the future, this function will likely be
|
|
refactored to become a member function of a new `DiversifiableFullViewingKey`
|
|
type, which represents the ability to derive IVKs, OVKs, and addresses, but
|
|
not child viewing keys.
|
|
- `zcash_primitives::sapling::keys::DiversifiableFullViewingKey::change_address`
|
|
has been added as a convenience method for obtaining the change address
|
|
at the default diversifier. This address **MUST NOT** be encoded and exposed
|
|
to users. User interfaces should instead mark these notes as "change notes" or
|
|
"internal wallet operations".
|
|
- A new module `zcash_primitives::legacy::keys` has been added under the
|
|
`transparent-inputs` feature flag to support types related to supporting
|
|
transparent components of unified addresses and derivation of OVKs for
|
|
shielding funds from the transparent pool.
|
|
- A `zcash_primitives::transaction::components::amount::Amount::sum`
|
|
convenience method has been added to facilitate bounds-checked summation of
|
|
account values.
|
|
- The `zcash_primitives::zip32::AccountId`, a type-safe wrapper for ZIP 32
|
|
account indices.
|
|
- In `zcash_primitives::transaction::components::amount`:
|
|
- `impl Sum<&Amount> for Option<Amount>`
|
|
|
|
### Changed
|
|
- MSRV is now 1.56.1.
|
|
- Bumped dependencies to `ff 0.12`, `group 0.12`, `bls12_381 0.7`, `jubjub 0.9`,
|
|
`bitvec 1`.
|
|
- The following modules and helpers have been moved into
|
|
`zcash_primitives::sapling`:
|
|
- `zcash_primitives::group_hash`
|
|
- `zcash_primitives::keys`
|
|
- `zcash_primitives::sapling::keys::{prf_expand, prf_expand_vec, OutgoingViewingKey}`
|
|
have all been moved into to the this module to reflect the fact that they
|
|
are used outside of the Sapling protocol.
|
|
- `zcash_primitives::pedersen_hash`
|
|
- `zcash_primitives::primitives::*` (moved into `zcash_primitives::sapling`)
|
|
- `zcash_primitives::prover`
|
|
- `zcash_primitives::redjubjub`
|
|
- `zcash_primitives::util::{hash_to_scalar, generate_random_rseed}`
|
|
- Renamed `zcash_primitives::transaction::components::JSDescription` to
|
|
`JsDescription` (matching Rust naming conventions).
|
|
- `zcash_primitives::transaction::TxId` contents is now private.
|
|
- Renamed `zcash_primitives::transaction::components::tze::hash` to
|
|
`zcash_primitives::transaction::components::tze::txid`
|
|
- `zcash_primitives::transaction::components::tze::TzeOutPoint` constructor
|
|
now taxes a TxId rather than a raw byte array.
|
|
- `zcash_primitives::transaction::components::Amount` addition, subtraction,
|
|
and summation now return `Option` rather than panicing on overflow.
|
|
- `zcash_primitives::transaction::builder`:
|
|
- `Error` has been modified to wrap the error types produced by its child
|
|
builders.
|
|
- `Builder::build` no longer takes a consensus branch ID parameter. The
|
|
builder now selects the correct consensus branch ID for the given target
|
|
height.
|
|
- The `zcash_primitives::transaction::TransactionData` struct has been modified
|
|
such that it now contains common header information, and then contains
|
|
a separate `Bundle` value for each sub-protocol (transparent, Sprout, Sapling,
|
|
and TZE) and an Orchard bundle value has been added. `TransactionData` is now
|
|
parameterized by a type bounded on the newly added
|
|
`zcash_primitives::transaction::Authorization` trait. This bound has been
|
|
propagated to the individual transaction builders, such that the authorization
|
|
state of a transaction is clearly represented in the type and the presence
|
|
or absence of witness and/or proof data is statically known, instead of being only
|
|
determined at runtime via the presence or absence of `Option`al values.
|
|
- `zcash_primitives::transaction::components::sapling` parsing and serialization
|
|
have been adapted for use with the new `sapling::Bundle` type.
|
|
- `zcash_primitives::transaction::Transaction` parsing and serialization
|
|
have been adapted for use with the new `TransactionData` organization.
|
|
- Generators for property testing have been moved out of the main transaction
|
|
module such that they are now colocated in the modules with the types
|
|
that they generate.
|
|
- The `ephemeral_key` field of `OutputDescription` has had its type changed from
|
|
`jubjub::ExtendedPoint` to `zcash_note_encryption::EphemeralKeyBytes`.
|
|
- The `epk: jubjub::ExtendedPoint` field of `CompactOutputDescription ` has been
|
|
replaced by `ephemeral_key: zcash_note_encryption::EphemeralKeyBytes`.
|
|
- The `zcash_primitives::transaction::Builder::add_sapling_output` method
|
|
now takes its `MemoBytes` argument as a required field rather than an
|
|
optional one. If the empty memo is desired, use
|
|
`MemoBytes::from(Memo::Empty)` explicitly.
|
|
- `zcash_primitives::zip32`:
|
|
- `ExtendedSpendingKey::default_address` no longer returns `Option<_>`.
|
|
- `ExtendedFullViewingKey::default_address` no longer returns `Option<_>`.
|
|
|
|
## [0.5.0] - 2021-03-26
|
|
### Added
|
|
- Support for implementing candidate ZIPs before they have been selected for a
|
|
network upgrade, behind the `zfuture` feature flag.
|
|
- At runtime, these ZIPs are gated behind the new `NetworkUpgrade::ZFuture`
|
|
enum case, which is inaccessible without the `zfuture` feature flag. This
|
|
pseudo-NU can be enabled for private testing using a custom implementation
|
|
of the `Parameters` trait.
|
|
- New structs and methods:
|
|
- `zcash_primitives::consensus`:
|
|
- `BlockHeight`
|
|
- New methods on the `Parameters` trait:
|
|
- `coin_type`
|
|
- `hrp_sapling_extended_spending_key`
|
|
- `hrp_sapling_extended_full_viewing_key`
|
|
- `hrp_sapling_payment_address`
|
|
- `b58_pubkey_address_prefix`
|
|
- `b58_script_address_prefix`
|
|
- The `Network` enum, which enables code to be generic over the network type
|
|
at runtime.
|
|
- `zcash_primitives::memo`:
|
|
- `MemoBytes`, a minimal wrapper around the memo bytes, that only imposes
|
|
the existence of null-padding for shorter memos. `MemoBytes` is guaranteed
|
|
to be round-trip encodable (modulo null padding).
|
|
- `Memo`, an enum that implements the memo field format defined in
|
|
[ZIP 302](https://zips.z.cash/zip-0302). It can be converted to and from
|
|
`MemoBytes`.
|
|
- `zcash_primitives::primitives::Nullifier` struct.
|
|
- `zcash_primitives::transaction`:
|
|
- `TxVersion` enum, representing the set of valid transaction format
|
|
versions.
|
|
- `SignableInput` enum, encapsulating per-input data used when
|
|
creating transaction signatures.
|
|
- `zcash_primitives::primitives::SaplingIvk`, a newtype wrapper around `jubjub::Fr`
|
|
values that are semantically Sapling incoming viewing keys.
|
|
- Test helpers, behind the `test-dependencies` feature flag:
|
|
- `zcash_primitives::prover::mock::MockTxProver`, for building transactions in
|
|
tests without creating proofs.
|
|
- `zcash_primitives::transaction::Builder::test_only_new_with_rng` constructor
|
|
which accepts a non-`CryptoRng` randomness source (for e.g. deterministic
|
|
tests).
|
|
- `proptest` APIs for generating arbitrary Zcash types.
|
|
- New constants:
|
|
- `zcash_primitives::consensus`:
|
|
- `H0`, the height of the genesis block.
|
|
- `MAIN_NETWORK`
|
|
- `TEST_NETWORK`
|
|
- `zcash_primitives::constants::{mainnet, testnet, regtest}` modules,
|
|
containing network-specific constants.
|
|
- `zcash_primitives::note_encryption`:
|
|
- `ENC_CIPHERTEXT_SIZE`
|
|
- `OUT_CIPHERTEXT_SIZE`
|
|
- `zcash_primitives::transaction::components::amount`:
|
|
- `COIN`
|
|
- `MAX_MONEY`
|
|
- More implementations of standard traits:
|
|
- `zcash_primitives::consensus`:
|
|
- `Parameters: Clone`
|
|
- `MainNetwork: PartialEq`
|
|
- `TestNetwork: PartialEq`
|
|
- `zcash_primitives::legacy`:
|
|
- `Script: PartialEq`
|
|
- `TransparentAddress: Clone + PartialOrd + Hash`
|
|
- `zcash_primitives::redjubjub::PublicKey: Clone`
|
|
- `zcash_primitives::transaction`:
|
|
- `Transaction: Clone`
|
|
- `TransactionData: Clone + Default`
|
|
- `components::Amount: Eq + PartialOrd + Ord`
|
|
- `components::TxIn: Clone + PartialEq`
|
|
- `components::TxOut: PartialEq`
|
|
- `components::SpendDescription: Clone`
|
|
- `components::OutputDescription: Clone`
|
|
- `components::SproutProof: Clone`
|
|
- `components::JSDescription: Clone`
|
|
- `zcash_primitives::zip32::DiversifierIndex: Default`
|
|
|
|
### Changed
|
|
- MSRV is now 1.47.0.
|
|
- Trial decryption using the APIs in `zcash_primitives::note_encryption` is now
|
|
over 60% faster at detecting which notes are relevant.
|
|
- Part of this improvement was achieved by changing the APIs to take `epk` as
|
|
a `&jubjub::ExtendedPoint` instead of a `&SubgroupPoint`.
|
|
- Various APIs now take the network parameters as an explicit variable instead
|
|
of a type parameter:
|
|
- `zcash_primitives::consensus::BranchId::for_height`
|
|
- The `zcash_primitives::note_encryption` APIs.
|
|
- `zcash_primitives::transaction::builder`:
|
|
- `SaplingOutput::new`
|
|
- `Builder::new`
|
|
- `Builder::new_with_rng`
|
|
- `Parameters::activation_height` and `Parameters::is_nu_active` now take
|
|
`&self`.
|
|
- `zcash_primitives::merkle_tree::CommitmentTree::new` has been renamed to
|
|
`CommitmentTree::empty`.
|
|
- `zcash_primitives::note_encryption`:
|
|
- `SaplingNoteEncryption::new` now takes `MemoBytes`.
|
|
- The following APIs now return `MemoBytes`:
|
|
- `try_sapling_note_decryption`
|
|
- `try_sapling_output_recovery`
|
|
- `try_sapling_output_recovery_with_ock`
|
|
- `zcash_primitives::primitives::SaplingIvk` is now used where functions
|
|
previously used undistinguished `jubjub::Fr` values; this affects Sapling
|
|
note decryption and handling of IVKs by the wallet backend code.
|
|
- `zcash_primitives::primitives::ViewingKey::ivk` now returns `SaplingIvk`
|
|
- `zcash_primitives::primitives::Note::nf` now returns `Nullifier`.
|
|
- `zcash_primitives::transaction`:
|
|
- The `overwintered`, `version`, and `version_group_id` properties of the
|
|
`Transaction` and `TransactionData` structs have been replaced by
|
|
`version: TxVersion`.
|
|
- `components::amount::DEFAULT_FEE` is now 1000 zatoshis, following
|
|
[ZIP 313](https://zips.z.cash/zip-0313).
|
|
- The `nullifier` property of `components::SpendDescription` now has the type
|
|
`Nullifier`.
|
|
- `signature_hash` and `signature_hash_data` now take a `SignableInput`
|
|
argument instead of a `transparent_input` argument.
|
|
- `builder::SaplingOutput::new` and `builder::Builder::add_sapling_output` now
|
|
take `Option<MemoBytes>`.
|
|
|
|
### Removed
|
|
- `zcash_primitives::note_encryption::Memo` (replaced by
|
|
`zcash_primitives::memo::{Memo, MemoBytes}`).
|
|
|
|
## [0.4.0] - 2020-09-09
|
|
### Added
|
|
- `zcash_primitives::note_encryption::OutgoingCipherKey` - a symmetric key that
|
|
can be used to recover a single Sapling output. This will eventually be used
|
|
to implement Sapling payment disclosures.
|
|
|
|
### Changed
|
|
- MSRV is now 1.44.1.
|
|
- `zcash_primitives::note_encryption`:
|
|
- `SaplingNoteEncryption::new` now takes `Option<OutgoingViewingKey>`. Setting
|
|
this to `None` prevents the note from being recovered from the block chain
|
|
by the sender.
|
|
- The `rng: &mut R` parameter (where `R: RngCore + CryptoRng`) has been
|
|
changed to `rng: R` to enable this use case.
|
|
- `prf_ock` now returns `OutgoingCipherKey`.
|
|
- `try_sapling_output_recovery_with_ock` now takes `&OutgoingCipherKey`.
|
|
- `zcash_primitives::transaction::builder`:
|
|
- `SaplingOutput::new` and `Builder::add_sapling_output` now take
|
|
`Option<OutgoingViewingKey>` (exposing the new unrecoverable note option).
|
|
- Bumped dependencies to `ff 0.8`, `group 0.8`, `bls12_381 0.3.1`,
|
|
`jubjub 0.5.1`, `secp256k1 0.19`.
|
|
|
|
## [0.3.0] - 2020-08-24
|
|
TBD
|
|
|
|
## [0.2.0] - 2020-03-13
|
|
TBD
|
|
|
|
## [0.1.0] - 2019-10-08
|
|
Initial release.
|