rippled
applySteps.cpp
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #include <ripple/app/tx/applySteps.h>
21 #include <ripple/app/tx/impl/ApplyContext.h>
22 #include <ripple/app/tx/impl/CancelCheck.h>
23 #include <ripple/app/tx/impl/CancelOffer.h>
24 #include <ripple/app/tx/impl/CancelTicket.h>
25 #include <ripple/app/tx/impl/CashCheck.h>
26 #include <ripple/app/tx/impl/Change.h>
27 #include <ripple/app/tx/impl/CreateCheck.h>
28 #include <ripple/app/tx/impl/CreateOffer.h>
29 #include <ripple/app/tx/impl/CreateTicket.h>
30 #include <ripple/app/tx/impl/DeleteAccount.h>
31 #include <ripple/app/tx/impl/DepositPreauth.h>
32 #include <ripple/app/tx/impl/Escrow.h>
33 #include <ripple/app/tx/impl/Payment.h>
34 #include <ripple/app/tx/impl/SetAccount.h>
35 #include <ripple/app/tx/impl/SetRegularKey.h>
36 #include <ripple/app/tx/impl/SetSignerList.h>
37 #include <ripple/app/tx/impl/SetTrust.h>
38 #include <ripple/app/tx/impl/PayChan.h>
39 
40 namespace ripple {
41 
42 static
43 NotTEC
45 {
46  switch(ctx.tx.getTxnType())
47  {
48  case ttACCOUNT_SET: return SetAccount ::preflight(ctx);
49  case ttCHECK_CANCEL: return CancelCheck ::preflight(ctx);
50  case ttCHECK_CASH: return CashCheck ::preflight(ctx);
51  case ttCHECK_CREATE: return CreateCheck ::preflight(ctx);
53  case ttOFFER_CANCEL: return CancelOffer ::preflight(ctx);
54  case ttOFFER_CREATE: return CreateOffer ::preflight(ctx);
55  case ttESCROW_CREATE: return EscrowCreate ::preflight(ctx);
56  case ttESCROW_FINISH: return EscrowFinish ::preflight(ctx);
57  case ttESCROW_CANCEL: return EscrowCancel ::preflight(ctx);
58  case ttPAYCHAN_CLAIM: return PayChanClaim ::preflight(ctx);
60  case ttPAYCHAN_FUND: return PayChanFund ::preflight(ctx);
61  case ttPAYMENT: return Payment ::preflight(ctx);
64  case ttTICKET_CANCEL: return CancelTicket ::preflight(ctx);
65  case ttTICKET_CREATE: return CreateTicket ::preflight(ctx);
66  case ttTRUST_SET: return SetTrust ::preflight(ctx);
68  case ttAMENDMENT:
69  case ttFEE: return Change ::preflight(ctx);
70  default:
71  assert(false);
72  return temUNKNOWN;
73  }
74 }
75 
76 /* invoke_preclaim<T> uses name hiding to accomplish
77  compile-time polymorphism of (presumably) static
78  class functions for Transactor and derived classes.
79 */
80 template<class T>
81 static
82 TER
84 {
85  // If the transactor requires a valid account and the transaction doesn't
86  // list one, preflight will have already a flagged a failure.
87  auto const id = ctx.tx.getAccountID(sfAccount);
88 
89  if (id != beast::zero)
90  {
91  TER result = T::checkSeq(ctx);
92 
93  if (result != tesSUCCESS)
94  return result;
95 
96  result = T::checkFee(ctx,
97  calculateBaseFee(ctx.view, ctx.tx));
98 
99  if (result != tesSUCCESS)
100  return result;
101 
102  result = T::checkSign(ctx);
103 
104  if (result != tesSUCCESS)
105  return result;
106 
107  }
108 
109  return T::preclaim(ctx);
110 }
111 
112 static
113 TER
114 invoke_preclaim (PreclaimContext const& ctx)
115 {
116  switch(ctx.tx.getTxnType())
117  {
118  case ttACCOUNT_SET: return invoke_preclaim<SetAccount>(ctx);
119  case ttCHECK_CANCEL: return invoke_preclaim<CancelCheck>(ctx);
120  case ttCHECK_CASH: return invoke_preclaim<CashCheck>(ctx);
121  case ttCHECK_CREATE: return invoke_preclaim<CreateCheck>(ctx);
122  case ttDEPOSIT_PREAUTH: return invoke_preclaim<DepositPreauth>(ctx);
123  case ttOFFER_CANCEL: return invoke_preclaim<CancelOffer>(ctx);
124  case ttOFFER_CREATE: return invoke_preclaim<CreateOffer>(ctx);
125  case ttESCROW_CREATE: return invoke_preclaim<EscrowCreate>(ctx);
126  case ttESCROW_FINISH: return invoke_preclaim<EscrowFinish>(ctx);
127  case ttESCROW_CANCEL: return invoke_preclaim<EscrowCancel>(ctx);
128  case ttPAYCHAN_CLAIM: return invoke_preclaim<PayChanClaim>(ctx);
129  case ttPAYCHAN_CREATE: return invoke_preclaim<PayChanCreate>(ctx);
130  case ttPAYCHAN_FUND: return invoke_preclaim<PayChanFund>(ctx);
131  case ttPAYMENT: return invoke_preclaim<Payment>(ctx);
132  case ttREGULAR_KEY_SET: return invoke_preclaim<SetRegularKey>(ctx);
133  case ttSIGNER_LIST_SET: return invoke_preclaim<SetSignerList>(ctx);
134  case ttTICKET_CANCEL: return invoke_preclaim<CancelTicket>(ctx);
135  case ttTICKET_CREATE: return invoke_preclaim<CreateTicket>(ctx);
136  case ttTRUST_SET: return invoke_preclaim<SetTrust>(ctx);
137  case ttACCOUNT_DELETE: return invoke_preclaim<DeleteAccount>(ctx);
138  case ttAMENDMENT:
139  case ttFEE: return invoke_preclaim<Change>(ctx);
140  default:
141  assert(false);
142  return temUNKNOWN;
143  }
144 }
145 
146 static
147 FeeUnit64
149  ReadView const& view,
150  STTx const& tx)
151 {
152  switch (tx.getTxnType())
153  {
154  case ttACCOUNT_SET: return SetAccount::calculateBaseFee(view, tx);
155  case ttCHECK_CANCEL: return CancelCheck::calculateBaseFee(view, tx);
156  case ttCHECK_CASH: return CashCheck::calculateBaseFee(view, tx);
157  case ttCHECK_CREATE: return CreateCheck::calculateBaseFee(view, tx);
159  case ttOFFER_CANCEL: return CancelOffer::calculateBaseFee(view, tx);
160  case ttOFFER_CREATE: return CreateOffer::calculateBaseFee(view, tx);
161  case ttESCROW_CREATE: return EscrowCreate::calculateBaseFee(view, tx);
162  case ttESCROW_FINISH: return EscrowFinish::calculateBaseFee(view, tx);
163  case ttESCROW_CANCEL: return EscrowCancel::calculateBaseFee(view, tx);
164  case ttPAYCHAN_CLAIM: return PayChanClaim::calculateBaseFee(view, tx);
165  case ttPAYCHAN_CREATE: return PayChanCreate::calculateBaseFee(view, tx);
166  case ttPAYCHAN_FUND: return PayChanFund::calculateBaseFee(view, tx);
167  case ttPAYMENT: return Payment::calculateBaseFee(view, tx);
168  case ttREGULAR_KEY_SET: return SetRegularKey::calculateBaseFee(view, tx);
169  case ttSIGNER_LIST_SET: return SetSignerList::calculateBaseFee(view, tx);
170  case ttTICKET_CANCEL: return CancelTicket::calculateBaseFee(view, tx);
171  case ttTICKET_CREATE: return CreateTicket::calculateBaseFee(view, tx);
172  case ttTRUST_SET: return SetTrust::calculateBaseFee(view, tx);
173  case ttACCOUNT_DELETE: return DeleteAccount::calculateBaseFee(view, tx);
174  case ttAMENDMENT:
175  case ttFEE: return Change::calculateBaseFee(view, tx);
176  default:
177  assert(false);
178  return FeeUnit64{0};
179  }
180 }
181 
182 template<class T>
183 static
184 TxConsequences
186 {
187  auto const category = T::affectsSubsequentTransactionAuth(tx) ?
189  auto const feePaid = T::calculateFeePaid(tx);
190  auto const maxSpend = T::calculateMaxSpend(tx);
191 
192  return{ category, feePaid, maxSpend };
193 }
194 
195 static
196 TxConsequences
197 invoke_calculateConsequences(STTx const& tx)
198 {
199  switch (tx.getTxnType())
200  {
201  case ttACCOUNT_SET: return invoke_calculateConsequences<SetAccount>(tx);
202  case ttCHECK_CANCEL: return invoke_calculateConsequences<CancelCheck>(tx);
203  case ttCHECK_CASH: return invoke_calculateConsequences<CashCheck>(tx);
204  case ttCHECK_CREATE: return invoke_calculateConsequences<CreateCheck>(tx);
205  case ttDEPOSIT_PREAUTH: return invoke_calculateConsequences<DepositPreauth>(tx);
206  case ttOFFER_CANCEL: return invoke_calculateConsequences<CancelOffer>(tx);
207  case ttOFFER_CREATE: return invoke_calculateConsequences<CreateOffer>(tx);
208  case ttESCROW_CREATE: return invoke_calculateConsequences<EscrowCreate>(tx);
209  case ttESCROW_FINISH: return invoke_calculateConsequences<EscrowFinish>(tx);
210  case ttESCROW_CANCEL: return invoke_calculateConsequences<EscrowCancel>(tx);
211  case ttPAYCHAN_CLAIM: return invoke_calculateConsequences<PayChanClaim>(tx);
212  case ttPAYCHAN_CREATE: return invoke_calculateConsequences<PayChanCreate>(tx);
213  case ttPAYCHAN_FUND: return invoke_calculateConsequences<PayChanFund>(tx);
214  case ttPAYMENT: return invoke_calculateConsequences<Payment>(tx);
215  case ttREGULAR_KEY_SET: return invoke_calculateConsequences<SetRegularKey>(tx);
216  case ttSIGNER_LIST_SET: return invoke_calculateConsequences<SetSignerList>(tx);
217  case ttTICKET_CANCEL: return invoke_calculateConsequences<CancelTicket>(tx);
218  case ttTICKET_CREATE: return invoke_calculateConsequences<CreateTicket>(tx);
219  case ttTRUST_SET: return invoke_calculateConsequences<SetTrust>(tx);
220  case ttACCOUNT_DELETE: return invoke_calculateConsequences<DeleteAccount>(tx);
221  case ttAMENDMENT:
222  case ttFEE:
223  [[fallthrough]];
224  default:
225  assert(false);
227  beast::zero };
228  }
229 }
230 
231 static
234 {
235  switch(ctx.tx.getTxnType())
236  {
237  case ttACCOUNT_SET: { SetAccount p(ctx); return p(); }
238  case ttCHECK_CANCEL: { CancelCheck p(ctx); return p(); }
239  case ttCHECK_CASH: { CashCheck p(ctx); return p(); }
240  case ttCHECK_CREATE: { CreateCheck p(ctx); return p(); }
241  case ttDEPOSIT_PREAUTH: { DepositPreauth p(ctx); return p(); }
242  case ttOFFER_CANCEL: { CancelOffer p(ctx); return p(); }
243  case ttOFFER_CREATE: { CreateOffer p(ctx); return p(); }
244  case ttESCROW_CREATE: { EscrowCreate p(ctx); return p(); }
245  case ttESCROW_FINISH: { EscrowFinish p(ctx); return p(); }
246  case ttESCROW_CANCEL: { EscrowCancel p(ctx); return p(); }
247  case ttPAYCHAN_CLAIM: { PayChanClaim p(ctx); return p(); }
248  case ttPAYCHAN_CREATE: { PayChanCreate p(ctx); return p(); }
249  case ttPAYCHAN_FUND: { PayChanFund p(ctx); return p(); }
250  case ttPAYMENT: { Payment p(ctx); return p(); }
251  case ttREGULAR_KEY_SET : { SetRegularKey p(ctx); return p(); }
252  case ttSIGNER_LIST_SET : { SetSignerList p(ctx); return p(); }
253  case ttTICKET_CANCEL: { CancelTicket p(ctx); return p(); }
254  case ttTICKET_CREATE: { CreateTicket p(ctx); return p(); }
255  case ttTRUST_SET: { SetTrust p(ctx); return p(); }
256  case ttACCOUNT_DELETE: { DeleteAccount p(ctx); return p(); }
257  case ttAMENDMENT:
258  case ttFEE: { Change p(ctx); return p(); }
259  default:
260  assert(false);
261  return { temUNKNOWN, false };
262  }
263 }
264 
265 PreflightResult
266 preflight(Application& app, Rules const& rules,
267  STTx const& tx, ApplyFlags flags,
268  beast::Journal j)
269 {
270  PreflightContext const pfctx(app, tx,
271  rules, flags, j);
272  try
273  {
274  return{ pfctx, invoke_preflight(pfctx) };
275  }
276  catch (std::exception const& e)
277  {
278  JLOG(j.fatal()) <<
279  "apply: " << e.what();
280  return{ pfctx, tefEXCEPTION };
281  }
282 }
283 
284 PreclaimResult
285 preclaim (PreflightResult const& preflightResult,
286  Application& app, OpenView const& view)
287 {
288  boost::optional<PreclaimContext const> ctx;
289  if (preflightResult.rules != view.rules())
290  {
291  auto secondFlight = preflight(app, view.rules(),
292  preflightResult.tx, preflightResult.flags,
293  preflightResult.j);
294  ctx.emplace(app, view, secondFlight.ter, secondFlight.tx,
295  secondFlight.flags, secondFlight.j);
296  }
297  else
298  {
299  ctx.emplace(
300  app, view, preflightResult.ter, preflightResult.tx,
301  preflightResult.flags, preflightResult.j);
302  }
303  try
304  {
305  if (ctx->preflightResult != tesSUCCESS)
306  return { *ctx, ctx->preflightResult };
307  return{ *ctx, invoke_preclaim(*ctx) };
308  }
309  catch (std::exception const& e)
310  {
311  JLOG(ctx->j.fatal()) <<
312  "apply: " << e.what();
313  return{ *ctx, tefEXCEPTION };
314  }
315 }
316 
317 FeeUnit64
319  STTx const& tx)
320 {
321  return invoke_calculateBaseFee(view, tx);
322 }
323 
324 TxConsequences
325 calculateConsequences(PreflightResult const& preflightResult)
326 {
327  assert(preflightResult.ter == tesSUCCESS);
328  if (preflightResult.ter != tesSUCCESS)
329  return{ TxConsequences::blocker,
330  Transactor::calculateFeePaid(preflightResult.tx),
331  beast::zero };
332  return invoke_calculateConsequences(preflightResult.tx);
333 }
334 
336 doApply(PreclaimResult const& preclaimResult,
337  Application& app, OpenView& view)
338 {
339  if (preclaimResult.view.seq() != view.seq())
340  {
341  // Logic error from the caller. Don't have enough
342  // info to recover.
343  return{ tefEXCEPTION, false };
344  }
345  try
346  {
347  if (!preclaimResult.likelyToClaimFee)
348  return{ preclaimResult.ter, false };
349  ApplyContext ctx(app, view,
350  preclaimResult.tx, preclaimResult.ter,
351  calculateBaseFee(view, preclaimResult.tx),
352  preclaimResult.flags, preclaimResult.j);
353  return invoke_apply(ctx);
354  }
355  catch (std::exception const& e)
356  {
357  JLOG(preclaimResult.j.fatal()) <<
358  "apply: " << e.what();
359  return { tefEXCEPTION, false };
360  }
361 }
362 
363 } // ripple
364 
ripple::ttPAYCHAN_CLAIM
@ ttPAYCHAN_CLAIM
Definition: TxFormats.h:52
ripple::ttCHECK_CANCEL
@ ttCHECK_CANCEL
Definition: TxFormats.h:55
beast::Journal::fatal
Stream fatal() const
Definition: Journal.h:312
ripple::STTx::getTxnType
TxType getTxnType() const
Definition: STTx.h:98
ripple::SetTrust::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: SetTrust.cpp:31
ripple::PayChanClaim
Definition: app/tx/impl/PayChan.h:71
ripple::Application
Definition: Application.h:85
ripple::SetRegularKey::calculateBaseFee
static FeeUnit64 calculateBaseFee(ReadView const &view, STTx const &tx)
Definition: SetRegularKey.cpp:28
ripple::PreclaimResult::view
ReadView const & view
From the input - the ledger view.
Definition: applySteps.h:89
ripple::ttACCOUNT_DELETE
@ ttACCOUNT_DELETE
Definition: TxFormats.h:58
ripple::PreclaimResult::j
const beast::Journal j
From the input - the journal.
Definition: applySteps.h:95
ripple::PreclaimContext::view
ReadView const & view
Definition: Transactor.h:53
ripple::calculateBaseFee
FeeUnit64 calculateBaseFee(ReadView const &view, STTx const &tx)
Compute only the expected base fee for a transaction.
Definition: applySteps.cpp:318
std::exception
STL class.
ripple::EscrowFinish::calculateBaseFee
static FeeUnit64 calculateBaseFee(ReadView const &view, STTx const &tx)
Definition: Escrow.cpp:343
ripple::CashCheck::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: CashCheck.cpp:35
std::pair
ripple::invoke_preflight
static NotTEC invoke_preflight(PreflightContext const &ctx)
Definition: applySteps.cpp:44
ripple::ttOFFER_CREATE
@ ttOFFER_CREATE
Definition: TxFormats.h:44
ripple::Payment
Definition: Payment.h:32
ripple::OpenView
Writable ledger view that accumulates state and tx changes.
Definition: OpenView.h:52
ripple::CreateCheck
Definition: CreateCheck.h:27
ripple::CancelOffer
Definition: CancelOffer.h:30
ripple::PayChanClaim::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: PayChan.cpp:385
ripple::sfAccount
const SF_Account sfAccount(access, STI_ACCOUNT, 1, "Account")
Definition: SField.h:460
ripple::ApplyFlags
ApplyFlags
Definition: ApplyView.h:30
ripple::invoke_calculateBaseFee
static FeeUnit64 invoke_calculateBaseFee(ReadView const &view, STTx const &tx)
Definition: applySteps.cpp:148
ripple::TxConsequences::normal
@ normal
Moves currency around, creates offers, etc.
Definition: applySteps.h:134
ripple::SetAccount
Definition: SetAccount.h:32
ripple::DepositPreauth
Definition: DepositPreauth.h:27
ripple::EscrowCreate
Definition: Escrow.h:27
ripple::EscrowFinish::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: Escrow.cpp:293
ripple::DeleteAccount::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: DeleteAccount.cpp:35
ripple::PreflightResult::tx
STTx const & tx
From the input - the transaction.
Definition: applySteps.h:51
ripple::CreateOffer::preflight
static NotTEC preflight(PreflightContext const &ctx)
Enforce constraints beyond those of the Transactor base class.
Definition: CreateOffer.cpp:42
ripple::preflight
PreflightResult preflight(Application &app, Rules const &rules, STTx const &tx, ApplyFlags flags, beast::Journal j)
Gate a transaction based on static information.
Definition: applySteps.cpp:266
ripple::DeleteAccount
Definition: DeleteAccount.h:29
ripple::Payment::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: Payment.cpp:48
ripple::PreclaimResult::likelyToClaimFee
const bool likelyToClaimFee
Success flag - whether the transaction is likely to claim a fee.
Definition: applySteps.h:101
ripple::PreclaimResult::ter
const TER ter
Intermediate transaction result.
Definition: applySteps.h:98
ripple::SetSignerList
See the README.md for an overview of the SetSignerList transaction that this class implements.
Definition: SetSignerList.h:41
ripple::ttESCROW_FINISH
@ ttESCROW_FINISH
Definition: TxFormats.h:39
ripple::ttPAYMENT
@ ttPAYMENT
Definition: TxFormats.h:37
ripple::DeleteAccount::calculateBaseFee
static FeeUnit64 calculateBaseFee(ReadView const &view, STTx const &tx)
Definition: DeleteAccount.cpp:56
ripple::ttFEE
@ ttFEE
Definition: TxFormats.h:61
ripple::doApply
std::pair< TER, bool > doApply(PreclaimResult const &preclaimResult, Application &app, OpenView &view)
Apply a prechecked transaction to an OpenView.
Definition: applySteps.cpp:336
ripple::PreflightResult
Describes the results of the preflight check.
Definition: applySteps.h:47
ripple::PreflightResult::rules
const Rules rules
From the input - the rules.
Definition: applySteps.h:53
ripple::ttTRUST_SET
@ ttTRUST_SET
Definition: TxFormats.h:57
ripple::STObject::getAccountID
AccountID getAccountID(SField const &field) const
Definition: STObject.cpp:537
ripple::PreflightResult::ter
const NotTEC ter
Intermediate transaction result.
Definition: applySteps.h:60
ripple::TERSubset< CanCvtToTER >
ripple::Change
Definition: Change.h:32
ripple::SetTrust
Definition: SetTrust.h:31
ripple::TER
TERSubset< CanCvtToTER > TER
Definition: TER.h:477
ripple::STTx
Definition: STTx.h:43
ripple::Transactor::calculateBaseFee
static FeeUnit64 calculateBaseFee(ReadView const &view, STTx const &tx)
Definition: Transactor.cpp:126
ripple::ApplyContext
State information when applying a tx.
Definition: ApplyContext.h:35
ripple::PayChanFund::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: PayChan.cpp:294
beast::Journal
A generic endpoint for log messages.
Definition: Journal.h:60
ripple::CreateOffer
Transactor specialized for creating offers in the ledger.
Definition: CreateOffer.h:34
ripple::ttCHECK_CASH
@ ttCHECK_CASH
Definition: TxFormats.h:54
ripple::temUNKNOWN
@ temUNKNOWN
Definition: TER.h:122
ripple::ttTICKET_CREATE
@ ttTICKET_CREATE
Definition: TxFormats.h:47
ripple::ttAMENDMENT
@ ttAMENDMENT
Definition: TxFormats.h:60
ripple::feeunit::TaggedFee
Definition: FeeUnits.h:72
ripple::invoke_calculateConsequences
static TxConsequences invoke_calculateConsequences(STTx const &tx)
Definition: applySteps.cpp:185
ripple::CancelOffer::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: CancelOffer.cpp:28
ripple::ttPAYCHAN_CREATE
@ ttPAYCHAN_CREATE
Definition: TxFormats.h:50
ripple::PreclaimContext::tx
STTx const & tx
Definition: Transactor.h:55
ripple::PayChanCreate::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: PayChan.cpp:174
ripple::invoke_apply
static std::pair< TER, bool > invoke_apply(ApplyContext &ctx)
Definition: applySteps.cpp:233
ripple::PreclaimContext
State information when determining if a tx is likely to claim a fee.
Definition: Transactor.h:49
ripple::ttESCROW_CREATE
@ ttESCROW_CREATE
Definition: TxFormats.h:38
ripple::preclaim
PreclaimResult preclaim(PreflightResult const &preflightResult, Application &app, OpenView const &view)
Gate a transaction based on static ledger information.
Definition: applySteps.cpp:285
ripple::ttCHECK_CREATE
@ ttCHECK_CREATE
Definition: TxFormats.h:53
ripple::CancelTicket::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: CancelTicket.cpp:30
ripple::CancelCheck
Definition: CancelCheck.h:27
ripple::Change::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: Change.cpp:31
ripple::EscrowCancel
Definition: Escrow.h:77
ripple::ReadView
A view into a ledger.
Definition: ReadView.h:186
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::invoke_preclaim
static TER invoke_preclaim(PreclaimContext const &ctx)
Definition: applySteps.cpp:83
ripple::ttTICKET_CANCEL
@ ttTICKET_CANCEL
Definition: TxFormats.h:48
ripple::SetRegularKey
Definition: SetRegularKey.h:30
ripple::EscrowCreate::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: Escrow.cpp:99
ripple::calculateConsequences
TxConsequences calculateConsequences(PreflightResult const &preflightResult)
Determine the XRP balance consequences if a transaction consumes the maximum XRP allowed.
Definition: applySteps.cpp:325
ripple::SetRegularKey::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: SetRegularKey.cpp:53
ripple::PayChanFund
Definition: app/tx/impl/PayChan.h:51
ripple::ttESCROW_CANCEL
@ ttESCROW_CANCEL
Definition: TxFormats.h:41
ripple::ttACCOUNT_SET
@ ttACCOUNT_SET
Definition: TxFormats.h:40
ripple::ReadView::seq
LedgerIndex seq() const
Returns the sequence number of the base ledger.
Definition: ReadView.h:258
ripple::FeeUnit64
FeeUnit< std::uint64_t > FeeUnit64
Definition: FeeUnits.h:477
ripple::SetAccount::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: SetAccount.cpp:52
ripple::ttOFFER_CANCEL
@ ttOFFER_CANCEL
Definition: TxFormats.h:45
ripple::Change::calculateBaseFee
static FeeUnit64 calculateBaseFee(ReadView const &view, STTx const &tx)
Definition: Change.h:50
ripple::PreclaimResult
Describes the results of the preclaim check.
Definition: applySteps.h:85
ripple::Rules
Rules controlling protocol behavior.
Definition: ReadView.h:126
ripple::EscrowCancel::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: Escrow.cpp:508
ripple::PreclaimResult::flags
const ApplyFlags flags
From the input - the flags.
Definition: applySteps.h:93
ripple::PreflightResult::flags
const ApplyFlags flags
From the input - the flags.
Definition: applySteps.h:55
ripple::CreateTicket::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: CreateTicket.cpp:30
ripple::CreateTicket
Definition: CreateTicket.h:30
ripple::tefEXCEPTION
@ tefEXCEPTION
Definition: TER.h:152
ripple::PreflightContext::tx
STTx const & tx
Definition: Transactor.h:36
ripple::PreflightContext
State information when preflighting a tx.
Definition: Transactor.h:32
ripple::Transactor::calculateFeePaid
static XRPAmount calculateFeePaid(STTx const &tx)
Definition: Transactor.cpp:146
ripple::CashCheck
Definition: CashCheck.h:27
ripple::PayChanCreate
Definition: app/tx/impl/PayChan.h:27
ripple::CreateCheck::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: CreateCheck.cpp:32
ripple::DepositPreauth::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: DepositPreauth.cpp:31
ripple::ttPAYCHAN_FUND
@ ttPAYCHAN_FUND
Definition: TxFormats.h:51
ripple::TxConsequences::blocker
@ blocker
Affects the ability of subsequent transactions to claim a fee.
Definition: applySteps.h:137
ripple::CancelTicket
Definition: CancelTicket.h:29
ripple::EscrowFinish
Definition: Escrow.h:51
ripple::tesSUCCESS
@ tesSUCCESS
Definition: TER.h:219
ripple::OpenView::rules
Rules const & rules() const override
Returns the tx processing rules.
Definition: OpenView.cpp:144
ripple::ttREGULAR_KEY_SET
@ ttREGULAR_KEY_SET
Definition: TxFormats.h:42
ripple::ttDEPOSIT_PREAUTH
@ ttDEPOSIT_PREAUTH
Definition: TxFormats.h:56
ripple::ApplyContext::tx
STTx const & tx
Definition: ApplyContext.h:45
std::exception::what
T what(T... args)
ripple::CancelCheck::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: CancelCheck.cpp:34
ripple::SetSignerList::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition: SetSignerList.cpp:75
ripple::PreclaimResult::tx
STTx const & tx
From the input - the transaction.
Definition: applySteps.h:91
ripple::ttSIGNER_LIST_SET
@ ttSIGNER_LIST_SET
Definition: TxFormats.h:49
ripple::PreflightResult::j
const beast::Journal j
From the input - the journal.
Definition: applySteps.h:57
ripple::NotTEC
TERSubset< CanCvtToNotTEC > NotTEC
Definition: TER.h:461