Skip to main content

GreedyInputSelector

Struct GreedyInputSelector 

Source
pub struct GreedyInputSelector<DbT> { /* private fields */ }
Expand description

An InputSelector implementation that uses a greedy strategy to select between available notes.

This implementation performs input selection using methods available via the InputSource interface.

Implementations§

Source§

impl<DbT> GreedyInputSelector<DbT>

Source

pub fn new() -> Self

Constructs a new greedy input selector that uses the provided change strategy to determine change values and fee amounts.

The ChangeStrategy provided must produce exactly one ephemeral change value when computing a transaction balance if an EphemeralBalance::Output value is provided for its ephemeral balance, or the resulting GreedyInputSelector will return an error when attempting to construct a transaction proposal that requires such an output.

Source

pub fn with_shielding_block_space_percent(self, percent: u32) -> Self

Available on crate feature transparent-inputs only.

Sets the maximum fraction of a block’s space, as an integer percentage (0–100), that a single transaction’s transparent inputs may occupy.

When shielding gathers more spendable transparent outputs than will fit within this bound, the highest-value outputs are selected first and the remainder are left unspent, to be consolidated by a subsequent shielding transaction. When a general (non-shielding) transfer’s transparent gather would otherwise require more inputs than fit within this bound, the gather stops at the cap even if the requested value has not yet been reached; the caller’s input-selection loop surfaces this as an InsufficientFunds error, the same as for any other value shortfall. Values above 100 are clamped to 100. Defaults to 10.

Source

pub fn with_locked_input_policy(self, policy: LockedInputPolicy) -> Self

Available on crate feature transparent-inputs only.

Sets the policy governing whether shielding (via ShieldingSelector::propose_shielding and ShieldingSelector::propose_shielding_coinbase) may draw on transparent UTXOs locked by one of the given policy’s owners (default: LockedInputPolicy::Exclude, which never selects a locked output). This overrides a lock only for the purpose of selecting through it during shielding; it does not release the lock.

Trait Implementations§

Source§

impl<DbT> Default for GreedyInputSelector<DbT>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<DbT: InputSource> InputSelector for GreedyInputSelector<DbT>

Source§

type Error = GreedyInputSelectorError

The type of errors that may be generated in input selection
Source§

type InputSource = DbT

The type of data source that the input selector expects to access to obtain input notes. This associated type permits input selectors that may use specialized knowledge of the internals of a particular backing data store, if the generic API of InputSource does not provide sufficiently fine-grained operations for a particular backing store to optimally perform input selection.
Source§

fn propose_transaction<ParamsT, ChangeT>( &self, params: &ParamsT, wallet_db: &Self::InputSource, target_height: TargetHeight, anchor_height: BlockHeight, zip318: &PoolMigrationParams, confirmations_policy: ConfirmationsPolicy, account: <DbT as InputSource>::AccountId, transaction_request: TransactionRequest, change_strategy: &ChangeT, spend_policy: &SpendPolicy, proposed_version: Option<TxVersion>, ) -> Result<Proposal<<ChangeT as ChangeStrategy>::FeeRule, DbT::NoteRef>, InputSelectorError<<DbT as InputSource>::Error, Self::Error, ChangeT::Error, DbT::NoteRef>>
where ParamsT: Parameters, Self::InputSource: InputSource, ChangeT: ChangeStrategy<MetaSource = DbT>,

Performs input selection and returns a proposal for transaction construction including change and fee outputs. Read more
Source§

impl<DbT: InputSource> ShieldingSelector for GreedyInputSelector<DbT>

Available on crate feature transparent-inputs only.
Source§

type Error = GreedyInputSelectorError

The type of errors that may be generated in input selection
Source§

type InputSource = DbT

The type of data source that the input selector expects to access to obtain input transparent UTXOs. This associated type permits input selectors that may use specialized knowledge of the internals of a particular backing data store, if the generic API of InputSource does not provide sufficiently fine-grained operations for a particular backing store to optimally perform input selection.
Source§

fn propose_shielding<ParamsT, ChangeT>( &self, params: &ParamsT, wallet_db: &Self::InputSource, change_strategy: &ChangeT, shielding_threshold: Zatoshis, source_addrs: &[TransparentAddress], to_account: <Self::InputSource as InputSource>::AccountId, target_height: TargetHeight, anchor_height: BlockHeight, zip318: &PoolMigrationParams, confirmations_policy: ConfirmationsPolicy, output_filter: CoinbaseFilter, ) -> Result<Proposal<<ChangeT as ChangeStrategy>::FeeRule, Infallible>, InputSelectorError<<DbT as InputSource>::Error, Self::Error, ChangeT::Error, Infallible>>
where ParamsT: Parameters, ChangeT: ChangeStrategy<MetaSource = Self::InputSource>,

Performs input selection and returns a proposal for the construction of a shielding transaction. Read more
Source§

fn propose_shielding_coinbase<ParamsT, FeeRuleT>( &self, params: &ParamsT, wallet_db: &Self::InputSource, fee_rule: &FeeRuleT, shielding_threshold: Zatoshis, source_addrs: &[TransparentAddress], to_address: ZcashAddress, memo: Option<MemoBytes>, limit: Option<usize>, target_height: TargetHeight, anchor_height: BlockHeight, ) -> Result<Proposal<FeeRuleT, Infallible>, InputSelectorError<<DbT as InputSource>::Error, Self::Error, FeeRuleT::Error, Infallible>>
where ParamsT: Parameters, FeeRuleT: FeeRule + Clone,

Performs input selection and returns a proposal for the construction of a transaction that shields coinbase transparent outputs to an arbitrary shielded recipient. Read more

Auto Trait Implementations§

§

impl<DbT> Freeze for GreedyInputSelector<DbT>
where PhantomData<DbT>: Freeze,

§

impl<DbT> RefUnwindSafe for GreedyInputSelector<DbT>

§

impl<DbT> Send for GreedyInputSelector<DbT>
where PhantomData<DbT>: Send,

§

impl<DbT> Sync for GreedyInputSelector<DbT>
where PhantomData<DbT>: Sync,

§

impl<DbT> Unpin for GreedyInputSelector<DbT>
where PhantomData<DbT>: Unpin,

§

impl<DbT> UnsafeUnpin for GreedyInputSelector<DbT>

§

impl<DbT> UnwindSafe for GreedyInputSelector<DbT>
where PhantomData<DbT>: 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
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSend for T
where T: Any + Send,

§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send> ⓘ

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
§

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
§

impl<T> PossiblyOption<T> for T

§

fn to_option(self) -> Option<T>

Convert this object into an Option<T>
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 = !

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

fn try_from(value: U) -> Result<T, !>

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