Skip to content

Commit 79d8abc

Browse files
authored
Merge branch 'develop' into batch-rpc
2 parents 1c765d9 + 1a7f824 commit 79d8abc

23 files changed

+4423
-4220
lines changed

include/xrpl/tx/InvariantCheck.h

Lines changed: 0 additions & 732 deletions
This file was deleted.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#pragma once
2+
3+
#include <xrpl/beast/utility/Journal.h>
4+
#include <xrpl/ledger/ReadView.h>
5+
#include <xrpl/protocol/STAmount.h>
6+
#include <xrpl/protocol/STTx.h>
7+
#include <xrpl/protocol/TER.h>
8+
9+
#include <optional>
10+
11+
namespace xrpl {
12+
13+
class ValidAMM
14+
{
15+
std::optional<AccountID> ammAccount_;
16+
std::optional<STAmount> lptAMMBalanceAfter_;
17+
std::optional<STAmount> lptAMMBalanceBefore_;
18+
bool ammPoolChanged_;
19+
20+
public:
21+
enum class ZeroAllowed : bool { No = false, Yes = true };
22+
23+
ValidAMM() : ammPoolChanged_{false}
24+
{
25+
}
26+
void
27+
visitEntry(bool, std::shared_ptr<SLE const> const&, std::shared_ptr<SLE const> const&);
28+
29+
bool
30+
finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&);
31+
32+
private:
33+
bool
34+
finalizeBid(bool enforce, beast::Journal const&) const;
35+
bool
36+
finalizeVote(bool enforce, beast::Journal const&) const;
37+
bool
38+
finalizeCreate(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const;
39+
bool
40+
finalizeDelete(bool enforce, TER res, beast::Journal const&) const;
41+
bool
42+
finalizeDeposit(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const;
43+
// Includes clawback
44+
bool
45+
finalizeWithdraw(STTx const&, ReadView const&, bool enforce, beast::Journal const&) const;
46+
bool
47+
finalizeDEX(bool enforce, beast::Journal const&) const;
48+
bool
49+
generalInvariant(STTx const&, ReadView const&, ZeroAllowed zeroAllowed, beast::Journal const&)
50+
const;
51+
};
52+
53+
} // namespace xrpl
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#pragma once
2+
3+
#include <xrpl/beast/utility/Journal.h>
4+
#include <xrpl/ledger/ReadView.h>
5+
#include <xrpl/protocol/Issue.h>
6+
#include <xrpl/protocol/STAmount.h>
7+
#include <xrpl/protocol/STTx.h>
8+
#include <xrpl/protocol/TER.h>
9+
10+
#include <map>
11+
#include <vector>
12+
13+
namespace xrpl {
14+
15+
/**
16+
* @brief Invariant: frozen trust line balance change is not allowed.
17+
*
18+
* We iterate all affected trust lines and ensure that they don't have
19+
* unexpected change of balance if they're frozen.
20+
*/
21+
class TransfersNotFrozen
22+
{
23+
struct BalanceChange
24+
{
25+
std::shared_ptr<SLE const> const line;
26+
int const balanceChangeSign;
27+
};
28+
29+
struct IssuerChanges
30+
{
31+
std::vector<BalanceChange> senders;
32+
std::vector<BalanceChange> receivers;
33+
};
34+
35+
using ByIssuer = std::map<Issue, IssuerChanges>;
36+
ByIssuer balanceChanges_;
37+
38+
std::map<AccountID, std::shared_ptr<SLE const> const> possibleIssuers_;
39+
40+
public:
41+
void
42+
visitEntry(bool, std::shared_ptr<SLE const> const&, std::shared_ptr<SLE const> const&);
43+
44+
bool
45+
finalize(STTx const&, TER const, XRPAmount const, ReadView const&, beast::Journal const&);
46+
47+
private:
48+
bool
49+
isValidEntry(std::shared_ptr<SLE const> const& before, std::shared_ptr<SLE const> const& after);
50+
51+
STAmount
52+
calculateBalanceChange(
53+
std::shared_ptr<SLE const> const& before,
54+
std::shared_ptr<SLE const> const& after,
55+
bool isDelete);
56+
57+
void
58+
recordBalance(Issue const& issue, BalanceChange change);
59+
60+
void
61+
recordBalanceChanges(std::shared_ptr<SLE const> const& after, STAmount const& balanceChange);
62+
63+
std::shared_ptr<SLE const>
64+
findIssuer(AccountID const& issuerID, ReadView const& view);
65+
66+
bool
67+
validateIssuerChanges(
68+
std::shared_ptr<SLE const> const& issuer,
69+
IssuerChanges const& changes,
70+
STTx const& tx,
71+
beast::Journal const& j,
72+
bool enforce);
73+
74+
bool
75+
validateFrozenState(
76+
BalanceChange const& change,
77+
bool high,
78+
STTx const& tx,
79+
beast::Journal const& j,
80+
bool enforce,
81+
bool globalFreeze);
82+
};
83+
84+
} // namespace xrpl

0 commit comments

Comments
 (0)