pub trait ChangeStrategy {
type FeeRule: FeeRule + Clone;
type Error;
type MetaSource: InputSource;
type AccountMetaT;
// Required methods
fn fee_rule(&self) -> &Self::FeeRule;
fn fetch_wallet_meta(
&self,
meta_source: &Self::MetaSource,
account: <Self::MetaSource as InputSource>::AccountId,
exclude: &[<Self::MetaSource as InputSource>::NoteRef],
) -> Result<Self::AccountMetaT, <Self::MetaSource as InputSource>::Error>;
fn compute_balance<P: Parameters, NoteRefT: Clone>(
&self,
params: &P,
target_height: BlockHeight,
transparent_inputs: &[impl InputView],
transparent_outputs: &[impl OutputView],
sapling: &impl BundleView<NoteRefT>,
orchard: &impl BundleView<NoteRefT>,
ephemeral_balance: Option<&EphemeralBalance>,
wallet_meta: &Self::AccountMetaT,
) -> Result<TransactionBalance, ChangeError<Self::Error, NoteRefT>>;
}
Expand description
A trait that represents the ability to compute the suggested change and fees that must be paid by a transaction having a specified set of inputs and outputs.
Required Associated Types§
type FeeRule: FeeRule + Clone
type Error
Sourcetype MetaSource: InputSource
type MetaSource: InputSource
The type of metadata source that this change strategy requires in order to be able to
retrieve required wallet metadata. If more capabilities are required of the backend than
are exposed in the InputSource
trait, the implementer of this trait should define their
own trait that descends from InputSource
and adds the required capabilities there, and
then implement that trait for their desired database backend.
Sourcetype AccountMetaT
type AccountMetaT
Tye type of wallet metadata that this change strategy relies upon in order to compute change.
Required Methods§
Sourcefn fee_rule(&self) -> &Self::FeeRule
fn fee_rule(&self) -> &Self::FeeRule
Returns the fee rule that this change strategy will respect when performing balance computations.
Sourcefn fetch_wallet_meta(
&self,
meta_source: &Self::MetaSource,
account: <Self::MetaSource as InputSource>::AccountId,
exclude: &[<Self::MetaSource as InputSource>::NoteRef],
) -> Result<Self::AccountMetaT, <Self::MetaSource as InputSource>::Error>
fn fetch_wallet_meta( &self, meta_source: &Self::MetaSource, account: <Self::MetaSource as InputSource>::AccountId, exclude: &[<Self::MetaSource as InputSource>::NoteRef], ) -> Result<Self::AccountMetaT, <Self::MetaSource as InputSource>::Error>
Uses the provided metadata source to obtain the wallet metadata required for change creation determinations.
Sourcefn compute_balance<P: Parameters, NoteRefT: Clone>(
&self,
params: &P,
target_height: BlockHeight,
transparent_inputs: &[impl InputView],
transparent_outputs: &[impl OutputView],
sapling: &impl BundleView<NoteRefT>,
orchard: &impl BundleView<NoteRefT>,
ephemeral_balance: Option<&EphemeralBalance>,
wallet_meta: &Self::AccountMetaT,
) -> Result<TransactionBalance, ChangeError<Self::Error, NoteRefT>>
fn compute_balance<P: Parameters, NoteRefT: Clone>( &self, params: &P, target_height: BlockHeight, transparent_inputs: &[impl InputView], transparent_outputs: &[impl OutputView], sapling: &impl BundleView<NoteRefT>, orchard: &impl BundleView<NoteRefT>, ephemeral_balance: Option<&EphemeralBalance>, wallet_meta: &Self::AccountMetaT, ) -> Result<TransactionBalance, ChangeError<Self::Error, NoteRefT>>
Computes the totals of inputs, suggested change amounts, and fees given the provided inputs and outputs being used to construct a transaction.
The fee computed as part of this operation should take into account the prospective
change outputs recommended by this operation. If insufficient funds are available to
supply the requested outputs and required fees, implementations should return
ChangeError::InsufficientFunds
.
If the inputs include notes or UTXOs that are not economic to spend in the context
of this input selection, a ChangeError::DustInputs
error can be returned
indicating inputs that should be removed from the selection (all of which will
have value less than or equal to the marginal fee). The caller should order the
inputs from most to least preferred to spend within each pool, so that the most
preferred ones are less likely to be indicated to remove.
ephemeral_balance
: if the transaction is to be constructed with either an ephemeral transparent input or an ephemeral transparent output this argument may be used to provide the value of that input or output. The value of this argument should beNone
in the case that there are no such items.wallet_meta
: Additional wallet metadata that the change strategy may use in determining how to construct change outputs. This wallet metadata value should be computed excluding the inputs provided in thetransparent_inputs
,sapling
, andorchard
arguments.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.