librustzcash/zcash_client_backend/CHANGELOG.md

14 KiB

Changelog

All notable changes to this library will be documented in this file.

The format is based on Keep a Changelog, and this library adheres to Rust's notion of Semantic Versioning.

[Unreleased]

Added

  • Functionality that enables the receiving and spending of transparent funds, behind the new transparent-inputs feature flag.
    • A new data_api::wallet::shield_transparent_funds method has been added to facilitate the automatic shielding of transparent funds received by the wallet.
    • A zcash_client_backend::wallet::WalletTransparentOutput type in support of transparent-inputs functionality.
  • A new data_api::wallet::spend method has been added, which is intended to supersede the data_api::wallet::create_spend_to_address method. This new method now constructs transactions via interpretation of a zcash_client_backend::zip321::TransactionRequest value. This facilitates the implementation of ZIP 321 support in wallets and provides substantially greater flexibility in transaction creation.
  • An unstable feature flag; this is added to parts of the API that may change in any release.
  • zcash_client_backend::address:
    • RecipientAddress::Unified
    • AddressMetadata
  • zcash_client_backend::data_api:
    • PoolType
    • ShieldedPool
    • Recipient
    • SentTransactionOutput
    • WalletRead::get_unified_full_viewing_keys
    • WalletRead::get_account_for_ufvk
    • WalletRead::get_current_address
    • WalletRead::get_all_nullifiers
    • WalletRead::get_transparent_receivers
    • WalletRead::get_unspent_transparent_outputs
    • WalletRead::get_transparent_balances
    • WalletWrite::create_account
    • WalletWrite::remove_unmined_tx (behind the unstable feature flag).
    • WalletWrite::get_next_available_address
    • WalletWrite::put_received_transparent_utxo
    • impl From<prost::DecodeError> for error::Error
    • chain::error: a module containing error types type that that can occur only in chain validation and sync have been separated out from errors related to other wallet operations.
    • input_selection: a module containing types related to the process of selecting inputs to be spent, given a transaction request.
  • zcash_client_backend::decrypt:
    • TransferType
  • zcash_client_backend::proto:
    • actions field on compact_formats::CompactTx
    • compact_formats::CompactOrchardAction
    • gRPC bindings for the lightwalletd server, behind a lightwalletd-tonic feature flag.
  • zcash_client_backend::zip321::TransactionRequest methods:
    • TransactionRequest::empty for constructing a new empty request.
    • TransactionRequest::new for constructing a request from Vec<Payment>.
    • TransactionRequest::payments for accessing the Payments that make up a request.
  • zcash_client_backend::encoding
    • KeyError
    • AddressCodec implementations for sapling::PaymentAddress and UnifiedAddress
  • zcash_client_backend::fees
    • ChangeError
    • ChangeStrategy
    • ChangeValue
    • TransactionBalance
    • BasicFixedFeeChangeStrategy - a ChangeStrategy implementation that reproduces current wallet change behavior
    • fixed, a new module containing of change selection strategies for the existing fixed fee rule.
    • zip317, a new module containing change selection strategies for the ZIP 317 fee rule.
  • New experimental APIs that should be considered unstable, and are likely to be modified and/or moved to a different module in a future release:
    • zcash_client_backend::address::UnifiedAddress
    • zcash_client_backend::keys::{UnifiedSpendingKey, UnifiedFullViewingKey, Era, DecodingError}
    • zcash_client_backend::encoding::AddressCodec
    • zcash_client_backend::encoding::encode_payment_address
    • zcash_client_backend::encoding::encode_transparent_address
  • impl Eq for zcash_client_backend::address::UnifiedAddress

Changed

  • MSRV is now 1.56.1.
  • Bumped dependencies to ff 0.12, group 0.12, bls12_381 0.7, jubjub 0.9, zcash_primitives 0.8, orchard 0.3.
  • zcash_client_backend::proto:
    • The Protocol Buffers bindings are now generated for prost 0.11 instead of protobuf 2.
    • compact_formats::CompactSpend has been renamed to CompactSaplingSpend, and its epk field (and associated set_epk method) has been renamed to ephemeralKey (and set_ephemeralKey).
    • compact_formats::CompactOutput has been renamed to CompactSaplingOutput.
  • epk: jubjub::ExtendedPoint has been replaced by ephemeral_key: zcash_note_encryption::EphemeralKeyBytes in various places:
    • zcash_client_backend::wallet::WalletShieldedOutput: the epk field has been replaced by ephemeral_key.
    • zcash_client_backend::proto::compact_formats::CompactSaplingOutput: the epk method has been replaced by ephemeral_key.
  • Renamed the following in zcash_client_backend::data_api to use lower-case abbreviations (matching Rust naming conventions):
    • testing::MockWalletDB to testing::MockWalletDb
  • Changes to the data_api::WalletRead trait:
    • WalletRead::get_target_and_anchor_heights now takes a min_confirmations argument that is used to compute an upper bound on the anchor height being returned; this had previously been hardcoded to data_api::wallet::ANCHOR_OFFSET.
    • WalletRead::get_spendable_notes has been renamed to get_spendable_sapling_notes and now takes as an argument a vector of note IDs to be excluded from consideration.
    • WalletRead::select_spendable_notes has been renamed to select_spendable_sapling_notes and now takes as an argument a vector of note IDs to be excluded from consideration.
    • The WalletRead::NoteRef and WalletRead::TxRef associated types are now required to implement Eq and Ord
  • The zcash_client_backend::data_api::SentTransaction type has been substantially modified to accommodate handling of transparent inputs. Per-output data has been split out into a new struct SentTransactionOutput and SentTransaction can now contain multiple outputs, and tracks the fee paid.
  • data_api::WalletWrite::store_received_tx has been renamed to store_decrypted_tx.
  • data_api::ReceivedTransaction has been renamed to DecryptedTransaction, and its outputs field has been renamed to sapling_outputs.
  • data_api::error::Error has been substantially modified. It now wraps database, note selection, builder, and other errors
    • Error::DataSource has been added.
    • Error::NoteSelection has been added.
    • Error::BalanceError has been added.
    • Error::MemoForbidden has been added.
    • Error::AddressNotRecognized has been added.
    • Error::ChildIndexOutOfRange has been added.
    • Error::NoteMismatch has been added.
    • Error::InsufficientBalance has been renamed InsufficientFunds and restructured to have named fields.
    • Error::Protobuf has been removed; these decoding errors are now produced as data source and/or block-source implementation-specific errors.
    • Error::InvalidChain has been removed; its former purpose is now served by zcash_client_backend::data_api::chain::ChainError.
    • Error::InvalidNewWitnessAnchor and Error::InvalidWitnessAnchor have been moved to zcash_client_backend::data_api::chain::error::ContinuityError
    • Error::InvalidExtSk (now unused) has been removed.
    • Error::KeyNotFound (now unused) has been removed.
    • Error::KeyDerivationError (now unused) has been removed.
    • Error::SaplingNotActive (now unused) has been removed.
  • zcash_client_backend::decrypt:
    • decrypt_transaction now takes a HashMap<_, UnifiedFullViewingKey> instead of HashMap<_, ExtendedFullViewingKey>.
  • If no memo is provided when sending to a shielded recipient, the empty memo will be used
  • zcash_client_backend::keys::spending_key has been moved to the zcash_client_backend::keys::sapling module.
  • zcash_client_backend::zip321::MemoError has been renamed and expanded into a more comprehensive Zip321Error type, and functions in the zip321 module have been updated to use this unified error type. The following error cases have been added:
    • Zip321Error::TooManyPayments(usize)
    • Zip321Error::DuplicateParameter(parse::Param, usize)
    • Zip321Error::TransparentMemo(usize)
    • Zip321Error::RecipientMissing(usize)
    • Zip321Error::ParseError(String)
  • The api of welding_rig::ScanningKey has changed to accommodate batch decryption and to correctly handle scanning with the internal (change) keys derived from ZIP 316 UFVKs and UIVKs.
  • welding_rig::scan_block now uses batching for trial-decryption of transaction outputs.
  • The return type of the following methods in zcash_client_backend::encoding have been changed to improve error reporting:
    • decode_extended_spending_key
    • decode_extended_full_viewing_key
    • decode_payment_address
  • zcash_client_backend::wallet::SpendableNote is now parameterized by a note identifier type and has an additional note_id field that is used to hold the identifier used to refer to the note in the wallet database.
  • zcash_client_backend::data_api::BlockSource has been moved to the zcash_client_backend::data_api::chain module.
  • The types of the with_row callback argument to BlockSource::with_blocks and the return type of this method have been modified to return zcash_client_backend::data_api::chain::error::Error.
  • zcash_client_backend::data_api::testing::MockBlockSource has been moved to zcash_client_backend::data_api::chain::testing::MockBlockSource module.
  • zcash_client_backend::data_api::chain::{validate_chain, scan_cached_blocks} have altered parameters and result types. The latter have been modified to returnzcash_client_backend::data_api::chain::error::Error instead of abstract error types. This new error type now wraps the errors of the block source and wallet database to which these methods delegate IO operations directly, which simplifies error handling in cases where callback functions are involved.
  • zcash_client_backend::data_api::error::ChainInvalid has been moved to zcash_client_backend::data_api::chain::error.
  • The error type of zcash_client_backend::data_api::wallet::decrypt_and_store_transaction has been changed; the error type produced by the provided WalletWrite instance is returned directly.

Deprecated

  • zcash_client_backend::data_api::wallet::create_spend_to_address has been deprecated. Use zcash_client_backend::data_api::wallet::spend instead. If you wish to continue using create_spend_to_address, note that the arguments to the function has been modified to take a unified spending key instead of a Sapling extended spending key, and now also requires a min_confirmations argument that the caller can provide to specify a minimum number of confirmations required for notes being selected. A minimum of 10 confirmations is recommended.

Removed

  • zcash_client_backend::data_api:
    • WalletRead::get_extended_full_viewing_keys (use WalletRead::get_unified_full_viewing_keys instead).
    • WalletRead::get_address (use WalletRead::get_current_address or WalletWrite::get_next_available_address instead.)
    • impl From<protobuf::ProtobufError> for error::Error
  • zcash_client_backend::proto::compact_formats:
    • Compact*::new methods (use Default::default or struct instantiation instead).
    • Getters (use dedicated typed methods or direct field access instead).
    • Setters (use direct field access instead).
  • The hardcoded data_api::wallet::ANCHOR_OFFSET constant.
  • zcash_client_backend::wallet::AccountId (moved to zcash_primitives::zip32::AccountId).
  • The implementation of welding_rig::ScanningKey for ExtendedFullViewingKey has been removed. Use DiversifiableFullViewingKey instead.

[0.5.0] - 2021-03-26

Added

  • zcash_client_backend::address::RecipientAddress
  • zcash_client_backend::data_api module, containing the Data Access API.
  • zcash_client_backend::wallet:
    • AccountId
    • SpendableNote
    • OvkPolicy
  • zcash_client_backend::welding_rig::ScanningKey trait, representing a key which can be used for trial decryption of outputs, and optionally nullifier computation. This trait is implemented for zcash_primitives::zip32:ExtendedFullViewingKey and zcash_primitives::primitives::SaplingIvk.
  • First alpha of TZE support, behind the zfuture feature flag.

Changed

  • MSRV is now 1.47.0.
  • epk fields and return values were changed from a jubjub::SubgroupPoint to a jubjub::ExtendedPoint, to match the change to the zcash_primitives decryption APIs:
    • zcash_client_backend::proto::compact_formats::CompactOutput::epk()
    • The epk field of zcash_client_backend::wallet::WalletShieldedOutput.
  • zcash_client_backend::decrypt:
    • decrypt_transaction now takes a variable with type P: zcash_primitives::consensus::Parameters.
    • The memo field of DecryptedOutput now has type MemoBytes.
  • zcash_client_backend::wallet:
    • The nf property of WalletShieldedSpend now has the type Nullifier.
    • The account property of WalletShieldedSpend and WalletShieldedOutput now has the type AccountId.
  • zcash_client_backend::welding_rig:
    • scan_block now takes &[(AccountId, K: ScanningKey)], instead of a slice of extended full viewing keys with implicit account IDs.
    • The nullifiers argument to scan_block now has the type &[(AccountId, Nullifier)].

Removed

  • zcash_client_backend::constants module (its sub-modules have been moved into zcash_primitives::constants, and more generally replaced by the new methods on the zcash_primitives::consensus::Parameters trait).

[0.4.0] - 2020-09-09

Changed

  • MSRV is now 1.44.1.
  • Bumped dependencies to ff 0.8, group 0.8, bls12_381 0.3.1, jubjub 0.5.1, protobuf 2.15.

[0.3.0] - 2020-08-24

TBD

[0.2.0] - 2020-03-13

TBD

[0.1.0] - 2019-10-08

Initial release.