Struct TestState

Source
pub struct TestState<Cache, DataStore: WalletTest, Network> { /* private fields */ }
Available on crate feature test-dependencies only.
Expand description

The state for a zcash_client_backend test.

Implementations§

Source§

impl<Cache, DataStore: WalletTest, Network> TestState<Cache, DataStore, Network>

Source

pub fn wallet(&self) -> &DataStore

Exposes an immutable reference to the test’s DataStore.

Source

pub fn wallet_mut(&mut self) -> &mut DataStore

Exposes a mutable reference to the test’s DataStore.

Source

pub fn rng_mut(&mut self) -> &mut ChaChaRng

Exposes the test framework’s source of randomness.

Source

pub fn network(&self) -> &Network

Exposes the network in use.

Source§

impl<Cache, DataStore: WalletTest, Network: Parameters> TestState<Cache, DataStore, Network>

Source

pub fn sapling_activation_height(&self) -> BlockHeight

Convenience method for obtaining the Sapling activation height for the network under test.

Source

pub fn nu5_activation_height(&self) -> BlockHeight

Convenience method for obtaining the NU5 activation height for the network under test.

Source

pub fn test_seed(&self) -> Option<&SecretVec<u8>>

Exposes the seed for the test wallet.

Source

pub fn test_account( &self, ) -> Option<&TestAccount<<DataStore as WalletRead>::Account>>

Returns a reference to the test account, if one was configured.

Source

pub fn test_account_sapling(&self) -> Option<&DiversifiableFullViewingKey>

Returns the test account’s Sapling DFVK, if one was configured.

Source

pub fn test_account_orchard(&self) -> Option<&FullViewingKey>

Available on crate feature orchard only.

Returns the test account’s Orchard FVK, if one was configured.

Source§

impl<Cache: TestCache, DataStore, Network> TestState<Cache, DataStore, Network>
where Network: Parameters, DataStore: WalletTest + WalletWrite, <Cache::BlockSource as BlockSource>::Error: Debug,

Source

pub fn cache(&self) -> &Cache::BlockSource

Available on crate feature unstable only.

Exposes an immutable reference to the test’s BlockSource.

Source

pub fn latest_cached_block(&self) -> Option<&CachedBlock>

Returns the cached chain state corresponding to the latest block generated by this TestState.

Source

pub fn generate_next_block<Fvk: TestFvk>( &mut self, fvk: &Fvk, address_type: AddressType, value: Zatoshis, ) -> (BlockHeight, Cache::InsertResult, Fvk::Nullifier)

Creates a fake block at the expected next height containing a single output of the given value, and inserts it into the cache.

Source

pub fn generate_next_block_multi<Fvk: TestFvk>( &mut self, outputs: &[FakeCompactOutput<Fvk>], ) -> (BlockHeight, Cache::InsertResult, Vec<Fvk::Nullifier>)

Creates a fake block at the expected next height containing multiple outputs and inserts it into the cache.

Source

pub fn generate_empty_block(&mut self) -> (BlockHeight, Cache::InsertResult)

Adds an empty block to the cache, advancing the simulated chain height.

Source

pub fn generate_block_at<Fvk: TestFvk>( &mut self, height: BlockHeight, prev_hash: BlockHash, outputs: &[FakeCompactOutput<Fvk>], initial_sapling_tree_size: u32, initial_orchard_tree_size: u32, allow_broken_hash_chain: bool, ) -> (Cache::InsertResult, Vec<Fvk::Nullifier>)

Creates a fake block with the given height and hash containing the requested outputs, and inserts it into the cache.

This generated block will be treated as the latest block, and subsequent calls to Self::generate_next_block will build on it.

Source

pub fn generate_next_block_spending<Fvk: TestFvk>( &mut self, fvk: &Fvk, note: (Fvk::Nullifier, Zatoshis), to: impl Into<Address>, value: Zatoshis, ) -> (BlockHeight, Cache::InsertResult)

Creates a fake block at the expected next height spending the given note, and inserts it into the cache.

Source

pub fn generate_next_block_including( &mut self, txid: TxId, ) -> (BlockHeight, Cache::InsertResult)

Creates a fake block at the expected next height containing only the wallet transaction with the given txid, and inserts it into the cache.

This generated block will be treated as the latest block, and subsequent calls to Self::generate_next_block (or similar) will build on it.

Source

pub fn generate_next_block_from_tx( &mut self, tx_index: usize, tx: &Transaction, ) -> (BlockHeight, Cache::InsertResult)

Creates a fake block at the expected next height containing only the given transaction, and inserts it into the cache.

This generated block will be treated as the latest block, and subsequent calls to Self::generate_next_block will build on it.

Source

pub fn truncate_to_height(&mut self, height: BlockHeight)

Truncates the test wallet and block cache to the specified height, discarding all data from blocks at heights greater than the specified height, excluding transaction data that may not be recoverable from the chain.

Source

pub fn truncate_to_height_retaining_cache(&mut self, height: BlockHeight)

Truncates the test wallet to the specified height, and resets the cache’s latest block height but does not truncate the block cache. This is useful for circumstances when you want to re-scan a set of cached blocks.

Source§

impl<Cache, DbT, ParamsT> TestState<Cache, DbT, ParamsT>
where Cache: TestCache, <Cache::BlockSource as BlockSource>::Error: Debug, ParamsT: Parameters + Send + 'static, DbT: InputSource + WalletTest + WalletWrite + WalletCommitmentTrees, <DbT as WalletRead>::AccountId: Debug + ConditionallySelectable + Default + Send + 'static,

Source

pub fn scan_cached_blocks( &mut self, from_height: BlockHeight, limit: usize, ) -> ScanSummary

Invokes scan_cached_blocks with the given arguments, expecting success.

Source

pub fn try_scan_cached_blocks( &mut self, from_height: BlockHeight, limit: usize, ) -> Result<ScanSummary, Error<<DbT as WalletRead>::Error, <Cache::BlockSource as BlockSource>::Error>>

Invokes scan_cached_blocks with the given arguments.

Source

pub fn put_subtree_roots( &mut self, sapling_start_index: u64, sapling_roots: &[CommitmentTreeRoot<Node>], orchard_start_index: u64, orchard_roots: &[CommitmentTreeRoot<MerkleHashOrchard>], ) -> Result<(), ShardTreeError<<DbT as WalletCommitmentTrees>::Error>>

Insert shard roots for both trees.

Source§

impl<Cache, DbT, ParamsT, AccountIdT, ErrT> TestState<Cache, DbT, ParamsT>
where ParamsT: Parameters + Send + 'static, AccountIdT: Debug + Eq + Hash, ErrT: Debug, DbT: InputSource<AccountId = AccountIdT, Error = ErrT> + WalletTest + WalletWrite<AccountId = AccountIdT, Error = ErrT> + WalletCommitmentTrees, <DbT as WalletRead>::AccountId: ConditionallySelectable + Default + Send + 'static,

Source

pub fn create_standard_transaction( &mut self, from_account: &TestAccount<DbT::Account>, to: ZcashAddress, value: Zatoshis, ) -> Result<NonEmpty<TxId>, TransferErrT<DbT, GreedyInputSelector<DbT>, MultiOutputChangeStrategy<DbT>>>

Source

pub fn spend<InputsT, ChangeT>( &mut self, input_selector: &InputsT, change_strategy: &ChangeT, usk: &UnifiedSpendingKey, request: TransactionRequest, ovk_policy: OvkPolicy, min_confirmations: NonZeroU32, ) -> Result<NonEmpty<TxId>, TransferErrT<DbT, InputsT, ChangeT>>
where InputsT: InputSelector<InputSource = DbT>, ChangeT: ChangeStrategy<MetaSource = DbT>,

Prepares and executes the given zip321::TransactionRequest in a single step.

Source

pub fn propose_transfer<InputsT, ChangeT>( &mut self, spend_from_account: <DbT as InputSource>::AccountId, input_selector: &InputsT, change_strategy: &ChangeT, request: TransactionRequest, min_confirmations: NonZeroU32, ) -> Result<Proposal<ChangeT::FeeRule, <DbT as InputSource>::NoteRef>, ProposeTransferErrT<DbT, Infallible, InputsT, ChangeT>>
where InputsT: InputSelector<InputSource = DbT>, ChangeT: ChangeStrategy<MetaSource = DbT>,

Invokes propose_transfer with the given arguments.

Source

pub fn propose_standard_transfer<CommitmentTreeErrT>( &mut self, spend_from_account: <DbT as InputSource>::AccountId, fee_rule: StandardFeeRule, min_confirmations: NonZeroU32, to: &Address, amount: Zatoshis, memo: Option<MemoBytes>, change_memo: Option<MemoBytes>, fallback_change_pool: ShieldedProtocol, ) -> Result<Proposal<StandardFeeRule, <DbT as InputSource>::NoteRef>, ProposeTransferErrT<DbT, CommitmentTreeErrT, GreedyInputSelector<DbT>, SingleOutputChangeStrategy<DbT>>>

Invokes propose_standard_transfer_to_address with the given arguments.

Source

pub fn propose_shielding<InputsT, ChangeT>( &mut self, input_selector: &InputsT, change_strategy: &ChangeT, shielding_threshold: Zatoshis, from_addrs: &[TransparentAddress], to_account: <InputsT::InputSource as InputSource>::AccountId, min_confirmations: u32, ) -> Result<Proposal<ChangeT::FeeRule, Infallible>, ProposeShieldingErrT<DbT, Infallible, InputsT, ChangeT>>
where InputsT: ShieldingSelector<InputSource = DbT>, ChangeT: ChangeStrategy<MetaSource = DbT>,

Available on crate feature transparent-inputs only.

Invokes propose_shielding with the given arguments.

Source

pub fn create_proposed_transactions<InputsErrT, FeeRuleT, ChangeErrT>( &mut self, usk: &UnifiedSpendingKey, ovk_policy: OvkPolicy, proposal: &Proposal<FeeRuleT, <DbT as InputSource>::NoteRef>, ) -> Result<NonEmpty<TxId>, CreateErrT<DbT, InputsErrT, FeeRuleT, ChangeErrT, DbT::NoteRef>>
where FeeRuleT: FeeRule,

Invokes create_proposed_transactions with the given arguments.

Source

pub fn shield_transparent_funds<InputsT, ChangeT>( &mut self, input_selector: &InputsT, change_strategy: &ChangeT, shielding_threshold: Zatoshis, usk: &UnifiedSpendingKey, from_addrs: &[TransparentAddress], to_account: <DbT as InputSource>::AccountId, min_confirmations: u32, ) -> Result<NonEmpty<TxId>, ShieldErrT<DbT, InputsT, ChangeT>>
where InputsT: ShieldingSelector<InputSource = DbT>, ChangeT: ChangeStrategy<MetaSource = DbT>,

Available on crate feature transparent-inputs only.

Invokes shield_transparent_funds with the given arguments.

Source

pub fn get_total_balance(&self, account: AccountIdT) -> Zatoshis

Returns the total balance in the given account at this point in the test.

Source

pub fn get_spendable_balance( &self, account: AccountIdT, min_confirmations: u32, ) -> Zatoshis

Returns the balance in the given account that is spendable with the given number of confirmations at this point in the test.

Source

pub fn get_pending_shielded_balance( &self, account: AccountIdT, min_confirmations: u32, ) -> Zatoshis

Returns the balance in the given account that is detected but not yet spendable with the given number of confirmations at this point in the test.

Source

pub fn get_pending_change( &self, account: AccountIdT, min_confirmations: u32, ) -> Zatoshis

Returns the amount of change in the given account that is not yet spendable with the given number of confirmations at this point in the test.

Source

pub fn get_wallet_summary( &self, min_confirmations: u32, ) -> Option<WalletSummary<AccountIdT>>

Returns a summary of the wallet at this point in the test.

Source§

impl<Cache, DbT, ParamsT, AccountIdT, ErrT> TestState<Cache, DbT, ParamsT>
where ParamsT: Parameters + Send + 'static, AccountIdT: Eq + Hash, ErrT: Debug, DbT: InputSource<AccountId = AccountIdT, Error = ErrT> + WalletTest + WalletWrite<AccountId = AccountIdT, Error = ErrT> + WalletCommitmentTrees, <DbT as WalletRead>::AccountId: ConditionallySelectable + Default + Send + 'static,

Source

pub fn get_tx_from_history( &self, txid: TxId, ) -> Result<Option<TransactionSummary<AccountIdT>>, ErrT>

Returns a transaction from the history.

Source§

impl<Cache, DbT: WalletRead + Reset> TestState<Cache, DbT, LocalNetwork>

Source

pub fn reset(&mut self) -> DbT::Handle

Resets the wallet using a new wallet database but with the same cache of blocks, and returns the old wallet database file.

This does not recreate accounts, nor does it rescan the cached blocks. The resulting wallet has no test account. Before using any generate_* method on the reset state, call reset_latest_cached_block().

Auto Trait Implementations§

§

impl<Cache, DataStore, Network> Freeze for TestState<Cache, DataStore, Network>
where Cache: Freeze, DataStore: Freeze, Network: Freeze, <DataStore as WalletRead>::Account: Freeze,

§

impl<Cache, DataStore, Network> RefUnwindSafe for TestState<Cache, DataStore, Network>
where Cache: RefUnwindSafe, DataStore: RefUnwindSafe, Network: RefUnwindSafe, <DataStore as WalletRead>::Account: RefUnwindSafe,

§

impl<Cache, DataStore, Network> Send for TestState<Cache, DataStore, Network>
where Cache: Send, DataStore: Send, Network: Send, <DataStore as WalletRead>::Account: Send,

§

impl<Cache, DataStore, Network> Sync for TestState<Cache, DataStore, Network>
where Cache: Sync, DataStore: Sync, Network: Sync, <DataStore as WalletRead>::Account: Sync,

§

impl<Cache, DataStore, Network> Unpin for TestState<Cache, DataStore, Network>
where Cache: Unpin, DataStore: Unpin, Network: Unpin, <DataStore as WalletRead>::Account: Unpin,

§

impl<Cache, DataStore, Network> UnwindSafe for TestState<Cache, DataStore, Network>
where Cache: UnwindSafe, DataStore: UnwindSafe, Network: UnwindSafe, <DataStore as WalletRead>::Account: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more