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
#include <xrpld/ledger/View.h>
23
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:52
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:159
ripple::Transactor::ctx_
ApplyContext & ctx_
Definition:
Transactor.h:140
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:79
ripple::PreclaimContext::view
ReadView const & view
Definition:
Transactor.h:82
ripple::PreclaimContext::tx
STTx const & tx
Definition:
Transactor.h:85
ripple::PreflightContext
State information when preflighting a tx.
Definition:
Transactor.h:34
ripple::PreflightContext::rules
Rules const rules
Definition:
Transactor.h:38
ripple::PreflightContext::tx
STTx const & tx
Definition:
Transactor.h:37
Generated by
1.9.5