pub struct Planner<R: RngCore + CryptoRng> { /* private fields */ }
Expand description
A planner for a TransactionPlan
that can fill in the required spends and change outputs upon
finalization to make a transaction balance.
Implementations§
Source§impl<R: RngCore + CryptoRng> Planner<R>
impl<R: RngCore + CryptoRng> Planner<R>
Sourcepub fn action<A: Into<ActionPlan>>(&mut self, action: A) -> &mut Self
pub fn action<A: Into<ActionPlan>>(&mut self, action: A) -> &mut Self
Add an arbitrary action to the planner.
Sourcepub fn set_gas_prices(&mut self, gas_prices: GasPrices) -> &mut Self
pub fn set_gas_prices(&mut self, gas_prices: GasPrices) -> &mut Self
Set the current gas prices for fee prediction.
Sourcepub fn set_fee_tier(&mut self, fee_tier: FeeTier) -> &mut Self
pub fn set_fee_tier(&mut self, fee_tier: FeeTier) -> &mut Self
Set the fee tier.
Sourcepub fn expiry_height(&mut self, expiry_height: u64) -> &mut Self
pub fn expiry_height(&mut self, expiry_height: u64) -> &mut Self
Set the expiry height for the transaction.
Sourcepub fn memo(&mut self, text: String) -> &mut Self
pub fn memo(&mut self, text: String) -> &mut Self
Set a human-readable memo text for the transaction.
Errors if the memo is too long.
Sourcepub fn memo_return_address(&mut self, address: Address) -> &mut Self
pub fn memo_return_address(&mut self, address: Address) -> &mut Self
Customize the return address for the memo.
If unset, this will default to the address for the source account. This must be an address controlled by the user, as the expectation is that the recipient can use the address to transact with the sender.
Sourcepub fn change_address(&mut self, address: Address) -> &mut Self
pub fn change_address(&mut self, address: Address) -> &mut Self
Set the change address for the transaction.
If unset, this will default to the address for the source account.
This can be a foreign address, allowing “send max” functionality.
Sourcepub fn spend(&mut self, note: Note, position: Position) -> &mut Self
pub fn spend(&mut self, note: Note, position: Position) -> &mut Self
Spend a specific positioned note in the transaction.
Sourcepub fn output(&mut self, value: Value, address: Address) -> &mut Self
pub fn output(&mut self, value: Value, address: Address) -> &mut Self
Add an output note from this transaction.
Any unused output value will be redirected back to the originating address as change notes.
Sourcepub fn position_open(&mut self, position: Position) -> &mut Self
pub fn position_open(&mut self, position: Position) -> &mut Self
Open a liquidity position in the order book.
Sourcepub fn position_close(&mut self, position_id: Id) -> &mut Self
pub fn position_close(&mut self, position_id: Id) -> &mut Self
Close a liquidity position in the order book.
Sourcepub fn position_withdraw(
&mut self,
position_id: Id,
reserves: Reserves,
pair: TradingPair,
) -> &mut Self
pub fn position_withdraw( &mut self, position_id: Id, reserves: Reserves, pair: TradingPair, ) -> &mut Self
Withdraw a liquidity position in the order book.
Note: Currently this only supports an initial withdrawal from Closed, with no rewards.
Sourcepub fn dutch_auction_schedule(
&mut self,
description: DutchAuctionDescription,
) -> &mut Self
pub fn dutch_auction_schedule( &mut self, description: DutchAuctionDescription, ) -> &mut Self
Schedule a Dutch auction.
Sourcepub fn dutch_auction_end(&mut self, auction_id: AuctionId) -> &mut Self
pub fn dutch_auction_end(&mut self, auction_id: AuctionId) -> &mut Self
Ends a Dutch auction.
Sourcepub fn dutch_auction_withdraw(&mut self, auction: &DutchAuction) -> &mut Self
pub fn dutch_auction_withdraw(&mut self, auction: &DutchAuction) -> &mut Self
Withdraws the reserves of the Dutch auction.
Uses the provided auction state to automatically end the auction if necessary.
Sourcepub fn swap(
&mut self,
input_value: Value,
into_asset: Id,
swap_claim_fee: Fee,
claim_address: Address,
) -> Result<&mut Self>
pub fn swap( &mut self, input_value: Value, into_asset: Id, swap_claim_fee: Fee, claim_address: Address, ) -> Result<&mut Self>
Perform a swap based on input notes in the transaction.
Sourcepub fn swap_claim(&mut self, plan: SwapClaimPlan) -> &mut Self
pub fn swap_claim(&mut self, plan: SwapClaimPlan) -> &mut Self
Perform a swap claim based on an input swap with a pre-paid fee.
Sourcepub fn delegate(
&mut self,
epoch: Epoch,
unbonded_amount: Amount,
rate_data: RateData,
) -> &mut Self
pub fn delegate( &mut self, epoch: Epoch, unbonded_amount: Amount, rate_data: RateData, ) -> &mut Self
Add a delegation to this transaction.
Sourcepub fn undelegate(
&mut self,
epoch: Epoch,
delegation_amount: Amount,
rate_data: RateData,
) -> &mut Self
pub fn undelegate( &mut self, epoch: Epoch, delegation_amount: Amount, rate_data: RateData, ) -> &mut Self
Add an undelegation to this transaction.
Sourcepub fn undelegate_claim(&mut self, claim_plan: UndelegateClaimPlan) -> &mut Self
pub fn undelegate_claim(&mut self, claim_plan: UndelegateClaimPlan) -> &mut Self
Add an undelegate claim to this transaction.
Sourcepub fn validator_definition(&mut self, new_validator: Definition) -> &mut Self
pub fn validator_definition(&mut self, new_validator: Definition) -> &mut Self
Upload a validator definition in this transaction.
Sourcepub fn proposal_submit(
&mut self,
proposal: Proposal,
deposit_amount: Amount,
) -> &mut Self
pub fn proposal_submit( &mut self, proposal: Proposal, deposit_amount: Amount, ) -> &mut Self
Submit a new governance proposal in this transaction.
Sourcepub fn proposal_withdraw(&mut self, proposal: u64, reason: String) -> &mut Self
pub fn proposal_withdraw(&mut self, proposal: u64, reason: String) -> &mut Self
Withdraw a governance proposal in this transaction.
Sourcepub fn proposal_deposit_claim(
&mut self,
proposal: u64,
deposit_amount: Amount,
outcome: Outcome<()>,
) -> &mut Self
pub fn proposal_deposit_claim( &mut self, proposal: u64, deposit_amount: Amount, outcome: Outcome<()>, ) -> &mut Self
Claim a governance proposal deposit in this transaction.
Sourcepub fn community_pool_deposit(&mut self, value: Value) -> &mut Self
pub fn community_pool_deposit(&mut self, value: Value) -> &mut Self
Deposit a value into the Community Pool.
Sourcepub fn validator_vote(&mut self, vote: ValidatorVote) -> &mut Self
pub fn validator_vote(&mut self, vote: ValidatorVote) -> &mut Self
Cast a validator vote in this transaction.
Sourcepub fn ics20_withdrawal(&mut self, withdrawal: Ics20Withdrawal) -> &mut Self
pub fn ics20_withdrawal(&mut self, withdrawal: Ics20Withdrawal) -> &mut Self
Perform an ICS-20 withdrawal
Sourcepub fn ibc_action(&mut self, ibc_action: IbcRelay) -> &mut Self
pub fn ibc_action(&mut self, ibc_action: IbcRelay) -> &mut Self
Perform an IBC action
Sourcepub async fn delegator_vote<V: ViewClient>(
&mut self,
view: &mut V,
source: AddressIndex,
proposal: u64,
vote: Vote,
start_block_height: u64,
start_position: Position,
start_rate_data: BTreeMap<IdentityKey, RateData>,
) -> Result<&mut Self, Error>
pub async fn delegator_vote<V: ViewClient>( &mut self, view: &mut V, source: AddressIndex, proposal: u64, vote: Vote, start_block_height: u64, start_position: Position, start_rate_data: BTreeMap<IdentityKey, RateData>, ) -> Result<&mut Self, Error>
Vote with all possible vote weight on a given proposal.
Sourcepub fn delegator_vote_precise(&mut self, plan: DelegatorVotePlan) -> &mut Self
pub fn delegator_vote_precise(&mut self, plan: DelegatorVotePlan) -> &mut Self
Vote with a specific positioned note in the transaction, rather than automatically.
Sourcepub fn prioritize_and_filter_spendable_notes(
&mut self,
records: Vec<SpendableNoteRecord>,
) -> Vec<SpendableNoteRecord>
pub fn prioritize_and_filter_spendable_notes( &mut self, records: Vec<SpendableNoteRecord>, ) -> Vec<SpendableNoteRecord>
Prioritize notes to spend to release value of a specific transaction.
Various logic is possible for note selection. Currently, this method prioritizes notes sent to a one-time address, then notes with the largest value:
-
Prioritizing notes sent to one-time addresses optimizes for a future in which we implement DAGSync keyed by fuzzy message detection (which will not be able to detect notes sent to one-time addresses). Spending these notes immediately converts them into change notes, sent to the default address for the users’ account, which are detectable.
-
Prioritizing notes with the largest value optimizes for gas used by the transaction.
We may want to make note prioritization configurable in the future. For instance, a user might prefer a note prioritization strategy that harvested capital losses when possible, using cost basis information retained by the view server.
Sourcepub async fn plan<V: ViewClient>(
&mut self,
view: &mut V,
source: AddressIndex,
) -> Result<TransactionPlan>
pub async fn plan<V: ViewClient>( &mut self, view: &mut V, source: AddressIndex, ) -> Result<TransactionPlan>
Add spends and change outputs as required to balance the transaction, using the view service provided to supply the notes and other information.
Trait Implementations§
Auto Trait Implementations§
impl<R> !Freeze for Planner<R>
impl<R> RefUnwindSafe for Planner<R>where
R: RefUnwindSafe,
impl<R> Send for Planner<R>where
R: Send,
impl<R> Sync for Planner<R>where
R: Sync,
impl<R> Unpin for Planner<R>where
R: Unpin,
impl<R> UnwindSafe for Planner<R>where
R: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
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) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.