rippled
Loading...
Searching...
No Matches
xrpld
app
tx
detail
LedgerStateFix.cpp
1
//------------------------------------------------------------------------------
2
/*
3
This file is part of rippled: https://github.com/ripple/rippled
4
Copyright (c) 2024 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 <xrpld/app/tx/detail/LedgerStateFix.h>
21
#include <xrpld/app/tx/detail/NFTokenUtils.h>
22
23
#include <xrpl/ledger/View.h>
24
#include <xrpl/protocol/Feature.h>
25
#include <xrpl/protocol/Indexes.h>
26
#include <xrpl/protocol/TxFlags.h>
27
28
namespace
ripple
{
29
30
NotTEC
31
LedgerStateFix::preflight
(
PreflightContext
const
& ctx)
32
{
33
if
(!ctx.
rules
.
enabled
(fixNFTokenPageLinks))
34
return
temDISABLED
;
35
36
if
(ctx.
tx
.
getFlags
() &
tfUniversalMask
)
37
return
temINVALID_FLAG
;
38
39
if
(
auto
const
ret =
preflight1
(ctx); !
isTesSuccess
(ret))
40
return
ret;
41
42
switch
(ctx.
tx
[sfLedgerFixType])
43
{
44
case
FixType::nfTokenPageLink
:
45
if
(!ctx.
tx
.
isFieldPresent
(sfOwner))
46
return
temINVALID
;
47
break
;
48
49
default
:
50
return
tefINVALID_LEDGER_FIX_TYPE
;
51
}
52
53
return
preflight2
(ctx);
54
}
55
56
XRPAmount
57
LedgerStateFix::calculateBaseFee
(
ReadView
const
& view,
STTx
const
& tx)
58
{
59
// The fee required for LedgerStateFix is one owner reserve, just like
60
// the fee for AccountDelete.
61
return
view
.
fees
().
increment
;
62
}
63
64
TER
65
LedgerStateFix::preclaim
(
PreclaimContext
const
& ctx)
66
{
67
switch
(ctx.
tx
[sfLedgerFixType])
68
{
69
case
FixType::nfTokenPageLink
: {
70
AccountID
const
owner{ctx.
tx
[sfOwner]};
71
if
(!ctx.
view
.
read
(
keylet::account
(owner)))
72
return
tecOBJECT_NOT_FOUND
;
73
74
return
tesSUCCESS
;
75
}
76
}
77
78
// preflight is supposed to verify that only valid FixTypes get to preclaim.
79
return
tecINTERNAL
;
80
}
81
82
TER
83
LedgerStateFix::doApply
()
84
{
85
switch
(
ctx_
.
tx
[sfLedgerFixType])
86
{
87
case
FixType::nfTokenPageLink
:
88
if
(!
nft::repairNFTokenDirectoryLinks
(
view
(),
ctx_
.
tx
[sfOwner]))
89
return
tecFAILED_PROCESSING
;
90
91
return
tesSUCCESS
;
92
}
93
94
// preflight is supposed to verify that only valid FixTypes get to doApply.
95
return
tecINTERNAL
;
96
}
97
98
}
// namespace ripple
ripple::ApplyContext::tx
STTx const & tx
Definition
ApplyContext.h:72
ripple::LedgerStateFix::calculateBaseFee
static XRPAmount calculateBaseFee(ReadView const &view, STTx const &tx)
Definition
LedgerStateFix.cpp:57
ripple::LedgerStateFix::preflight
static NotTEC preflight(PreflightContext const &ctx)
Definition
LedgerStateFix.cpp:31
ripple::LedgerStateFix::preclaim
static TER preclaim(PreclaimContext const &ctx)
Definition
LedgerStateFix.cpp:65
ripple::LedgerStateFix::doApply
TER doApply() override
Definition
LedgerStateFix.cpp:83
ripple::LedgerStateFix::nfTokenPageLink
@ nfTokenPageLink
Definition
LedgerStateFix.h:31
ripple::ReadView
A view into a ledger.
Definition
ReadView.h:51
ripple::ReadView::read
virtual std::shared_ptr< SLE const > read(Keylet const &k) const =0
Return the state item associated with a key.
ripple::ReadView::fees
virtual Fees const & fees() const =0
Returns the fees for the base ledger.
ripple::Rules::enabled
bool enabled(uint256 const &feature) const
Returns true if a feature is enabled.
Definition
Rules.cpp:130
ripple::STObject::isFieldPresent
bool isFieldPresent(SField const &field) const
Definition
STObject.cpp:484
ripple::STObject::getFlags
std::uint32_t getFlags() const
Definition
STObject.cpp:537
ripple::STTx
Definition
STTx.h:48
ripple::TERSubset< CanCvtToTER >
ripple::Transactor::view
ApplyView & view()
Definition
Transactor.h:161
ripple::Transactor::ctx_
ApplyContext & ctx_
Definition
Transactor.h:141
ripple::XRPAmount
Definition
XRPAmount.h:43
ripple::base_uint< 160, detail::AccountIDTag >
ripple::keylet::account
Keylet account(AccountID const &id) noexcept
AccountID root.
Definition
Indexes.cpp:184
ripple::nft::repairNFTokenDirectoryLinks
bool repairNFTokenDirectoryLinks(ApplyView &view, AccountID const &owner)
Repairs the links in an NFTokenPage directory.
Definition
NFTokenUtils.cpp:717
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:25
ripple::preflight1
NotTEC preflight1(PreflightContext const &ctx)
Performs early sanity checks on the account and fee fields.
Definition
Transactor.cpp:91
ripple::tefINVALID_LEDGER_FIX_TYPE
@ tefINVALID_LEDGER_FIX_TYPE
Definition
TER.h:187
ripple::preflight2
NotTEC preflight2(PreflightContext const &ctx)
Checks whether the signature appears valid.
Definition
Transactor.cpp:160
ripple::tecOBJECT_NOT_FOUND
@ tecOBJECT_NOT_FOUND
Definition
TER.h:326
ripple::tecINTERNAL
@ tecINTERNAL
Definition
TER.h:310
ripple::tecFAILED_PROCESSING
@ tecFAILED_PROCESSING
Definition
TER.h:286
ripple::tesSUCCESS
@ tesSUCCESS
Definition
TER.h:244
ripple::isTesSuccess
bool isTesSuccess(TER x) noexcept
Definition
TER.h:674
ripple::tfUniversalMask
constexpr std::uint32_t tfUniversalMask
Definition
TxFlags.h:63
ripple::NotTEC
TERSubset< CanCvtToNotTEC > NotTEC
Definition
TER.h:605
ripple::temINVALID
@ temINVALID
Definition
TER.h:110
ripple::temINVALID_FLAG
@ temINVALID_FLAG
Definition
TER.h:111
ripple::temDISABLED
@ temDISABLED
Definition
TER.h:114
ripple::Fees::increment
XRPAmount increment
Definition
protocol/Fees.h:36
ripple::PreclaimContext
State information when determining if a tx is likely to claim a fee.
Definition
Transactor.h:80
ripple::PreclaimContext::view
ReadView const & view
Definition
Transactor.h:83
ripple::PreclaimContext::tx
STTx const & tx
Definition
Transactor.h:86
ripple::PreflightContext
State information when preflighting a tx.
Definition
Transactor.h:35
ripple::PreflightContext::rules
Rules const rules
Definition
Transactor.h:39
ripple::PreflightContext::tx
STTx const & tx
Definition
Transactor.h:38
Generated by
1.9.8