67 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]
Changed
- Migrated to
nonempty 0.11
zcash_client_backend::wallet::Recipient
has changed:- The
Recipient::External
variant is now a structured variant. - The
Recipient::EphemeralTransparent
variant is now only available ifzcash_client_backend
is built using thetransparent-inputs
feature flag. - The
N
andO
type pararameters to this type have been replaced by concrete uses ofBox<Note>
andOutpoint
instead. Themap_internal_account_note
andmap_ephemeral_transparent_outpoint
andinternal_account_note_transpose_option
methods have consequently been removed.
- The
zcash_client_backend::data_api::WalletRead::get_known_ephemeral_addresses
now takes aRange<zcash_transparent::keys::NonHardenedChildIndex>
as its argument instead of aRange<u32>
Deprecated
zcash_client_backend::address
(usezcash_keys::address
instead)zcash_client_backend::encoding
(usezcash_keys::encoding
instead)zcash_client_backend::keys
(usezcash_keys::keys
instead)zcash_client_backend::zip321
(use thezip321
crate instead)zcash_client_backend::PoolType
(usezcash_protocol::PoolType
instead)zcash_client_backend::ShieldedProtocol
(usezcash_protocol::ShieldedProtocol
instead)
[0.16.0] - 2024-12-16
Added
zcash_client_backend::data_api
AccountSource::key_derivation
error::PcztError
wallet::ExtractErrT
wallet::create_pczt_from_proposal
wallet::extract_and_store_transaction_from_pczt
Changed
- Migrated to
sapling-crypto 0.4
,zcash_keys 0.6
,zcash_primitives 0.21
,zcash_proofs 0.21
. zcash_client_backend::data_api::AccountBalance
: Refactored to useBalance
for transparent funds (issue #1411). It now has anunshielded_balance()
method that returnsBalance
, allowing the unshielded spendable, unshielded pending change, and unshielded pending non-change values to be tracked separately.zcash_client_backend::data_api::WalletRead
:- The
create_account
,import_account_hd
, andimport_account_ufvk
methods now each take additionalaccount_name
andkey_source
arguments. These allow the wallet backend to store additional metadata that is useful to applications managing these accounts.
- The
zcash_client_backend::data_api::AccountSource
:- Both
Derived
andImported
alternatives ofAccountSource
now have an additionalkey_source
field that is used to convey application-specific key source metadata. - The
Copy
impl for this type has been removed. - The
request
argument toWalletRead::get_next_available_address
is now optional.
- Both
zcash_client_backend::data_api::Account
has an additionalname
method that returns the human-readable name of the account, if any.zcash_client_backend::data_api::error::Error
has new variants:AccountIdNotRecognized
AccountCannotSpend
Pczt
Deprecated
AccountBalance::unshielded
. Instead useunshielded_balance
which provides aBalance
value. Itstotal()
method can be used to obtain the total of transparent funds.
Removed
zcash_client_backend::AccountBalance::add_unshielded_value
. Instead useAccountBalance::with_unshielded_balance_mut
with a closure that calls the appropriateadd_*_value
method(s) ofBalance
on its argument. Note that the appropriate method(s) depend on whether the funds are spendable, pending change, or pending non-change (previously, only the total unshielded value was tracked).
[0.15.0] - 2024-11-14
Added
zcash_client_backend::data_api
:Progress
WalletSummary::progress
PoolMeta
AccountMeta
impl Default for wallet::input_selection::GreedyInputSelector
BoundedU8
NoteFilter
zcash_client_backend::fees
SplitPolicy
StandardFeeRule
has been moved here fromzcash_primitives::fees
. Relative to that type, the deprecatedPreZip313
andZip313
variants have been removed.zip317::{MultiOutputChangeStrategy, Zip317FeeRule}
standard::MultiOutputChangeStrategy
- A new feature flag,
non-standard-fees
, has been added. This flag is now required in order to make use of any types or methods that enable non-standard fee calculation. zcash_client_backend::tor::http::cryptex
:LocalExchange
, a variant of theExchange
trait withoutSend
bounds.DynExchange
DynLocalExchange
Changed
- MSRV is now 1.77.0.
- Migrated to
zcash_primitives 0.20.0
,zcash_keys 0.5.0
. - Migrated to
arti-client 0.23
. zcash_client_backend::data_api
:InputSource
has an added methodget_account_metadata
error::Error
has additional variantError::Change
. This necessitates the addition of two type parameters to theError
type,ChangeErrT
andNoteRefT
.- The following methods each now take an additional
change_strategy
argument, along with an associatedChangeT
type parameter:wallet::spend
wallet::propose_transfer
wallet::propose_shielding
. This method also now takes an additionalto_account
argument.wallet::shield_transparent_funds
. This method also now takes an additionalto_account
argument.
wallet::input_selection::InputSelectionError
now has an additionalChange
variant. This necessitates the addition of two type parameters.wallet::input_selection::InputSelector::propose_transaction
takes an additionalchange_strategy
argument, along with an associatedChangeT
type parameter.- The
wallet::input_selection::InputSelector::FeeRule
associated type has been removed. The fee rule is now part of the change strategy passed topropose_transaction
. wallet::input_selection::ShieldingSelector::propose_shielding
takes an additionalchange_strategy
argument, along with an associatedChangeT
type parameter. In addition, it also takes a newto_account
argument that identifies the destination account for the shielded notes.- The
wallet::input_selection::ShieldingSelector::FeeRule
associated type has been removed. The fee rule is now part of the change strategy passed topropose_shielding
. - The
Change
variant ofwallet::input_selection::GreedyInputSelectorError
has been removed, along with the additional type parameters it necessitated. - The arguments to
wallet::input_selection::GreedyInputSelector::new
have changed.
zcash_client_backend::fees
:ChangeStrategy
has changed. It has two new associated types,MetaSource
andAccountMetaT
, and itsFeeRule
associated type now has an additionalClone
bound. In addition, it defines a newfetch_wallet_meta
method, and the arguments tocompute_balance
have changed.zip317::SingleOutputChangeStrategy
has been made polymorphic in the fee rule type, and takes an additional type parameter as a consequence.- The following methods now take an additional
DustOutputPolicy
argument, and carry an additional type parameter:fixed::SingleOutputChangeStrategy::new
standard::SingleOutputChangeStrategy::new
zip317::SingleOutputChangeStrategy::new
zcash_client_backend::proto::ProposalDecodingError
has modified variants.ProposalDecodingError::FeeRuleNotSpecified
has been removed, andProposalDecodingError::FeeRuleNotSupported
has been added to replace it.zcash_client_backend::data_api::fees::fixed
is now available only via the use of thenon-standard-fees
feature flag.zcash_client_backend::tor::http::cryptex
:- The
Exchange
trait is no longer object-safe. Replace any existing uses ofdyn Exchange
withDynExchange
.
- The
Removed
zcash_client_backend::data_api
:WalletSummary::scan_progress
andWalletSummary::recovery_progress
have been removed. UseWalletSummary::progress
instead.testing::input_selector
use explicitInputSelector
constructors directly instead.- The deprecated
wallet::create_spend_to_address
andwallet::spend
methods have been removed. Usepropose_transfer
andcreate_proposed_transaction
instead.
zcash_client_backend::fees
:impl From<BalanceError> for ChangeError<...>
[0.14.0] - 2024-10-04
Added
zcash_client_backend::data_api
:GAP_LIMIT
WalletSummary::recovery_progress
SpendableNotes::{take_sapling, take_orchard}
- Tests and testing infrastructure have been migrated from the
zcash_client_sqlite
internal tests to thetesting
module, and have been generalized so that they may be used for testing arbitrary implementations of thezcash_client_backend::data_api
interfaces. The following have been added under thetest-dependencies
feature flag as part of this migration:WalletTest
testing::AddressType
testing::CachedBlock
testing::DataStoreFactory
testing::FakeCompactOutput
testing::InitialChainState
testing::NoteCommitments
testing::Reset
testing::TestAccount
testing::TestBuilder
testing::TestCache
testing::TestFvk
testing::TestState
testing::TransactionSummary
testing::input_selector
testing::orchard
testing::pool
testing::sapling
Changed
- Migrated to
orchard 0.10
,sapling-crypto 0.3
,shardtree 0.5
,zcash_address 0.6
,zcash_primitives 0.19
,zcash_proofs 0.19
,zcash_protocol 0.4
. - The
Account
trait now uses an associated type for itsAccountId
type instead of a type parameter. This change allows for the simplification of some type signatures. zcash_client_backend::data_api
:WalletSummary::scan_progress
now only reports progress for scanning blocks "near" the chain tip. Progress for scanning earlier blocks is now reported viaWalletSummary::recovery_progress
.WalletRead::get_min_unspent_height
has been removed. This was added to make it possible to obtain a "safe truncation" height in order to facilitate rewinds to a greater depth than the available note commitment tree checkpoints provide, but such rewinds are no longer supported.
zcash_client_backend::sync::run
:- Transparent outputs are now refreshed in addition to shielded notes.
zcash_client_backend::proposal::ProposalError
has a newAnchorNotFound
variant.
Fixed
zcash_client_backend::tor::grpc
now needs thelightwalletd-tonic-tls-webpki-roots
feature flag instead oflightwalletd-tonic
, to fix compilation issues.
[0.13.0] - 2024-08-20
zcash_client_backend
now supports TEX (transparent-source-only) addresses as specified
in ZIP 320. Sending to one or more TEX addresses will automatically create a multi-step
proposal that uses two transactions.
In order to take advantage of this support, client wallets will need to be able to send
multiple transactions created from zcash_client_backend::data_api::wallet::create_proposed_transactions
.
This API was added in zcash_client_backend
0.11.0 but previously could only return a
single transaction.
Note: This feature changes the use of transparent addresses in ways that are relevant to security and access to funds, and that may interact with other wallet behaviour. In particular it exposes new ephemeral transparent addresses belonging to the wallet, which need to be scanned in order to recover funds if the first transaction of the proposal is mined but the second is not, or if someone (e.g. the TEX-address recipient) sends back funds to those addresses. See ZIP 320 for details.
Added
zcash_client_backend::data_api
:chain::BlockCache
trait, behind thesync
feature flag.WalletRead::get_spendable_transparent_outputs
DecryptedTransaction::mined_height
TransactionDataRequest
TransactionStatus
AccountType
zcash_client_backend::fees
:EphemeralBalance
ChangeValue::shielded, is_ephemeral
ChangeValue::ephemeral_transparent
(when "transparent-inputs" is enabled)sapling::EmptyBundleView
orchard::EmptyBundleView
zcash_client_backend::proposal
:impl Hash for {StepOutput, StepOutputIndex}
zcash_client_backend::scanning
:testing
module
zcash_client_backend::sync
module, behind thesync
feature flag.zcash_client_backend::tor
module, behind thetor
feature flag.zcash_client_backend::wallet
:Recipient::map_ephemeral_transparent_outpoint
WalletTransparentOutput::mined_height
Changed
- MSRV is now 1.70.0.
- Updated dependencies:
zcash_address 0.4
zcash_encoding 0.2.1
zcash_keys 0.3
zcash_primitives 0.16
zcash_protocol 0.2
zip321 0.1
- Migrated to
tonic 0.12
.- The
lightwalletd-tonic
feature flag no longer works onwasm32-wasi
due to https://github.com/hyperium/tonic/issues/1783.
- The
zcash_client_backend::{fixed,standard,zip317}::SingleOutputChangeStrategy
now implement a different strategy for choosing whether there will be any change, and its value. This can avoid leaking information about note amounts in some cases. It also ensures that there will be a change output whenever achange_memo
is given, and defends against losing money by usingDustAction::AddDustToFee
with a too-high dust threshold. See #1430 for details.zcash_client_backend::zip321
has been extracted to, and is now a reexport of the root module of thezip321
crate. Several of the APIs of this module have changed as a consequence of this extraction; please see thezip321
CHANGELOG for details.zcash_client_backend::data_api
:WalletRead
has a newtransaction_data_requests
method.WalletRead
has newget_known_ephemeral_addresses
,find_account_for_ephemeral_address
, andget_transparent_address_metadata
methods when the "transparent-inputs" feature is enabled.WalletWrite
has a newreserve_next_n_ephemeral_addresses
method when the "transparent-inputs" feature is enabled.WalletWrite
has new methodsimport_account_hd
,import_account_ufvk
, andset_transaction_status
.error::Error
has newAddress
and (when the "transparent-inputs" feature is enabled)PaysEphemeralTransparentAddress
variants.- The
WalletWrite::store_sent_tx
method has been renamed tostore_transactions_to_be_sent
, and its signature changed to take a slice ofSentTransaction
s. This can be used by the wallet storage backend (e.g.zcash_client_sqlite
) to improve transactionality of writes for multi-step proposals. wallet::input_selection::InputSelectorError
has a newAddress
variant.wallet::decrypt_and_store_transaction
now takes an additional optionalmined_height
argument that can be used to provide the mined height returned by the light wallet server in aRawTransaction
value directly to the back end.DecryptedTransaction::new
takes an additionalmined_height
argument.SentTransaction
now stores itsoutputs
andutxos_spent
fields as references to slices, with a corresponding change toSentTransaction::new
.SentTransaction
takes an additionaltarget_height
argument, which is used to record the target height used in transaction generation.AccountSource::Imported
is now a struct variant with apurpose
field.- The
Account
trait now defines a newpurpose
method with a default implementation (which need not be overridden.)
zcash_client_backend::data_api::fees
- When the "transparent-inputs" feature is enabled,
ChangeValue
can also represent an ephemeral transparent output in a proposal. Accordingly, the return type ofChangeValue::output_pool
has (unconditionally) changed fromShieldedProtocol
tozcash_protocol::PoolType
. ChangeStrategy::compute_balance
: this trait method has an additionalOption<&EphemeralBalance>
parameter. If the "transparent-inputs" feature is enabled, this can be used to specify whether the change memo should be ignored, and the amounts of additional transparent P2PKH inputs and outputs. PassingNone
will retain the previous behaviour (and is necessary when the "transparent-inputs" feature is not enabled).
- When the "transparent-inputs" feature is enabled,
zcash_client_backend::input_selection::GreedyInputSelectorError
has a new variantUnsupportedTexAddress
.zcash_client_backend::proposal::ProposalError
has new variantsSpendsChange
,EphemeralOutputLeftUnspent
, andPaysTexFromShielded
. (the last two are conditional on the "transparent-inputs" feature).zcash_client_backend::proto
:ProposalDecodingError
has a new variantInvalidEphemeralRecipient
.proposal::Proposal::{from_standard_proposal, try_into_standard_proposal}
each no longer require aconsensus::Parameters
argument.
zcash_client_backend::wallet::Recipient
variants have changed. Instead of wrapping protocol-address types, theExternal
andInternalAccount
variants now wrap azcash_address::ZcashAddress
. This simplifies the process of tracking the original address to which value was sent. There is also a newEphemeralTransparent
variant, and an additional generic parameter for the type of metadata associated with an ephemeral transparent outpoint.zcash_client_backend::wallet::WalletTransparentOutput::from_parts
now takes its height argument asOption<BlockHeight>
rather thanBlockHeight
.
Removed
zcash_client_backend::data_api
:WalletRead::get_unspent_transparent_outputs
has been removed because its semantics were unclear and could not be clarified. UseWalletRead::get_spendable_transparent_outputs
instead.
zcash_client_backend::fees::ChangeValue::new
. UseChangeValue::shielded
orChangeValue::ephemeral_transparent
instead.zcash_client_backend::wallet::WalletTransparentOutput::height
(useWalletTransparentOutput::mined_height
instead).
[0.12.1] - 2024-03-27
Fixed
- This release fixes a problem in note selection when sending to a transparent recipient, whereby available funds were being incorrectly excluded from input selection.
[0.12.0] - 2024-03-25
Added
- A new
orchard
feature flag has been added to make it possible to build client code withoutorchard
dependencies. Additions and changes related toOrchard
below are introduced under this feature flag. zcash_client_backend::data_api
:Account
AccountBalance::with_orchard_balance_mut
AccountBirthday::orchard_frontier
AccountSource
BlockMetadata::orchard_tree_size
DecryptedTransaction::{new, tx(), orchard_outputs()}
NoteRetention
ScannedBlock::orchard
ScannedBlockCommitments::orchard
SeedRelevance
SentTransaction::new
SpendableNotes
ORCHARD_SHARD_HEIGHT
BlockMetadata::orchard_tree_size
WalletSummary::next_orchard_subtree_index
chain::ChainState
chain::ScanSummary::{spent_orchard_note_count, received_orchard_note_count}
impl Debug for chain::CommitmentTreeRoot
zcash_client_backend::fees
:orchard
ChangeValue::orchard
zcash_client_backend::proto
:service::TreeState::orchard_tree
service::TreeState::to_chain_state
impl TryFrom<&CompactOrchardAction> for CompactAction
CompactOrchardAction::{cmx, nf, ephemeral_key}
zcash_client_backend::scanning
:impl ScanningKeyOps<OrchardDomain, ..> for ScanningKey<..>
for Orchard key types.ScanningKeys::orchard
Nullifiers::{orchard, extend_orchard, retain_orchard}
TaggedOrchardBatch
TaggedOrchardBatchRunner
zcash_client_backend::wallet
:Note::Orchard
WalletOrchardSpend
WalletOrchardOutput
WalletTx::{orchard_spends, orchard_outputs}
ReceivedNote::map_note
ReceivedNote<_, sapling::Note>::note_value
ReceivedNote<_, orchard::note::Note>::note_value
zcash_client_backend::zip321::Payment::without_memo
Changed
zcash_client_backend::data_api
:- Arguments to
AccountBirthday::from_parts
have changed. - Arguments to
BlockMetadata::from_parts
have changed. - Arguments to
ScannedBlock::from_parts
have changed. - Changes to the
WalletRead
trait:- Added
Account
associated type. - Added
validate_seed
method. - Added
is_seed_relevant_to_any_derived_accounts
method. - Added
get_account
method. - Added
get_derived_account
method. get_account_for_ufvk
now returnsSelf::Account
instead of a bareAccountId
.- Added
get_orchard_nullifiers
method. get_transaction
now returnsResult<Option<Transaction>, _>
rather than returning anErr
if thetxid
parameter does not correspond to a transaction in the database.
- Added
WalletWrite::create_account
now takes itsAccountBirthday
argument by reference.- Changes to the
InputSource
trait:select_spendable_notes
now takes itstarget_value
argument as aNonNegativeAmount
. Also, it now returns aSpendableNotes
data structure instead of a vector.
- Fields of
DecryptedTransaction
are now private. UseDecryptedTransaction::new
and the newly provided accessors instead. - Fields of
SentTransaction
are now private. UseSentTransaction::new
and the newly provided accessors instead. ShieldedProtocol
has a newOrchard
variant.WalletCommitmentTrees
type OrchardShardStore
fn with_orchard_tree_mut
fn put_orchard_subtree_roots
- Removed
Error::AccountNotFound
variant. WalletSummary::new
now takes an additionalnext_orchard_subtree_index
argument when theorchard
feature flag is enabled.
- Arguments to
zcash_client_backend::decrypt
:- Fields of
DecryptedOutput
are now private. UseDecryptedOutput::new
and the newly provided accessors instead. decrypt_transaction
now returns aDecryptedTransaction<AccountId>
instead of aDecryptedOutput<sapling::Note>
and will decrypt Orchard outputs when theorchard
feature is enabled. In addition, the type constraint on its<AccountId>
parameter has been strengthened toCopy
.
- Fields of
zcash_client_backend::fees
:- Arguments to
ChangeStrategy::compute_balance
have changed. ChangeError::DustInputs
now has anorchard
field behind theorchard
feature flag.
- Arguments to
zcash_client_backend::proto
:ProposalDecodingError
has a new variantTransparentMemo
.
zcash_client_backend::wallet::Recipient::InternalAccount
is now a structured variant with an additionalexternal_address
field.zcash_client_backend::zip321::render::amount_str
now takes aNonNegativeAmount
rather than a signedAmount
as its argument.zcash_client_backend::zip321::parse::parse_amount
now parses aNonNegativeAmount
rather than a signedAmount
.zcash_client_backend::zip321::TransactionRequest::total
now returnsResult<_, BalanceError>
instead ofResult<_, ()>
.
Removed
zcash_client_backend::PoolType::is_receiver
: usezcash_keys::Address::has_receiver
instead.zcash_client_backend::wallet::ReceivedNote::traverse_opt
removed as unnecessary.
Fixed
- This release fixes an error in amount parsing in
zip321
that previously allowed amounts having a decimal point but no decimal value to be parsed as valid.
[0.11.1] - 2024-03-09
Fixed
- Documentation now correctly builds with all feature flags.
[0.11.0] - 2024-03-01
Added
zcash_client_backend
:{PoolType, ShieldedProtocol}
(moved fromzcash_client_backend::data_api
).PoolType::is_receiver
zcash_client_backend::data_api
:InputSource
ScannedBlock::{into_commitments, sapling}
ScannedBundles
ScannedBlockCommitments
Balance::{add_spendable_value, add_pending_change_value, add_pending_spendable_value}
AccountBalance::{ with_sapling_balance_mut, add_unshielded_value }
WalletSummary::next_sapling_subtree_index
wallet
:propose_standard_transfer_to_address
create_proposed_transactions
input_selection
:ShieldingSelector
, behind thetransparent-inputs
feature flag (refactored out from theInputSelector
trait).impl std::error::Error for InputSelectorError
zcash_client_backend::fees
:standard
andsapling
modules.ChangeValue::new
zcash_client_backend::wallet
:{NoteId, Recipient}
(moved fromzcash_client_backend::data_api
).Note
ReceivedNote
Recipient::{map_internal_account, internal_account_transpose_option}
WalletOutput
WalletSaplingOutput::{key_source, account_id, recipient_key_scope}
WalletSaplingSpend::account_id
WalletSpend
WalletTx::new
WalletTx
getter methods{txid, block_index, sapling_spends, sapling_outputs}
(replacing what were previously public fields.)TransparentAddressMetadata
(which replaceszcash_keys::address::AddressMetadata
).impl {Debug, Clone} for OvkPolicy
zcash_client_backend::proposal
:Proposal::{shielded_inputs, payment_pools, single_step, multi_step}
ShieldedInputs
Step
zcash_client_backend::proto
:PROPOSAL_SER_V1
ProposalDecodingError
proposal
module, for parsing and serializing transaction proposals.impl TryFrom<&CompactSaplingOutput> for CompactOutputDescription
zcash_client_backend::scanning
:ScanningKeyOps
has replaced theScanningKey
trait.ScanningKeys
Nullifiers
impl Clone for zcash_client_backend::{ zip321::{Payment, TransactionRequest, Zip321Error, parse::Param, parse::IndexedParam}, wallet::WalletTransparentOutput, proposal::Proposal, }
impl {PartialEq, Eq} for zcash_client_backend::{ zip321::{Zip321Error, parse::Param, parse::IndexedParam}, wallet::WalletTransparentOutput, proposal::Proposal, }
zcash_client_backend::zip321
:TransactionRequest::{total, from_indexed}
parse::Param::name
Changed
- Migrated to
zcash_primitives 0.14
,orchard 0.7
. - Several structs and functions now take an
AccountId
type parameter in order to decouple the concept of an account identifier from the ZIP 32 account index. Many APIs that previously referencedzcash_primitives::zip32::AccountId
now reference the generic type. Impacted types and functions are:zcash_client_backend::data_api
:WalletRead
now has an associatedAccountId
type.WalletRead::{ get_account_birthday, get_current_address, get_unified_full_viewing_keys, get_account_for_ufvk, get_wallet_summary, get_sapling_nullifiers, get_transparent_receivers, get_transparent_balances, get_account_ids }
now refer to theWalletRead::AccountId
associated type.WalletWrite::{create_account, get_next_available_address}
now refer to theWalletRead::AccountId
associated type.ScannedBlock
now takes an additionalAccountId
type parameter.DecryptedTransaction
is now parameterized byAccountId
SentTransaction
is now parameterized byAccountId
SentTransactionOutput
is now parameterized byAccountId
WalletSummary
is now parameterized byAccountId
zcash_client_backend::decrypt
DecryptedOutput
is now parameterized byAccountId
decrypt_transaction
is now parameterized byAccountId
zcash_client_backend::scanning::scan_block
is now parameterized byAccountId
zcash_client_backend::wallet
:Recipient
now takes an additionalAccountId
type parameter.WalletTx
now takes an additionalAccountId
type parameter.WalletSaplingSpend
now takes an additionalAccountId
type parameter.WalletSaplingOutput
now takes an additionalAccountId
type parameter.
zcash_client_backend::data_api
:BlockMetadata::sapling_tree_size
now returns anOption<u32>
instead of au32
for future consistency with Orchard.ScannedBlock
is no longer parameterized by the nullifier type as a consequence of theWalletTx
change.ScannedBlock::metadata
has been renamed toto_block_metadata
and now returns an owned value rather than a reference.- Fields of
Balance
andAccountBalance
have been made private and the values of these fields have been made available via methods having the same names as the previously-public fields. WalletSummary::new
now takes an additionalnext_sapling_subtree_index
argument.WalletSummary::new
now takes aHashMap
instead of aBTreeMap
for itsaccount_balances
argument.WalletSummary::account_balances
now returns aHashMap
instead of aBTreeMap
.- Changes to the
WalletRead
trait:- Added associated type
AccountId
. - Added
get_account
function. get_checkpoint_depth
has been removed without replacement. This is no longer needed given the change to use the stored anchor height for transaction proposal execution.is_valid_account_extfvk
has been removed; it was unused in the ECC mobile wallet SDKs and has been superseded byget_account_for_ufvk
.get_spendable_sapling_notes
,select_spendable_sapling_notes
, andget_unspent_transparent_outputs
have been removed; usedata_api::InputSource
instead.- Added
get_account_ids
. get_transparent_receivers
andget_transparent_balances
are now guarded by thetransparent-inputs
feature flag, with noop default implementations provided.get_transparent_receivers
now returnsOption<zcash_client_backend::wallet::TransparentAddressMetadata>
as part of its result where previously it returnedzcash_keys::address::AddressMetadata
.
- Added associated type
WalletWrite::get_next_available_address
now takes an additionalUnifiedAddressRequest
argument.chain::scan_cached_blocks
now returns aScanSummary
containing metadata about the scanned blocks on success.error::Error
enum changes:- The
NoteMismatch
variant now wraps aNoteId
instead of a backend-specific note identifier. The relatedNoteRef
type parameter has been removed fromerror::Error
. - New variants have been added:
Error::UnsupportedChangeType
Error::NoSupportedReceivers
Error::NoSpendingKey
Error::Proposal
Error::ProposalNotSupported
- Variant
ChildIndexOutOfRange
has been removed.
- The
wallet
:shield_transparent_funds
no longer takes amemo
argument; instead, memos to be associated with the shielded outputs should be specified in the construction of the value of theinput_selector
argument, which is used to construct the proposed shielded values as internal "change" outputs. Also, it returns its result as aNonEmpty<TxId>
instead of a singleTxId
.create_proposed_transaction
has been replaced bycreate_proposed_transactions
. Relative to the prior method, the new method has the following changes:- It no longer takes a
change_memo
argument; instead, change memos are represented in the individual values of theproposed_change
field of theProposal
'sTransactionBalance
. create_proposed_transactions
takes itsproposal
argument by reference instead of as an owned value.create_proposed_transactions
no longer takes amin_confirmations
argument. Instead, it uses the anchor height from itsproposal
argument.create_proposed_transactions
forces implementations to ignore the database identifiers for its contained notes by universally quantifying theNoteRef
type parameter.- It returns a
NonEmpty<TxId>
instead of a singleTxId
value.
- It no longer takes a
create_spend_to_address
now takes additionalchange_memo
andfallback_change_pool
arguments. It also returns its result as aNonEmpty<TxId>
instead of a singleTxId
.spend
returns its result as aNonEmpty<TxId>
instead of a singleTxId
.- The error type of
create_spend_to_address
has been changed to usezcash_primitives::transaction::fees::zip317::FeeError
instead ofzcash_primitives::transaction::components::amount::BalanceError
. Yes this is confusing becausecreate_spend_to_address
is explicitly not using ZIP 317 fees; it's just an artifact of the internal implementation, and the error variants are not specific to ZIP 317. - The following methods now take
&impl SpendProver, &impl OutputProver
instead ofimpl TxProver
:create_proposed_transactions
create_spend_to_address
shield_transparent_funds
spend
propose_shielding
andshield_transparent_funds
now take theirmin_confirmations
arguments asu32
rather than aNonZeroU32
, to permit implementations to enable zero-conf shielding.input_selection
:InputSelector::propose_shielding
has been moved out to the newly-createdShieldingSelector
trait.ShieldingSelector::propose_shielding
has been altered such that it takes an explicittarget_height
in order to minimize the capabilities that thedata_api::InputSource
trait must expose. Also, it now takes itsmin_confirmations
argument asu32
instead ofNonZeroU32
.
- The
InputSelector::DataSource
associated type has been renamed toInputSource
. InputSelectorError
has added variantProposal
.- The signature of
InputSelector::propose_transaction
has been altered such that it longer takesmin_confirmations
as an argument, instead taking explicittarget_height
andanchor_height
arguments. This helps to minimize the set of capabilities that thedata_api::InputSource
must expose. GreedyInputSelector
now has relaxed requirements for itsInputSource
associated type.
zcash_client_backend::proposal
:- Arguments to
Proposal::from_parts
have changed. Proposal::min_anchor_height
has been removed in favor of storing this value inSaplingInputs
.Proposal::sapling_inputs
has been replaced byProposal::shielded_inputs
- In addition to having been moved to the
zcash_client_backend::proposal
module, theProposal
type has been substantially modified in order to make it possible to represent multi-step transactions, such as a deshielding transaction followed by a zero-conf transfer as required by ZIP 320. Individual transaction proposals are now represented by theproposal::Step
type. ProposalError
has new variants:ReferenceError
StepDoubleSpend
ChainDoubleSpend
PaymentPoolsMismatch
- Arguments to
zcash_client_backend::fees
:ChangeStrategy::compute_balance
arguments have changed.ChangeValue
is now a struct. In addition to the existing change value, it now also provides the output pool to which change should be sent and an optional memo to be associated with the change output.ChangeError
has a newBundleError
variant.fixed::SingleOutputChangeStrategy::new
,zip317::SingleOutputChangeStrategy::new
, andstandard::SingleOutputChangeStrategy::new
each now accept additionalchange_memo
andfallback_change_pool
arguments.
zcash_client_backend::wallet
:Recipient
is now polymorphic in the type of the payload for wallet-internal recipients. This simplifies the handling of wallet-internal outputs.SentTransactionOutput::from_parts
now takes aRecipient<Note>
.SentTransactionOutput::recipient
now returns aRecipient<Note>
.OvkPolicy::Custom
is now a structured variant that can contain independent Sapling and OrchardOutgoingViewingKey
s.WalletSaplingOutput::from_parts
arguments have changed.WalletSaplingOutput::nf
now returns anOption<sapling::Nullifier>
.WalletTx
is no longer parameterized by the nullifier type; instead, the nullifier is present as an optional value.
zcash_client_backend::scanning
:- Arguments to
scan_blocks
have changed. ScanError
has new variantsTreeSizeInvalid
andEncodingInvalid
.ScanningKey
is now a concrete type that bundles an incoming viewing key with an optional nullifier key and key source metadata. The trait that provides uniform access to scanning key information is nowScanningKeyOps
.
- Arguments to
zcash_client_backend::zip321
:TransactionRequest::payments
now returns aBTreeMap<usize, Payment>
instead of&[Payment]
so that parameter indices may be preserved.TransactionRequest::to_uri
now returns aString
instead of anOption<String>
and provides canonical serialization for the empty proposal.TransactionRequest::from_uri
previously stripped payment indices, meaning that round-trip serialization was not supported. Payment indices are now retained.
- The following fields now have type
NonNegativeAmount
instead ofAmount
:zcash_client_backend::data_api
:error::Error::InsufficientFunds.{available, required}
wallet::input_selection::InputSelectorError::InsufficientFunds.{available, required}
zcash_client_backend::fees
:ChangeError::InsufficientFunds.{available, required}
zcash_client_backend::zip321::Payment.amount
- The following methods now take
NonNegativeAmount
instead ofAmount
:zcash_client_backend::data_api
:SentTransactionOutput::from_parts
wallet::create_spend_to_address
wallet::input_selection::InputSelector::propose_shielding
zcash_client_backend::fees
:ChangeValue::sapling
DustOutputPolicy::new
TransactionBalance::new
- The following methods now return
NonNegativeAmount
instead ofAmount
:zcash_client_backend::data_api::SentTransactionOutput::value
zcash_client_backend::fees
:ChangeValue::value
DustOutputPolicy::dust_threshold
TransactionBalance::{fee_required, total}
zcash_client_backend::wallet::WalletTransparentOutput::value
Deprecated
zcash_client_backend::data_api::wallet
:spend
(usepropose_transfer
andcreate_proposed_transactions
instead).
Removed
zcash_client_backend::wallet
:ReceivedSaplingNote
(usezcash_client_backend::ReceivedNote
instead).input_selection::{Proposal, ShieldedInputs, ProposalError}
(moved tozcash_client_backend::proposal
).SentTransactionOutput::sapling_change_to
- the note created by an internal transfer is now conveyed in therecipient
field.WalletSaplingOutput::cmu
(useWalletSaplingOutput::note
andsapling_crypto::Note::cmu
instead).WalletSaplingOutput::account
(useWalletSaplingOutput::account_id
instead)WalletSaplingSpend::account
(useWalletSaplingSpend::account_id
instead)WalletTx
fields{txid, index, sapling_spends, sapling_outputs}
(use the new getters instead.)
zcash_client_backend::data_api
:{PoolType, ShieldedProtocol}
(moved tozcash_client_backend
).{NoteId, Recipient}
(moved tozcash_client_backend::wallet
).ScannedBlock::from_parts
ScannedBlock::{sapling_tree_size, sapling_nullifier_map, sapling_commitments}
(useScannedBundles::{tree_size, nullifier_map, commitments}
instead).ScannedBlock::into_sapling_commitments
(useScannedBlock::into_commitments
instead).wallet::create_proposed_transaction
(usewallet::create_proposed_transactions
instead).chain::ScanSummary::from_parts
zcash_client_backend::proposal
:Proposal::min_anchor_height
(useShieldedInputs::anchor_height
instead).Proposal::sapling_inputs
(useProposal::shielded_inputs
instead).
[0.10.0] - 2023-09-25
Notable Changes
zcash_client_backend
now supports out-of-order scanning of blockchain history. See the module documentation forzcash_client_backend::data_api::chain
for details on how to make use of the new scanning capabilities.- This release of
zcash_client_backend
defines the concept of an account birthday. The account birthday is defined as the minimum height among blocks to be scanned when recovering an account. - Account creation now requires the caller to provide account birthday information, including the state of the note commitment tree at the end of the block prior to the birthday height. A wallet's birthday is the earliest birthday height among accounts maintained by the wallet.
Added
impl Eq for zcash_client_backend::address::RecipientAddress
impl Eq for zcash_client_backend::zip321::{Payment, TransactionRequest}
impl Debug
forzcash_client_backend::{data_api::wallet::input_selection::Proposal, wallet::ReceivedSaplingNote}
zcash_client_backend::data_api
:AccountBalance
AccountBirthday
Balance
BirthdayError
BlockMetadata
NoteId
NullifierQuery
for use withWalletRead::get_sapling_nullifiers
Ratio
ScannedBlock
ShieldedProtocol
WalletCommitmentTrees
WalletSummary
WalletRead::{ chain_height, block_metadata, block_max_scanned, block_fully_scanned, suggest_scan_ranges, get_wallet_birthday, get_account_birthday, get_wallet_summary }
WalletWrite::{put_blocks, update_chain_tip}
chain::CommitmentTreeRoot
scanning
A new module containing types required forsuggest_scan_ranges
testing::MockWalletDb::new
wallet::input_selection::Proposal::{min_target_height, min_anchor_height}
SAPLING_SHARD_HEIGHT
constant
zcash_client_backend::proto::compact_formats
:impl<A: sapling::Authorization> From<&sapling::SpendDescription<A>> for CompactSaplingSpend
impl<A: sapling::Authorization> From<&sapling::OutputDescription<A>> for CompactSaplingOutput
impl<SpendAuth> From<&orchard::Action<SpendAuth>> for CompactOrchardAction
zcash_client_backend::wallet::WalletSaplingOutput::note_commitment_tree_position
zcash_client_backend::scanning
:ScanError
impl<K: ScanningKey> ScanningKey for &K
impl ScanningKey for (zip32::Scope, sapling::SaplingIvk, sapling::NullifierDerivingKey)
- Test utility functions
zcash_client_backend::keys::UnifiedSpendingKey::{default_address, default_transparent_address}
are now available under thetest-dependencies
feature flag.
Changed
- MSRV is now 1.65.0.
- Bumped dependencies to
hdwallet 0.4
,zcash_primitives 0.13
,zcash_note_encryption 0.4
,incrementalmerkletree 0.5
,orchard 0.6
,bs58 0.5
,tempfile 3.5.0
,prost 0.12
,tonic 0.10
. zcash_client_backend::data_api
:WalletRead::TxRef
has been removed in favor of consistently usingTxId
instead.WalletRead::get_transaction
now takes aTxId
as its argument.WalletRead::create_account
now takes an additionalbirthday
argument.WalletWrite::{store_decrypted_tx, store_sent_tx}
now returnResult<(), Self::Error>
as theWalletRead::TxRef
associated type has been removed. UseWalletRead::get_transaction
with the transaction'sTxId
instead.WalletRead::get_memo
now takes aNoteId
as its argument instead ofSelf::NoteRef
and returnsResult<Option<Memo>, Self::Error>
instead ofResult<Memo, Self::Error>
in order to make representable wallet states where the full note plaintext is not available.WalletRead::get_nullifiers
has been renamed toWalletRead::get_sapling_nullifiers
and its signature has changed; it now subsumes the removedWalletRead::get_all_nullifiers
.WalletRead::get_target_and_anchor_heights
now takes its argument as aNonZeroU32
chain::scan_cached_blocks
now takes afrom_height
argument that permits the caller to control the starting position of the scan range. In addition, thelimit
parameter is now required and has typeusize
.chain::BlockSource::with_blocks
now takes its limit as anOption<usize>
instead ofOption<u32>
. It is also now required to return an error iffrom_height
is set to a block that does not exist inself
.- A new
CommitmentTree
variant has been added todata_api::error::Error
wallet::{create_spend_to_address, create_proposed_transaction, shield_transparent_funds}
all now require thatWalletCommitmentTrees
be implemented for the type passed to them for thewallet_db
parameter.wallet::create_proposed_transaction
now takes an additionalmin_confirmations
argument.wallet::{spend, create_spend_to_address, shield_transparent_funds, propose_transfer, propose_shielding, create_proposed_transaction}
now take their respectivemin_confirmations
arguments asNonZeroU32
- A new
Scan
variant replaces theChain
variant ofdata_api::chain::error::Error
. TheNoteRef
parameter todata_api::chain::error::Error
has been removed in favor of usingNoteId
to report the specific note for which a failure occurred. - A new
SyncRequired
variant has been added todata_api::wallet::input_selection::InputSelectorError
. - The variants of the
PoolType
enum have changed; thePoolType::Sapling
variant has been removed in favor of aPoolType::Shielded
variant that wraps aShieldedProtocol
value.
zcash_client_backend::wallet
:SpendableNote
has been renamed toReceivedSaplingNote
.- Arguments to
WalletSaplingOutput::from_parts
have changed.
zcash_client_backend::data_api::wallet::input_selection::InputSelector
:- Arguments to
{propose_transaction, propose_shielding}
have changed. InputSelector::{propose_transaction, propose_shielding}
now take their respectivemin_confirmations
arguments asNonZeroU32
- Arguments to
zcash_client_backend::data_api::wallet::{create_spend_to_address, spend, create_proposed_transaction, shield_transparent_funds}
now return theTxId
for the newly created transaction instead an internal database identifier.zcash_client_backend::wallet::ReceivedSaplingNote::note_commitment_tree_position
has replaced thewitness
field in the same struct.zcash_client_backend::welding_rig
has been renamed tozcash_client_backend::scanning
zcash_client_backend::scanning::ScanningKey::sapling_nf
has been changed to take a note position instead of an incremental witness for the note.- Arguments to
zcash_client_backend::scanning::scan_block
have changed. This method now takes an optionalBlockMetadata
argument instead of a base commitment tree and incremental witnesses for each previously-known note. In addition, the return type has now been updated to return aResult<ScannedBlock, ScanError>
. zcash_client_backend::proto::service
:- The module is no longer behind the
lightwalletd-tonic
feature flag; that now only gates theservice::compact_tx_streamer_client
submodule. This exposes the service types to parse messages received by other gRPC clients. - The module has been updated to include the new gRPC endpoints supported by
lightwalletd
v0.4.15.
- The module is no longer behind the
Removed
zcash_client_backend::data_api
:WalletRead::block_height_extrema
has been removed. Usechain_height
instead to obtain the wallet's view of the chain tip instead, orsuggest_scan_ranges
to obtain information about blocks that need to be scanned.WalletRead::get_balance_at
has been removed. UseWalletRead::get_wallet_summary
instead.WalletRead::{get_all_nullifiers, get_commitment_tree, get_witnesses}
have been removed without replacement. The utility of these methods is now subsumed by those available from theWalletCommitmentTrees
trait.WalletWrite::advance_by_block
(useWalletWrite::put_blocks
instead).PrunedBlock
has been replaced byScannedBlock
testing::MockWalletDb
, which is available under thetest-dependencies
feature flag, has been modified by the addition of asapling_tree
property.wallet::input_selection
:Proposal::target_height
(useProposal::min_target_height
instead).
zcash_client_backend::data_api::chain::validate_chain
(logic merged intochain::scan_cached_blocks
).zcash_client_backend::data_api::chain::error::{ChainError, Cause}
have been replaced byzcash_client_backend::scanning::ScanError
zcash_client_backend::proto::compact_formats
:impl<A> From<sapling::OutputDescription<A>> for CompactSaplingOutput
(useFrom<&sapling::OutputDescription<A>>
instead).
zcash_client_backend::wallet::WalletSaplingOutput::{witness, witness_mut}
have been removed as individual incremental witnesses are no longer tracked on a per-note basis. The global note commitment tree for the wallet should be used to obtain witnesses for spend operations instead.- Default implementations of
zcash_client_backend::data_api::WalletRead::{ get_target_and_anchor_heights, get_max_height_hash }
have been removed. These should be implemented in a backend-specific fashion.
[0.9.0] - 2023-04-28
Added
data_api::SentTransactionOutput::from_parts
data_api::WalletRead::get_min_unspent_height
Changed
decrypt::DecryptedOutput
is now parameterized by aNote
type parameter, to allow reuse of the data structure for non-Sapling contexts.data_api::SentTransactionOutput
must now be constructed usingSentTransactionOutput::from_parts
. The internal state ofSentTransactionOutput
is now private, and accessible via methods that have the same names as the previously exposed fields.
Renamed
- The following types and fields have been renamed in preparation for supporting
orchard
in wallet APIs:WalletTx::shielded_spends
->WalletTx::sapling_spends
WalletTx::shielded_outputs
->WalletTx::sapling_outputs
WalletShieldedSpend
->WalletSaplingSpend
. Also, the internals of this data structure have been made private.WalletShieldedOutput
->WalletSaplingOutput
. Also, the internals of this data structure have been made private.
- The
data_api::WalletWrite::rewind_to_height
method has been renamed totruncate_to_height
to better reflect its semantics.
Removed
wallet::WalletTx::num_spends
wallet::WalletTx::num_outputs
wallet::WalletSaplingOutput::to
is redundant and has been removed; the recipient address can be obtained from the note.decrypt::DecryptedOutput::to
is redundant and has been removed; the recipient address can be obtained from the note.
[0.8.0] - 2023-04-15
Changed
- Bumped dependencies to
bls12_381 0.8
,group 0.13
,orchard 0.4
,tonic 0.9
,base64 0.21
,bech32 0.9
,zcash_primitives 0.11
. - The dependency on
zcash_primitives
no longer enables themulticore
feature by default in order to support compilation underwasm32-wasi
. Users of other platforms may need to include an explicit dependency onzcash_primitives
withoutdefault-features = false
or otherwise explicitly enable thezcash_primitives/multicore
feature if they did not already depend uponzcash_primitives
with default features enabled.
Fixed
zcash_client_backend::fees::zip317::SingleOutputChangeStrategy
now takes into account the Sapling output padding behaviour ofzcash_primitives::transaction::components::sapling::builder::SaplingBuilder
.
[0.7.0] - 2023-02-01
Added
zcash_client_backend::data_api::wallet
:input_selection::Proposal::{is_shielding, target_height}
propose_transfer
propose_shielding
create_proposed_transaction
Changed
- MSRV is now 1.60.0.
- Bumped dependencies to
zcash_primitives 0.10
. zcash_client_backend::data_api::chain
:BlockSource::with_blocks
now takesfrom_height
asOption<BlockHeight>
instead ofBlockHeight
. Trait implementors should return all available blocks in the datastore whenfrom_height
isNone
.- Various breaking changes to
validate_chain
:- The
parameters: &ParamsT
argument has been removed. WhenNone
is given as thevalidate_from
argument,validate_chain
will now passNone
toBlockSource::with_blocks
(instead of the Sapling network upgrade's activation height). - A
limit: Option<u32>
argument has been added. This enables callers to validate smaller intervals of blocks already present on the providedBlockSource
, shortening processing times of the function call at the expense of obtaining a partial result. When providing alimit
, a result ofOk(())
means that the chain has been validated on its continuity of heights and hashes in the range[validate_from, validate_from + limit)
. Callers are responsible for making subsequent calls tovalidate_chain
in order to complete validating the totality ofblock_source
.
- The
zcash_client_backend::data_api::wallet
:input_selection::Proposal
no longer has aTransparentInput
generic parameter, andProposal::transparent_inputs
now returns&[zcash_client_backend::wallet::WalletTransparentOutput]
.shield_transparent_funds
now takes ashielding_threshold
argument that can be used to specify the minimum value allowed as input to a shielding transaction. Previously the shielding threshold was fixed at 100000 zatoshis.
- Note commitments now use
zcash_primitives::sapling::note::ExtractedNoteCommitment
instead ofbls12_381::Scalar
in the following places:- The
cmu
field ofzcash_client_backend::wallet::WalletShieldedOutput
. zcash_client_backend::proto::compact_formats::CompactSaplingOutput::cmu
.
- The
Removed
zcash_client_backend::data_api
:WalletWrite::remove_unmined_tx
(was behind theunstable
feature flag).
[0.6.1] - 2022-12-06
Added
zcash_client_backend::data_api::chain::scan_cached_blocks
now generatestracing
spans, which can be used for profiling.
Fixed
zcash_client_backend:zip321
no longer returns an error when trying to parse a URI without query parameters.
[0.6.0] - 2022-11-12
Added
- Functionality that enables the receiving and spending of transparent funds,
behind the new
transparent-inputs
feature flag.- A new
zcash_client_backend::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 oftransparent-inputs
functionality.
- A new
- 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
impl Eq for UnifiedAddress
zcash_client_backend::data_api
:wallet::spend
method, intended to supersede thewallet::create_spend_to_address
method. This new method now constructs transactions via interpretation of azcash_client_backend::zip321::TransactionRequest
value. This facilitates the implementation of ZIP 321 support in wallets and provides substantially greater flexibility in transaction creation.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 theunstable
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 that can occur only in chain validation and sync, 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 oncompact_formats::CompactTx
compact_formats::CompactOrchardAction
- gRPC bindings for the
lightwalletd
server, behind alightwalletd-tonic
feature flag.
zcash_client_backend::zip321::TransactionRequest
methods:TransactionRequest::empty
for constructing a new empty request.TransactionRequest::new
for constructing a request fromVec<Payment>
.TransactionRequest::payments
for accessing thePayments
that make up a request.
zcash_client_backend::encoding
KeyError
AddressCodec
implementations forsapling::PaymentAddress
andUnifiedAddress
.
zcash_client_backend::fees
ChangeError
ChangeStrategy
ChangeValue
TransactionBalance
fixed
, a module containing change selection strategies for the old fixed fee rule.zip317
, a 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
Changed
- MSRV is now 1.56.1.
- Bumped dependencies to
ff 0.12
,group 0.12
,bls12_381 0.7
zcash_primitives 0.9
,orchard 0.3
. zcash_client_backend::proto
:- The Protocol Buffers bindings are now generated for
prost 0.11
instead ofprotobuf 2
. compact_formats::CompactSpend
has been renamed toCompactSaplingSpend
, and itsepk
field (and associatedset_epk
method) has been renamed toephemeralKey
(andset_ephemeralKey
).compact_formats::CompactOutput
has been renamed toCompactSaplingOutput
.
- The Protocol Buffers bindings are now generated for
epk: jubjub::ExtendedPoint
has been replaced byephemeral_key: zcash_note_encryption::EphemeralKeyBytes
in various places:zcash_client_backend::wallet::WalletShieldedOutput
: theepk
field has been replaced byephemeral_key
.zcash_client_backend::proto::compact_formats::CompactSaplingOutput
: theepk
method has been replaced byephemeral_key
.
zcash_client_backend::data_api
:- Renamed the following to use lower-case abbreviations (matching Rust naming
conventions):
testing::MockWalletDB
totesting::MockWalletDb
- Changes to the
WalletRead
trait:WalletRead::get_target_and_anchor_heights
now takes amin_confirmations
argument that is used to compute an upper bound on the anchor height being returned; this had previously been hardcoded towallet::ANCHOR_OFFSET
.WalletRead::get_spendable_notes
has been renamed toget_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 toselect_spendable_sapling_notes
, and now takes as an argument a vector of note IDs to be excluded from consideration.- The
WalletRead::NoteRef
andWalletRead::TxRef
associated types are now required to implementEq
andOrd
WalletWrite::store_received_tx
has been renamed tostore_decrypted_tx
.wallet::decrypt_and_store_transaction
now always stores the transaction by callingWalletWrite::store_decrypted_tx
, even if no outputs could be decrypted. The error type produced by the providedWalletWrite
instance is also now returned directly.- The
SentTransaction
type has been substantially modified to accommodate handling of transparent inputs. Per-output data has been split out into a new structSentTransactionOutput
, andSentTransaction
can now contain multiple outputs, and tracks the fee paid. ReceivedTransaction
has been renamed toDecryptedTransaction
, and itsoutputs
field has been renamed tosapling_outputs
.BlockSource
has been moved to thechain
module.- The types of the
with_row
callback argument toBlockSource::with_blocks
and the return type of this method have been modified to returnchain::error::Error
. testing::MockBlockSource
has been moved tochain::testing::MockBlockSource
module.chain::{validate_chain, scan_cached_blocks}
have altered parameters and result types. The latter have been modified to returnchain::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.error::ChainInvalid
has been moved tochain::error
.error::Error
has been substantially modified. It now wraps database, note selection, builder, and other errors.- Added new error cases:
Error::DataSource
Error::NoteSelection
Error::BalanceError
Error::MemoForbidden
Error::AddressNotRecognized
Error::ChildIndexOutOfRange
Error::NoteMismatch
Error::InsufficientBalance
has been renamed toInsufficientFunds
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 bychain::ChainError
.Error::InvalidNewWitnessAnchor
andError::InvalidWitnessAnchor
have been moved tochain::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.
- Added new error cases:
- Renamed the following to use lower-case abbreviations (matching Rust naming
conventions):
zcash_client_backend::decrypt
:decrypt_transaction
now takes aHashMap<_, UnifiedFullViewingKey>
instead ofHashMap<_, 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 thezcash_client_backend::keys::sapling
module.zcash_client_backend::zip321::MemoError
has been renamed and expanded into a more comprehensiveZip321Error
type, and functions in thezip321
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)
zcash_client_backend::welding_rig
:- The API of
ScanningKey
has changed to accommodate batch decryption and to correctly handle scanning with the internal (change) keys derived from ZIP 316 UFVKs and UIVKs. scan_block
now uses batching for trial-decryption of transaction outputs.
- The API of
- 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 additionalnote_id
field that is used to hold the identifier used to refer to the note in the wallet database.
Deprecated
zcash_client_backend::data_api::wallet::create_spend_to_address
has been deprecated. Usezcash_client_backend::data_api::wallet::spend
instead. If you wish to continue usingcreate_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 amin_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
:wallet::ANCHOR_OFFSET
WalletRead::get_extended_full_viewing_keys
(useWalletRead::get_unified_full_viewing_keys
instead).WalletRead::get_address
(useWalletRead::get_current_address
orWalletWrite::get_next_available_address
instead.)impl From<protobuf::ProtobufError> for error::Error
zcash_client_backend::proto::compact_formats
:Compact*::new
methods (useDefault::default
or struct instantiation instead).- Getters (use dedicated typed methods or direct field access instead).
- Setters (use direct field access instead).
zcash_client_backend::wallet::AccountId
(moved tozcash_primitives::zip32::AccountId
).impl zcash_client_backend::welding_rig::ScanningKey for ExtendedFullViewingKey
(useDiversifiableFullViewingKey
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 forzcash_primitives::zip32:ExtendedFullViewingKey
andzcash_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 ajubjub::SubgroupPoint
to ajubjub::ExtendedPoint
, to match the change to thezcash_primitives
decryption APIs:zcash_client_backend::proto::compact_formats::CompactOutput::epk()
- The
epk
field ofzcash_client_backend::wallet::WalletShieldedOutput
.
zcash_client_backend::decrypt
:decrypt_transaction
now takes a variable with typeP: zcash_primitives::consensus::Parameters
.- The
memo
field ofDecryptedOutput
now has typeMemoBytes
.
zcash_client_backend::wallet
:- The
nf
property ofWalletShieldedSpend
now has the typeNullifier
. - The
account
property ofWalletShieldedSpend
andWalletShieldedOutput
now has the typeAccountId
.
- The
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 toscan_block
now has the type&[(AccountId, Nullifier)]
.
Removed
zcash_client_backend::constants
module (its sub-modules have been moved intozcash_primitives::constants
, and more generally replaced by the new methods on thezcash_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.