xrpld
Loading...
Searching...
No Matches
AMMDelete.cpp
1#include <xrpl/tx/transactors/dex/AMMDelete.h>
2
3#include <xrpl/basics/Log.h>
4#include <xrpl/beast/utility/Zero.h>
5#include <xrpl/ledger/Sandbox.h>
6#include <xrpl/ledger/helpers/AMMHelpers.h>
7#include <xrpl/protocol/AMMCore.h>
8#include <xrpl/protocol/Feature.h>
9#include <xrpl/protocol/Indexes.h>
10#include <xrpl/protocol/MPTIssue.h>
11#include <xrpl/protocol/SField.h>
12#include <xrpl/protocol/STLedgerEntry.h>
13#include <xrpl/protocol/STTx.h>
14#include <xrpl/protocol/TER.h>
15#include <xrpl/protocol/XRPAmount.h>
16#include <xrpl/tx/Transactor.h>
17
18namespace xrpl {
19
20bool
22{
23 if (!ammEnabled(ctx.rules))
24 return false;
25
26 return ctx.rules.enabled(featureMPTokensV2) ||
27 (!ctx.tx[sfAsset].holds<MPTIssue>() && !ctx.tx[sfAsset2].holds<MPTIssue>());
28}
29
32{
33 return tesSUCCESS;
34}
35
36TER
38{
39 auto const ammSle = ctx.view.read(keylet::amm(ctx.tx[sfAsset], ctx.tx[sfAsset2]));
40 if (!ammSle)
41 {
42 JLOG(ctx.j.debug()) << "AMM Delete: Invalid asset pair.";
43 return terNO_AMM;
44 }
45
46 auto const lpTokensBalance = (*ammSle)[sfLPTokenBalance];
47 if (lpTokensBalance != beast::kZero)
48 return tecAMM_NOT_EMPTY;
49
50 return tesSUCCESS;
51}
52
53TER
55{
56 // This is the ledger view that we work against. Transactions are applied
57 // as we go on processing transactions.
58 Sandbox sb(&ctx_.view());
59
60 auto const ter = deleteAMMAccount(sb, ctx_.tx[sfAsset], ctx_.tx[sfAsset2], j_);
61 if (isTesSuccess(ter) || ter == tecINCOMPLETE)
62 sb.apply(ctx_.rawView());
63
64 return ter;
65}
66
67void
69{
70 // No transaction-specific invariants yet (future work).
71}
72
73bool
75{
76 // No transaction-specific invariants yet (future work).
77 return true;
78}
79
80} // namespace xrpl
A generic endpoint for log messages.
Definition Journal.h:38
Stream debug() const
Definition Journal.h:297
static TER preclaim(PreclaimContext const &ctx)
Definition AMMDelete.cpp:37
TER doApply() override
Definition AMMDelete.cpp:54
static bool checkExtraFeatures(PreflightContext const &ctx)
Definition AMMDelete.cpp:21
bool finalizeInvariants(STTx const &tx, TER result, XRPAmount fee, ReadView const &view, beast::Journal const &j) override
Check transaction-specific post-conditions after all entries have been visited.
Definition AMMDelete.cpp:74
static NotTEC preflight(PreflightContext const &ctx)
Definition AMMDelete.cpp:31
void visitInvariantEntry(bool isDelete, SLE::const_ref before, SLE::const_ref after) override
Inspect a single ledger entry modified by this transaction.
Definition AMMDelete.cpp:68
A view into a ledger.
Definition ReadView.h:31
virtual SLE::const_pointer read(Keylet const &k) const =0
Return the state item associated with a key.
bool enabled(uint256 const &feature) const
Returns true if a feature is enabled.
Definition Rules.cpp:171
std::shared_ptr< STLedgerEntry const > const & const_ref
Discardable, editable view to a ledger.
Definition Sandbox.h:15
void apply(RawView &to)
Definition Sandbox.h:35
beast::Journal const j_
Definition Transactor.h:118
ApplyContext & ctx_
Definition Transactor.h:116
Keylet amm(Asset const &issue1, Asset const &issue2) noexcept
AMM entry.
Definition Indexes.cpp:425
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
@ terNO_AMM
Definition TER.h:219
bool ammEnabled(Rules const &)
Return true if required AMM amendment is enabled.
Definition AMMCore.cpp:128
TER deleteAMMAccount(Sandbox &view, Asset const &asset, Asset const &asset2, beast::Journal j)
Delete trustlines to AMM.
TERSubset< CanCvtToNotTEC > NotTEC
Definition TER.h:594
bool isTesSuccess(TER x) noexcept
Definition TER.h:663
TERSubset< CanCvtToTER > TER
Definition TER.h:634
@ tecAMM_NOT_EMPTY
Definition TER.h:331
@ tecINCOMPLETE
Definition TER.h:333
@ tesSUCCESS
Definition TER.h:240
State information when determining if a tx is likely to claim a fee.
Definition Transactor.h:61
ReadView const & view
Definition Transactor.h:64
beast::Journal const j
Definition Transactor.h:69
State information when preflighting a tx.
Definition Transactor.h:18