|
xrpld
|
A wrapper which makes credits unavailable to balances. More...
#include <PaymentSandbox.h>


Public Types | |
| using | tx_type = std::pair<std::shared_ptr<STTx const>, std::shared_ptr<STObject const>> |
| using | key_type = uint256 |
| using | mapped_type = SLE::const_pointer |
Public Member Functions | |
| PaymentSandbox ()=delete | |
| PaymentSandbox (PaymentSandbox const &)=delete | |
| PaymentSandbox & | operator= (PaymentSandbox &&)=delete |
| PaymentSandbox & | operator= (PaymentSandbox const &)=delete |
| PaymentSandbox (PaymentSandbox &&)=default | |
| PaymentSandbox (ReadView const *base, ApplyFlags flags) | |
| PaymentSandbox (ApplyView const *base) | |
| STAmount | balanceHookIOU (AccountID const &account, AccountID const &issuer, STAmount const &amount) const override |
| STAmount | balanceHookMPT (AccountID const &account, MPTIssue const &issue, std::int64_t amount) const override |
| STAmount | balanceHookSelfIssueMPT (MPTIssue const &issue, std::int64_t amount) const override |
| void | creditHookIOU (AccountID const &from, AccountID const &to, STAmount const &amount, STAmount const &preCreditBalance) override |
| void | creditHookMPT (AccountID const &from, AccountID const &to, STAmount const &amount, std::uint64_t preCreditBalanceHolder, std::int64_t preCreditBalanceIssuer) override |
| void | issuerSelfDebitHookMPT (MPTIssue const &issue, std::uint64_t amount, std::int64_t origBalance) override |
| Facilitate tracking of MPT sold by an issuer owning MPT sell offer. | |
| void | adjustOwnerCountHook (AccountID const &account, std::uint32_t cur, std::uint32_t next) override |
| std::uint32_t | ownerCountHook (AccountID const &account, std::uint32_t count) const override |
| XRPAmount | xrpDestroyed () const |
| bool | open () const override |
| Returns true if this reflects an open ledger. | |
| LedgerHeader const & | header () const override |
| Returns information about the ledger. | |
| Fees const & | fees () const override |
| Returns the fees for the base ledger. | |
| Rules const & | rules () const override |
| Returns the tx processing rules. | |
| bool | exists (Keylet const &k) const override |
| Determine if a state item exists. | |
| std::optional< key_type > | succ (key_type const &key, std::optional< key_type > const &last=std::nullopt) const override |
| Return the key of the next state item. | |
| SLE::const_pointer | read (Keylet const &k) const override |
| Return the state item associated with a key. | |
| std::unique_ptr< SlesType::iter_base > | slesBegin () const override |
| std::unique_ptr< SlesType::iter_base > | slesEnd () const override |
| std::unique_ptr< SlesType::iter_base > | slesUpperBound (uint256 const &key) const override |
| virtual std::unique_ptr< SlesType::iter_base > | slesUpperBound (key_type const &key) const =0 |
| std::unique_ptr< TxsType::iter_base > | txsBegin () const override |
| std::unique_ptr< TxsType::iter_base > | txsEnd () const override |
| bool | txExists (key_type const &key) const override |
| Returns true if a tx exists in the tx map. | |
| tx_type | txRead (key_type const &key) const override |
| Read a transaction from the tx map. | |
| ApplyFlags | flags () const override |
| Returns the tx apply flags. | |
| SLE::pointer | peek (Keylet const &k) override |
| Prepare to modify the SLE associated with key. | |
| void | erase (SLE::ref sle) override |
| Remove a peeked SLE. | |
| void | insert (SLE::ref sle) override |
| Insert a new state SLE. | |
| void | update (SLE::ref sle) override |
| Indicate changes to a peeked SLE. | |
| void | rawErase (SLE::ref sle) override |
| Delete an existing state item. | |
| void | rawInsert (SLE::ref sle) override |
| Unconditionally insert a state item. | |
| void | rawReplace (SLE::ref sle) override |
| Unconditionally replace a state item. | |
| void | rawDestroyXRP (XRPAmount const &feeDrops) override |
| Destroy XRP. | |
| bool | dirDelete (Keylet const &directory, std::function< void(uint256 const &)> const &) |
| Remove the specified directory, invoking the callback for every node. | |
| bool | emptyDirDelete (Keylet const &directory) |
| Remove the specified directory, if it is empty. | |
| NetClock::time_point | parentCloseTime () const |
| Returns the close time of the previous ledger. | |
| LedgerIndex | seq () const |
| Returns the sequence number of the base ledger. | |
| PaymentSandbox (PaymentSandbox const *base) | |
| Construct on top of existing PaymentSandbox. | |
| PaymentSandbox (PaymentSandbox *base) | |
| void | apply (RawView &to) |
| Apply changes to base view. | |
| void | apply (PaymentSandbox &to) |
| std::optional< std::uint64_t > | dirAppend (Keylet const &directory, Keylet const &key, std::function< void(SLE::ref)> const &describe) |
| Append an entry to a directory. | |
| std::optional< std::uint64_t > | dirInsert (Keylet const &directory, uint256 const &key, std::function< void(SLE::ref)> const &describe) |
| Insert an entry to a directory. | |
| std::optional< std::uint64_t > | dirInsert (Keylet const &directory, Keylet const &key, std::function< void(SLE::ref)> const &describe) |
| bool | dirRemove (Keylet const &directory, std::uint64_t page, uint256 const &key, bool keepRoot) |
| Remove an entry from a directory. | |
| bool | dirRemove (Keylet const &directory, std::uint64_t page, Keylet const &key, bool keepRoot) |
Public Attributes | |
| SlesType | sles |
| Iterable range of ledger state items. | |
| TxsType | txs |
Protected Attributes | |
| ApplyFlags | flags_ |
| ReadView const * | base_ |
| detail::ApplyStateTable | items_ |
Private Member Functions | |
| std::optional< std::uint64_t > | dirAdd (bool preserveOrder, Keylet const &directory, uint256 const &key, std::function< void(SLE::ref)> const &describe) |
| Add an entry to a directory using the specified insert strategy. | |
Private Attributes | |
| detail::DeferredCredits | tab_ |
| PaymentSandbox const * | ps_ = nullptr |
A wrapper which makes credits unavailable to balances.
This is used for payments and pathfinding, so that consuming liquidity from a path never causes portions of that path or other paths to gain liquidity.
The behavior of certain free functions in the ApplyView API will change via the balanceHook and creditHook overrides of PaymentSandbox.
Definition at line 138 of file PaymentSandbox.h.
|
inherited |
Definition at line 33 of file ReadView.h.
|
inherited |
Definition at line 35 of file ReadView.h.
|
inherited |
Definition at line 37 of file ReadView.h.
|
delete |
|
delete |
|
default |
| xrpl::PaymentSandbox::PaymentSandbox | ( | ReadView const * | base, |
| ApplyFlags | flags ) |
Definition at line 150 of file PaymentSandbox.h.
| xrpl::PaymentSandbox::PaymentSandbox | ( | ApplyView const * | base | ) |
Definition at line 154 of file PaymentSandbox.h.
|
explicit |
Construct on top of existing PaymentSandbox.
The changes are pushed to the parent when apply() is called.
| parent | A non-null pointer to the parent. |
Definition at line 172 of file PaymentSandbox.h.
|
explicit |
Definition at line 177 of file PaymentSandbox.h.
|
delete |
|
delete |
|
nodiscardoverridevirtual |
Reimplemented from xrpl::ReadView.
Definition at line 283 of file PaymentSandbox.cpp.
|
nodiscardoverridevirtual |
Reimplemented from xrpl::ReadView.
Definition at line 337 of file PaymentSandbox.cpp.
|
nodiscardoverridevirtual |
Reimplemented from xrpl::ReadView.
Definition at line 375 of file PaymentSandbox.cpp.
|
overridevirtual |
Reimplemented from xrpl::ApplyView.
Definition at line 407 of file PaymentSandbox.cpp.
|
overridevirtual |
Reimplemented from xrpl::ApplyView.
Definition at line 419 of file PaymentSandbox.cpp.
|
overridevirtual |
Facilitate tracking of MPT sold by an issuer owning MPT sell offer.
Unlike IOU, MPT doesn't have bi-directional relationship with an issuer, where a trustline limits an amount that can be issued to a holder. Consequently, the credit step (last MPTEndpointStep or BookStep buying MPT) might temporarily overflow OutstandingAmount. Limiting of a step's output amount in this case is delegated to the next step (in rev order). The next step always redeems when a holder account sells MPT (first MPTEndpointStep or BookStep selling MPT). In this case the holder account is only limited by the step's output and it's available funds since it's transferring the funds from one account to another account and doesn't change OutstandingAmount. This doesn't apply to an offer owned by an issuer. In this case the issuer sells or self debits and is increasing OutstandingAmount. Ability to issue is limited by the issuer originally available funds less already self sold MPT amounts (MPT sell offer). Consider an example:
Reimplemented from xrpl::ApplyView.
Definition at line 432 of file PaymentSandbox.cpp.
|
overridevirtual |
Reimplemented from xrpl::ApplyView.
Definition at line 443 of file PaymentSandbox.cpp.
|
nodiscardoverridevirtual |
Reimplemented from xrpl::ReadView.
Definition at line 395 of file PaymentSandbox.cpp.
| void xrpl::PaymentSandbox::apply | ( | RawView & | to | ) |
Apply changes to base view.
to must contain contents identical to the parent view passed upon construction, else undefined behavior will result.
Definition at line 452 of file PaymentSandbox.cpp.
| void xrpl::PaymentSandbox::apply | ( | PaymentSandbox & | to | ) |
Definition at line 459 of file PaymentSandbox.cpp.
|
nodiscard |
Definition at line 467 of file PaymentSandbox.cpp.
|
nodiscardoverridevirtualinherited |
Returns true if this reflects an open ledger.
Implements xrpl::ReadView.
Definition at line 25 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Returns information about the ledger.
Implements xrpl::ReadView.
Definition at line 31 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Returns the fees for the base ledger.
Implements xrpl::ReadView.
Definition at line 37 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Returns the tx processing rules.
Implements xrpl::ReadView.
Definition at line 43 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Determine if a state item exists.
Implements xrpl::ReadView.
Definition at line 49 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Return the key of the next state item.
This returns the key of the first state item whose key is greater than the specified key. If no such key is present, std::nullopt is returned.
If last is engaged, returns std::nullopt when the key returned would be outside the open interval (key, last).
Implements xrpl::ReadView.
Definition at line 55 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Return the state item associated with a key.
Effects: If the key exists, gives the caller ownership of the non-modifiable corresponding SLE.
Implements xrpl::ReadView.
Definition at line 62 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Implements xrpl::ReadView.
Definition at line 68 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Implements xrpl::ReadView.
Definition at line 74 of file ApplyViewBase.cpp.
|
nodiscardoverrideinherited |
Definition at line 80 of file ApplyViewBase.cpp.
|
nodiscardpure virtualinherited |
|
nodiscardoverridevirtualinherited |
Implements xrpl::ReadView.
Definition at line 86 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Implements xrpl::ReadView.
Definition at line 92 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Returns true if a tx exists in the tx map.
A tx exists in the map if it is part of the base ledger, or if it is a newly inserted tx.
Implements xrpl::ReadView.
Definition at line 98 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Read a transaction from the tx map.
If the view represents an open ledger, the metadata object will be empty.
Implements xrpl::ReadView.
Definition at line 104 of file ApplyViewBase.cpp.
|
nodiscardoverridevirtualinherited |
Returns the tx apply flags.
Flags can affect the outcome of transaction processing. For example, transactions applied to an open ledger generate "local" failures, while transactions applied to the consensus ledger produce hard failures (and claim a fee).
Implements xrpl::ApplyView.
Definition at line 112 of file ApplyViewBase.cpp.
|
overridevirtualinherited |
Prepare to modify the SLE associated with key.
Effects:
Gives the caller ownership of a modifiable SLE associated with the specified key.
The returned SLE may be used in a subsequent call to erase or update.
The SLE must not be passed to any other ApplyView.
Implements xrpl::ApplyView.
Definition at line 118 of file ApplyViewBase.cpp.
|
overridevirtualinherited |
Remove a peeked SLE.
Requirements:
`sle` was obtained from prior call to peek() on this instance of the RawView.
Effects:
The key is no longer associated with the SLE.
Implements xrpl::ApplyView.
Definition at line 124 of file ApplyViewBase.cpp.
|
overridevirtualinherited |
Insert a new state SLE.
Requirements:
`sle` was not obtained from any calls to peek() on any instances of RawView. The SLE's key must not already exist.
Effects:
The key in the state map is associated with the SLE. The RawView acquires ownership of the shared_ptr.
Implements xrpl::ApplyView.
Definition at line 130 of file ApplyViewBase.cpp.
|
overridevirtualinherited |
Indicate changes to a peeked SLE.
Requirements:
The SLE's key must exist. `sle` was obtained from prior call to peek() on this instance of the RawView.
Effects:
The SLE is updated
Implements xrpl::ApplyView.
Definition at line 136 of file ApplyViewBase.cpp.
|
overridevirtualinherited |
Delete an existing state item.
The SLE is provided so the implementation can calculate metadata.
Implements xrpl::RawView.
Definition at line 144 of file ApplyViewBase.cpp.
|
overridevirtualinherited |
Unconditionally insert a state item.
Requirements: The key must not already exist.
Effects:
The key is associated with the SLE.
Implements xrpl::RawView.
Definition at line 150 of file ApplyViewBase.cpp.
|
overridevirtualinherited |
Unconditionally replace a state item.
Requirements:
The key must exist.
Effects:
The key is associated with the SLE.
Implements xrpl::RawView.
Definition at line 156 of file ApplyViewBase.cpp.
|
overridevirtualinherited |
Destroy XRP.
This is used to pay for transaction fees.
Implements xrpl::RawView.
Definition at line 162 of file ApplyViewBase.cpp.
|
privateinherited |
Add an entry to a directory using the specified insert strategy.
Definition at line 165 of file ApplyView.cpp.
|
inherited |
Append an entry to a directory.
Entries in the directory will be stored in order of insertion, i.e. new entries will always be added at the tail end of the last page.
| directory | the base of the directory |
| key | the entry to insert |
| describe | callback to add required entries to a new page |
std::optional which, if insertion was successful, will contain the page number in which the item was stored.Definition at line 301 of file ApplyView.h.
|
inherited |
Insert an entry to a directory.
Entries in the directory will be stored in a semi-random order, but each page will be maintained in sorted order.
| directory | the base of the directory |
| key | the entry to insert |
| describe | callback to add required entries to a new page |
std::optional which, if insertion was successful, will contain the page number in which the item was stored.Definition at line 340 of file ApplyView.h.
|
inherited |
Definition at line 349 of file ApplyView.h.
|
inherited |
Remove an entry from a directory.
| directory | the base of the directory |
| page | the page number for this page |
| key | the entry to remove |
| keepRoot | if deleting the last entry, don't delete the root page (i.e. the directory itself). |
true if the entry was found and deleted and false otherwise.keepRoot is not set and the directory is empty. Definition at line 256 of file ApplyView.cpp.
|
inherited |
Definition at line 378 of file ApplyView.h.
|
inherited |
Remove the specified directory, invoking the callback for every node.
Definition at line 396 of file ApplyView.cpp.
|
inherited |
Remove the specified directory, if it is empty.
| directory | the identifier of the directory node to be deleted |
true if the directory was found and was successfully deleted false otherwise.Definition at line 191 of file ApplyView.cpp.
|
nodiscardinherited |
Returns the close time of the previous ledger.
Definition at line 90 of file ReadView.h.
|
nodiscardinherited |
Returns the sequence number of the base ledger.
Definition at line 97 of file ReadView.h.
|
private |
Definition at line 236 of file PaymentSandbox.h.
|
private |
Definition at line 237 of file PaymentSandbox.h.
|
protectedinherited |
Definition at line 99 of file ApplyViewBase.h.
|
protectedinherited |
Definition at line 100 of file ApplyViewBase.h.
|
protectedinherited |
Definition at line 101 of file ApplyViewBase.h.
|
inherited |
Iterable range of ledger state items.
Definition at line 239 of file ReadView.h.
|
inherited |
Definition at line 242 of file ReadView.h.