2021-02-04 07:13:22 -08:00
|
|
|
# Changelog
|
2021-02-04 07:16:32 -08:00
|
|
|
All notable changes to this library will be documented in this file.
|
2021-02-04 07:13:22 -08:00
|
|
|
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
2021-02-04 07:16:32 -08:00
|
|
|
and this library adheres to Rust's notion of
|
2021-02-04 07:13:22 -08:00
|
|
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
|
|
|
|
## [Unreleased]
|
2021-03-26 12:21:45 -07:00
|
|
|
### Changed
|
|
|
|
- MSRV is now 1.51.0.
|
2021-03-26 20:49:34 -07:00
|
|
|
- The following modules and helpers have been moved into
|
|
|
|
`zcash_primitives::sapling`:
|
|
|
|
- `zcash_primitives::group_hash`
|
|
|
|
- `zcash_primitives::keys`
|
|
|
|
- `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}`
|
2021-04-01 14:39:25 -07:00
|
|
|
- Renamed `zcash_primitives::transaction::components::JSDescription` to
|
|
|
|
`JsDescription` (matching Rust naming conventions).
|
2021-03-25 22:50:56 -07:00
|
|
|
|
|
|
|
## [0.5.0] - 2021-03-26
|
2021-02-22 08:59:07 -08:00
|
|
|
### 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.
|
2021-03-17 14:00:27 -07:00
|
|
|
- `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
|
2021-03-22 17:52:22 -07:00
|
|
|
[ZIP 302](https://zips.z.cash/zip-0302). It can be converted to and from
|
|
|
|
`MemoBytes`.
|
2021-02-22 08:59:07 -08:00
|
|
|
- `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.
|
2021-03-25 14:00:54 -07:00
|
|
|
- `zcash_primitives::primitives::SaplingIvk`, a newtype wrapper around `jubjub::Fr`
|
2021-03-10 09:39:18 -08:00
|
|
|
values that are semantically Sapling incoming viewing keys.
|
2021-02-22 08:59:07 -08:00
|
|
|
- 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
|
2021-03-04 09:30:11 -08:00
|
|
|
- MSRV is now 1.47.0.
|
2021-02-22 08:59:07 -08:00
|
|
|
- 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`.
|
2021-03-17 14:00:27 -07:00
|
|
|
- `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`
|
2021-03-10 09:39:18 -08:00
|
|
|
- `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`
|
2021-02-22 08:59:07 -08:00
|
|
|
- `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.
|
2021-03-17 14:00:27 -07:00
|
|
|
- `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}`).
|
2021-02-04 07:13:22 -08:00
|
|
|
|
|
|
|
## [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.
|