xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
libxrpl
ledger
helpers
OfferHelpers.cpp
1
#include <xrpl/ledger/helpers/OfferHelpers.h>
2
3
#include <xrpl/basics/base_uint.h>
4
#include <xrpl/beast/utility/Journal.h>
5
#include <xrpl/beast/utility/instrumentation.h>
6
#include <xrpl/ledger/ApplyView.h>
7
#include <xrpl/ledger/helpers/AccountRootHelpers.h>
8
#include <xrpl/protocol/Indexes.h>
9
#include <xrpl/protocol/LedgerFormats.h>
// IWYU pragma: keep
10
#include <xrpl/protocol/SField.h>
11
#include <xrpl/protocol/STArray.h>
// IWYU pragma: keep
12
#include <xrpl/protocol/STLedgerEntry.h>
13
#include <xrpl/protocol/TER.h>
14
15
namespace
xrpl
{
16
17
TER
18
offerDelete
(
ApplyView
& view,
SLE::Ref
sle,
beast::Journal
j)
19
{
20
if
(!sle)
21
return
tesSUCCESS
;
22
auto
offerIndex = sle->key();
23
auto
owner = sle->getAccountID(sfAccount);
24
25
// Detect legacy directories.
26
UInt256
const
uDirectory = sle->getFieldH256(sfBookDirectory);
27
28
if
(!view.
dirRemove
(
keylet::ownerDir
(owner), sle->getFieldU64(sfOwnerNode), offerIndex,
false
))
29
{
30
return
tefBAD_LEDGER
;
// LCOV_EXCL_LINE
31
}
32
33
if
(!view.
dirRemove
(
keylet::page
(uDirectory), sle->getFieldU64(sfBookNode), offerIndex,
false
))
34
{
35
return
tefBAD_LEDGER
;
// LCOV_EXCL_LINE
36
}
37
38
if
(sle->isFieldPresent(sfAdditionalBooks))
39
{
40
XRPL_ASSERT(
41
sle->isFlag(lsfHybrid) && sle->isFieldPresent(sfDomainID),
42
"xrpl::offerDelete : should be a hybrid domain offer"
);
43
44
auto
const
& additionalBookDirs = sle->getFieldArray(sfAdditionalBooks);
45
46
for
(
auto
const
& bookDir : additionalBookDirs)
47
{
48
auto
const
& dirIndex = bookDir.getFieldH256(sfBookDirectory);
49
auto
const
& dirNode = bookDir.getFieldU64(sfBookNode);
50
51
if
(!view.
dirRemove
(
keylet::page
(dirIndex), dirNode, offerIndex,
false
))
52
{
53
return
tefBAD_LEDGER
;
// LCOV_EXCL_LINE
54
}
55
}
56
}
57
58
decreaseOwnerCountForObject
(view, owner, sle, 1, j);
59
60
view.
erase
(sle);
61
62
return
tesSUCCESS
;
63
}
64
65
}
// namespace xrpl
beast::Journal
A generic endpoint for log messages.
Definition
Journal.h:44
xrpl::ApplyView
Writeable view to a ledger, for applying a transaction.
Definition
ApplyView.h:141
xrpl::ApplyView::dirRemove
bool dirRemove(Keylet const &directory, std::uint64_t page, UInt256 const &key, bool keepRoot)
Remove an entry from a directory.
Definition
ApplyView.cpp:256
xrpl::ApplyView::erase
virtual void erase(SLE::Ref sle)=0
Remove a peeked SLE.
xrpl::STLedgerEntry::Ref
std::shared_ptr< STLedgerEntry > const & Ref
Definition
STLedgerEntry.h:35
xrpl::keylet::ownerDir
Keylet ownerDir(AccountID const &id) noexcept
The root page of an account's directory.
Definition
Indexes.cpp:403
xrpl::keylet::page
Keylet page(UInt256 const &root, std::uint64_t const index=0) noexcept
A page in a directory.
Definition
Indexes.cpp:409
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::offerDelete
TER offerDelete(ApplyView &view, SLE::Ref sle, beast::Journal j)
Delete an offer.
Definition
OfferHelpers.cpp:18
xrpl::tefBAD_LEDGER
@ tefBAD_LEDGER
Definition
TER.h:165
xrpl::UInt256
BaseUInt< 256 > UInt256
Definition
base_uint.h:580
xrpl::decreaseOwnerCountForObject
void decreaseOwnerCountForObject(ApplyView &view, SLE::Ref accountSle, SLE::Ref objectSle, std::uint32_t count, beast::Journal j)
Decrease owner-count fields for an existing ledger object.
Definition
AccountRootHelpers.cpp:359
xrpl::TER
TERSubset< CanCvtToTER > TER
Definition
TER.h:654
xrpl::tesSUCCESS
@ tesSUCCESS
Definition
TER.h:250
Generated by
1.17.0