mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-22 14:50:54 +00:00
refactor: Use SeqProxy instead of uint32 for all sequence-based keylets (#7890)
Co-authored-by: xrplf-ai-reviewer[bot] <266832837+xrplf-ai-reviewer[bot]@users.noreply.github.com>
This commit is contained in:
@@ -42,6 +42,7 @@
|
||||
#include <xrpl/protocol/STLedgerEntry.h>
|
||||
#include <xrpl/protocol/STObject.h>
|
||||
#include <xrpl/protocol/STTx.h>
|
||||
#include <xrpl/protocol/SeqProxy.h>
|
||||
#include <xrpl/protocol/SystemParameters.h>
|
||||
#include <xrpl/protocol/TER.h>
|
||||
#include <xrpl/protocol/TxFlags.h>
|
||||
@@ -633,8 +634,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
// make a dummy escrow ledger entry, then change the type to an
|
||||
// unsupported value so that the valid type invariant check
|
||||
// will fail.
|
||||
auto const sleNew =
|
||||
std::make_shared<SLE>(keylet::escrow(a1, (*sle)[sfSequence] + 2));
|
||||
auto const sleNew = std::make_shared<SLE>(
|
||||
keylet::escrow(a1, SeqProxy::rawSequence((*sle)[sfSequence] + 2)));
|
||||
|
||||
// We don't use ltNICKNAME directly since it's marked deprecated
|
||||
// to prevent accidental use elsewhere.
|
||||
@@ -921,7 +922,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
auto const sle = ac.view().peek(keylet::account(a1.id()));
|
||||
if (!sle)
|
||||
return false;
|
||||
auto sleNew = std::make_shared<SLE>(keylet::offer(a1.id(), (*sle)[sfSequence]));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::offer(a1.id(), SeqProxy::rawSequence((*sle)[sfSequence])));
|
||||
sleNew->setAccountID(sfAccount, a1.id());
|
||||
sleNew->setFieldU32(sfSequence, (*sle)[sfSequence]);
|
||||
sleNew->setFieldAmount(sfTakerPays, XRP(-1));
|
||||
@@ -935,7 +937,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
auto const sle = ac.view().peek(keylet::account(a1.id()));
|
||||
if (!sle)
|
||||
return false;
|
||||
auto sleNew = std::make_shared<SLE>(keylet::offer(a1.id(), (*sle)[sfSequence]));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::offer(a1.id(), SeqProxy::rawSequence((*sle)[sfSequence])));
|
||||
sleNew->setAccountID(sfAccount, a1.id());
|
||||
sleNew->setFieldU32(sfSequence, (*sle)[sfSequence]);
|
||||
sleNew->setFieldAmount(sfTakerPays, a1["USD"](10));
|
||||
@@ -950,7 +953,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
auto const sle = ac.view().peek(keylet::account(a1.id()));
|
||||
if (!sle)
|
||||
return false;
|
||||
auto sleNew = std::make_shared<SLE>(keylet::offer(a1.id(), (*sle)[sfSequence]));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::offer(a1.id(), SeqProxy::rawSequence((*sle)[sfSequence])));
|
||||
sleNew->setAccountID(sfAccount, a1.id());
|
||||
sleNew->setFieldU32(sfSequence, (*sle)[sfSequence]);
|
||||
sleNew->setFieldAmount(sfTakerPays, XRP(10));
|
||||
@@ -974,7 +978,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
auto const sle = ac.view().peek(keylet::account(a1.id()));
|
||||
if (!sle)
|
||||
return false;
|
||||
auto sleNew = std::make_shared<SLE>(keylet::escrow(a1, (*sle)[sfSequence] + 2));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::escrow(a1, SeqProxy::rawSequence((*sle)[sfSequence] + 2)));
|
||||
sleNew->setFieldAmount(sfAmount, XRP(-1));
|
||||
ac.view().insert(sleNew);
|
||||
return true;
|
||||
@@ -988,7 +993,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
auto const sle = ac.view().peek(keylet::account(a1.id()));
|
||||
if (!sle)
|
||||
return false;
|
||||
auto sleNew = std::make_shared<SLE>(keylet::escrow(a1, (*sle)[sfSequence] + 2));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::escrow(a1, SeqProxy::rawSequence((*sle)[sfSequence] + 2)));
|
||||
// Use `drops(1)` to bypass a call to STAmount::canonicalize
|
||||
// with an invalid value
|
||||
sleNew->setFieldAmount(sfAmount, kInitialXrp + drops(1));
|
||||
@@ -1004,7 +1010,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
auto const sle = ac.view().peek(keylet::account(a1.id()));
|
||||
if (!sle)
|
||||
return false;
|
||||
auto sleNew = std::make_shared<SLE>(keylet::escrow(a1, (*sle)[sfSequence] + 2));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::escrow(a1, SeqProxy::rawSequence((*sle)[sfSequence] + 2)));
|
||||
|
||||
Issue const usd{Currency(0x5553440000000000), AccountID(0x4985601)};
|
||||
STAmount const amt(usd, -1);
|
||||
@@ -1021,7 +1028,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
auto const sle = ac.view().peek(keylet::account(a1.id()));
|
||||
if (!sle)
|
||||
return false;
|
||||
auto sleNew = std::make_shared<SLE>(keylet::escrow(a1, (*sle)[sfSequence] + 2));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::escrow(a1, SeqProxy::rawSequence((*sle)[sfSequence] + 2)));
|
||||
|
||||
Issue const bad{badCurrency(), AccountID(0x4985601)};
|
||||
STAmount const amt(bad, 1);
|
||||
@@ -1038,7 +1046,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
auto const sle = ac.view().peek(keylet::account(a1.id()));
|
||||
if (!sle)
|
||||
return false;
|
||||
auto sleNew = std::make_shared<SLE>(keylet::escrow(a1, (*sle)[sfSequence] + 2));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::escrow(a1, SeqProxy::rawSequence((*sle)[sfSequence] + 2)));
|
||||
|
||||
MPTIssue const mpt{makeMptID(1, AccountID(0x4985601))};
|
||||
STAmount const amt(mpt, -1);
|
||||
@@ -1463,7 +1472,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
std::uint32_t numCreds = 2,
|
||||
std::uint32_t seq = 10)
|
||||
{
|
||||
Keylet const pdKeylet = keylet::permissionedDomain(a1.id(), seq);
|
||||
Keylet const pdKeylet = keylet::permissionedDomain(a1.id(), SeqProxy::rawSequence(seq));
|
||||
auto sle = std::make_shared<SLE>(pdKeylet);
|
||||
|
||||
sle->setAccountID(sfOwner, a1);
|
||||
@@ -2005,7 +2014,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
makeEnv(features),
|
||||
{{"domain doesn't exist"}},
|
||||
[](Account const& a1, Account const&, ApplyContext& ac) {
|
||||
Keylet const offerKey = keylet::offer(a1.id(), 10);
|
||||
Keylet const offerKey = keylet::offer(a1.id(), SeqProxy::rawSequence(10));
|
||||
auto sleOffer = std::make_shared<SLE>(offerKey);
|
||||
sleOffer->setAccountID(sfAccount, a1);
|
||||
sleOffer->setFieldAmount(sfTakerPays, a1["USD"](10));
|
||||
@@ -2032,7 +2041,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
makeEnv(features),
|
||||
{{"hybrid offer is malformed"}},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
Keylet const offerKey = keylet::offer(a2.id(), 10);
|
||||
Keylet const offerKey = keylet::offer(a2.id(), SeqProxy::rawSequence(10));
|
||||
auto sleOffer = std::make_shared<SLE>(offerKey);
|
||||
sleOffer->setAccountID(sfAccount, a2);
|
||||
sleOffer->setFieldAmount(sfTakerPays, a1["USD"](10));
|
||||
@@ -2067,7 +2076,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
a2,
|
||||
{{"hybrid offer is malformed"}},
|
||||
[&pd1](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
Keylet const offerKey = keylet::offer(a2.id(), 10);
|
||||
Keylet const offerKey = keylet::offer(a2.id(), SeqProxy::rawSequence(10));
|
||||
auto sleOffer = std::make_shared<SLE>(offerKey);
|
||||
sleOffer->setAccountID(sfAccount, a2);
|
||||
sleOffer->setFieldAmount(sfTakerPays, a1["USD"](10));
|
||||
@@ -2106,7 +2115,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
fixEnabled ? std::vector<std::string>{{"hybrid offer is malformed"}}
|
||||
: std::vector<std::string>{},
|
||||
[&pd1](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
Keylet const offerKey = keylet::offer(a2.id(), 10);
|
||||
Keylet const offerKey = keylet::offer(a2.id(), SeqProxy::rawSequence(10));
|
||||
auto sleOffer = std::make_shared<SLE>(offerKey);
|
||||
sleOffer->setAccountID(sfAccount, a2);
|
||||
sleOffer->setFieldAmount(sfTakerPays, a1["USD"](10));
|
||||
@@ -2143,7 +2152,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
a2,
|
||||
{{"hybrid offer is malformed"}},
|
||||
[&pd1](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
Keylet const offerKey = keylet::offer(a2.id(), 10);
|
||||
Keylet const offerKey = keylet::offer(a2.id(), SeqProxy::rawSequence(10));
|
||||
auto sleOffer = std::make_shared<SLE>(offerKey);
|
||||
sleOffer->setAccountID(sfAccount, a2);
|
||||
sleOffer->setFieldAmount(sfTakerPays, a1["USD"](10));
|
||||
@@ -2176,7 +2185,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
a2,
|
||||
{{"transaction consumed wrong domains"}},
|
||||
[&pd1](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
Keylet const offerKey = keylet::offer(a2.id(), 10);
|
||||
Keylet const offerKey = keylet::offer(a2.id(), SeqProxy::rawSequence(10));
|
||||
auto sleOffer = std::make_shared<SLE>(offerKey);
|
||||
sleOffer->setAccountID(sfAccount, a2);
|
||||
sleOffer->setFieldAmount(sfTakerPays, a1["USD"](10));
|
||||
@@ -2213,7 +2222,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
a2,
|
||||
{{"domain transaction affected regular offers"}},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
Keylet const offerKey = keylet::offer(a2.id(), 10);
|
||||
Keylet const offerKey = keylet::offer(a2.id(), SeqProxy::rawSequence(10));
|
||||
auto sleOffer = std::make_shared<SLE>(offerKey);
|
||||
sleOffer->setAccountID(sfAccount, a2);
|
||||
sleOffer->setFieldAmount(sfTakerPays, a1["USD"](10));
|
||||
@@ -2414,7 +2423,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
// Create Loan Broker
|
||||
using namespace loan_broker;
|
||||
|
||||
auto const loanBrokerKeylet = keylet::loanBroker(a.id(), env.seq(a));
|
||||
auto const loanBrokerKeylet = keylet::loanBroker(a.id(), SeqProxy::rawSequence(env.seq(a)));
|
||||
// Create a Loan Broker with all default values.
|
||||
env(set(a, vaultID), Fee(kIncrement));
|
||||
|
||||
@@ -2918,7 +2927,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"vault deletion succeeded without deleting a vault"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -2939,7 +2948,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"vault updated by a wrong transaction type",
|
||||
"deleted Vault without deleting its pseudo-account"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -2959,7 +2968,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"vault updated by a wrong transaction type"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -2980,7 +2989,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"vault updated by a wrong transaction type"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const sequence = ac.view().seq();
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), sequence);
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), SeqProxy::rawSequence(sequence));
|
||||
auto sleVault = std::make_shared<SLE>(vaultKeylet);
|
||||
auto const vaultPage = ac.view().dirInsert(
|
||||
keylet::ownerDir(a1.id()), sleVault->key(), describeOwnerDir(a1.id()));
|
||||
@@ -2997,7 +3006,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"vault deleted by a wrong transaction type",
|
||||
"deleted Vault without deleting its pseudo-account"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3019,14 +3028,16 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"deleted Vault without deleting its pseudo-account"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
{
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet =
|
||||
keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
ac.view().erase(sleVault);
|
||||
}
|
||||
{
|
||||
auto const keylet = keylet::vault(a2.id(), ac.view().seq());
|
||||
auto const keylet =
|
||||
keylet::vault(a2.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3055,7 +3066,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const sequence = ac.view().seq();
|
||||
auto const insertVault = [&](Account const a) {
|
||||
auto const vaultKeylet = keylet::vault(a.id(), sequence);
|
||||
auto const vaultKeylet = keylet::vault(a.id(), SeqProxy::rawSequence(sequence));
|
||||
auto sleVault = std::make_shared<SLE>(vaultKeylet);
|
||||
auto const vaultPage = ac.view().dirInsert(
|
||||
keylet::ownerDir(a.id()), sleVault->key(), describeOwnerDir(a.id()));
|
||||
@@ -3075,7 +3086,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"deleted vault must also delete shares",
|
||||
"deleted Vault without deleting its pseudo-account"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3097,7 +3108,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"deleted vault must have no assets outstanding",
|
||||
"deleted vault must have no assets available"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3122,7 +3133,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"vault operation succeeded without modifying a vault"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3209,7 +3220,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"updated vault must have shares"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3236,7 +3247,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"vault operation succeeded without updating shares",
|
||||
"assets available must not be greater than assets outstanding"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3264,7 +3275,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"assets available must not be greater than assets outstanding",
|
||||
"assets outstanding must not be negative"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3296,7 +3307,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"violation of vault immutable data"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3312,7 +3323,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"violation of vault immutable data"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3328,7 +3339,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"violation of vault immutable data"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3345,7 +3356,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"vault transaction must not change loss unrealized",
|
||||
"set must not change assets outstanding"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [&](Adjustments& sample) {
|
||||
sample.lossUnrealized = 13;
|
||||
sample.assetsTotal = 20;
|
||||
@@ -3362,7 +3373,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"between assets outstanding and available",
|
||||
"vault transaction must not change loss unrealized"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 100, [&](Adjustments& sample) {
|
||||
sample.lossUnrealized = 13;
|
||||
}));
|
||||
@@ -3381,7 +3392,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"loss unrealized must not be negative"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [&](Adjustments& sample) {
|
||||
sample.lossUnrealized = -1;
|
||||
}));
|
||||
@@ -3398,7 +3409,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
makeEnv(defaultAmendments() - fixCleanup3_4_0),
|
||||
{},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [&](Adjustments& sample) {
|
||||
sample.lossUnrealized = -1;
|
||||
}));
|
||||
@@ -3412,7 +3423,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"set assets outstanding must not exceed assets maximum"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [&](Adjustments& sample) {
|
||||
sample.assetsMaximum = 1;
|
||||
}));
|
||||
@@ -3426,7 +3437,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"assets maximum must not be negative"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [&](Adjustments& sample) {
|
||||
sample.assetsMaximum = -1;
|
||||
}));
|
||||
@@ -3442,7 +3453,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"updated zero sized vault must have no assets outstanding",
|
||||
"updated zero sized vault must have no assets available"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3463,7 +3474,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"updated shares must not exceed maximum"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3484,7 +3495,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"updated shares must not exceed maximum"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
kAdjust(ac.view(), keylet, kArgs(a2.id(), 10, [](Adjustments&) {}));
|
||||
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
@@ -3511,7 +3522,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"create operation must not have updated a vault",
|
||||
},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3537,7 +3548,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"create operation must not have updated a vault",
|
||||
},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3564,7 +3575,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"create operation must not have updated a vault",
|
||||
},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3588,7 +3599,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"create operation must not have updated a vault",
|
||||
},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3616,7 +3627,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"create operation must not have updated a vault",
|
||||
},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3640,7 +3651,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"shares issuer must be a pseudo-account",
|
||||
"shares issuer pseudo-account must point back to the vault"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
auto sleVault = ac.view().peek(keylet);
|
||||
if (!sleVault)
|
||||
return false;
|
||||
@@ -3669,7 +3680,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
// the invariants holding. Except one: it is created by the
|
||||
// wrong transaction type.
|
||||
auto const sequence = ac.view().seq();
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), sequence);
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), SeqProxy::rawSequence(sequence));
|
||||
auto sleVault = std::make_shared<SLE>(vaultKeylet);
|
||||
auto const vaultPage = ac.view().dirInsert(
|
||||
keylet::ownerDir(a1.id()), sleVault->key(), describeOwnerDir(a1.id()));
|
||||
@@ -3725,7 +3736,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"shares issuer pseudo-account must point back to the vault"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const sequence = ac.view().seq();
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), sequence);
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), SeqProxy::rawSequence(sequence));
|
||||
auto sleVault = std::make_shared<SLE>(vaultKeylet);
|
||||
auto const vaultPage = ac.view().dirInsert(
|
||||
keylet::ownerDir(a1.id()), sleVault->key(), describeOwnerDir(a1.id()));
|
||||
@@ -3784,7 +3795,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"shares issuer and vault pseudo-account must be the same", "shares issuer must exist"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const sequence = ac.view().seq();
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), sequence);
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), SeqProxy::rawSequence(sequence));
|
||||
auto sleVault = std::make_shared<SLE>(vaultKeylet);
|
||||
auto const vaultPage = ac.view().dirInsert(
|
||||
keylet::ownerDir(a1.id()), sleVault->key(), describeOwnerDir(a1.id()));
|
||||
@@ -3825,7 +3836,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"deposit must change vault balance"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [](Adjustments& sample) {
|
||||
sample.vaultAssets.reset();
|
||||
}));
|
||||
@@ -3838,7 +3849,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"deposit assets outstanding must not exceed assets maximum"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 200, [&](Adjustments& sample) {
|
||||
sample.assetsMaximum = 1;
|
||||
}));
|
||||
@@ -3857,7 +3868,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"deposit must increase vault balance", "deposit must change depositor balance"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
|
||||
// Move 10 drops to A4 to enforce total XRP balance
|
||||
auto sleA4 = ac.view().peek(keylet::account(a4.id()));
|
||||
@@ -3887,7 +3898,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"deposit and assets outstanding must add up",
|
||||
"deposit and assets available must add up"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
|
||||
// Move 10 drops from A2 to A3 to enforce total XRP balance
|
||||
auto sleA3 = ac.view().peek(keylet::account(a3.id()));
|
||||
@@ -3910,7 +3921,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"deposit must change depositor balance"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
|
||||
// Move 10 drops from A3 to vault to enforce total XRP balance
|
||||
auto sleA3 = ac.view().peek(keylet::account(a3.id()));
|
||||
@@ -3932,7 +3943,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"deposit must change depositor shares"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 10, [&](Adjustments& sample) {
|
||||
sample.accountShares.reset();
|
||||
}));
|
||||
@@ -3946,7 +3957,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"deposit must change vault shares"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 10, [](Adjustments& sample) {
|
||||
sample.sharesTotal = 0;
|
||||
@@ -3964,7 +3975,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"deposit must not change vault balance by more than deposited "
|
||||
"amount"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 10, [&](Adjustments& sample) {
|
||||
sample.accountShares->amount = -5;
|
||||
sample.sharesTotal = -10;
|
||||
@@ -3983,7 +3994,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
(*sleA3)[sfBalance] = *(*sleA3)[sfBalance] - 2000;
|
||||
ac.view().update(sleA3);
|
||||
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 10, [&](Adjustments& sample) {
|
||||
sample.assetsTotal = 11;
|
||||
}));
|
||||
@@ -4004,7 +4015,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"deposit and assets outstanding must add up",
|
||||
"deposit and assets available must add up"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 10, [&](Adjustments& sample) {
|
||||
sample.assetsTotal = 7;
|
||||
sample.assetsAvailable = 7;
|
||||
@@ -4020,7 +4031,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"withdrawal must change vault balance"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [](Adjustments& sample) {
|
||||
sample.vaultAssets.reset();
|
||||
}));
|
||||
@@ -4037,7 +4048,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"withdrawal must change one destination balance"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
|
||||
// Move 10 drops to A4 to enforce total XRP balance
|
||||
auto sleA4 = ac.view().peek(keylet::account(a4.id()));
|
||||
@@ -4071,7 +4082,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"withdrawal and assets available must add up",
|
||||
},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
|
||||
// Move 10 drops from A2 to A3 to enforce total XRP balance
|
||||
auto sleA3 = ac.view().peek(keylet::account(a3.id()));
|
||||
@@ -4094,7 +4105,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"withdrawal must change one destination balance"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
if (!kAdjust(ac.view(), keylet, kArgs(a2.id(), -10, [&](Adjustments& sample) {
|
||||
*sample.vaultAssets -= 5;
|
||||
})))
|
||||
@@ -4115,7 +4126,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"withdrawal must change depositor shares"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), -10, [&](Adjustments& sample) {
|
||||
sample.accountShares.reset();
|
||||
}));
|
||||
@@ -4129,7 +4140,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"withdrawal must change vault shares"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), -10, [](Adjustments& sample) {
|
||||
sample.sharesTotal = 0;
|
||||
}));
|
||||
@@ -4145,7 +4156,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"withdrawal must change depositor and vault shares by equal "
|
||||
"amount"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), -10, [&](Adjustments& sample) {
|
||||
sample.accountShares->amount = 5;
|
||||
sample.sharesTotal = 10;
|
||||
@@ -4161,7 +4172,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
{"withdrawal and assets outstanding must add up",
|
||||
"withdrawal and assets available must add up"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), -10, [&](Adjustments& sample) {
|
||||
sample.assetsTotal = -15;
|
||||
sample.assetsAvailable = -15;
|
||||
@@ -4180,7 +4191,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
(*sleA3)[sfBalance] = *(*sleA3)[sfBalance] - 2000;
|
||||
ac.view().update(sleA3);
|
||||
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), -10, [&](Adjustments& sample) {
|
||||
sample.assetsTotal = -7;
|
||||
}));
|
||||
@@ -4248,7 +4259,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"withdrawal must change depositor and vault shares by equal "
|
||||
"amount"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq() - 2);
|
||||
auto const keylet =
|
||||
keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq() - 2));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), -10, [&](Adjustments& sample) {
|
||||
sample.accountShares->amount = 5;
|
||||
}));
|
||||
@@ -4263,7 +4275,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"clawback must change vault balance"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq() - 2);
|
||||
auto const keylet =
|
||||
keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq() - 2));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), -1, [&](Adjustments& sample) {
|
||||
sample.vaultAssets.reset();
|
||||
}));
|
||||
@@ -4277,7 +4290,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"clawback may only be performed by the asset issuer"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq());
|
||||
auto const keylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq()));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [&](Adjustments& sample) {}));
|
||||
},
|
||||
XRPAmount{},
|
||||
@@ -4289,7 +4302,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"clawback may only be performed by the asset issuer"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq() - 2);
|
||||
auto const keylet =
|
||||
keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq() - 2));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a2.id(), 0, [&](Adjustments& sample) {}));
|
||||
},
|
||||
XRPAmount{},
|
||||
@@ -4302,7 +4316,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"clawback must decrease holder shares",
|
||||
"clawback must change vault shares"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq() - 2);
|
||||
auto const keylet =
|
||||
keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq() - 2));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a4.id(), 10, [&](Adjustments& sample) {
|
||||
sample.sharesTotal = 0;
|
||||
}));
|
||||
@@ -4320,7 +4335,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
doInvariantCheck(
|
||||
{"clawback must change holder shares"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq() - 2);
|
||||
auto const keylet =
|
||||
keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq() - 2));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a4.id(), -10, [&](Adjustments& sample) {
|
||||
sample.accountShares.reset();
|
||||
}));
|
||||
@@ -4340,7 +4356,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
"clawback and assets outstanding must add up",
|
||||
"clawback and assets available must add up"},
|
||||
[&](Account const& a1, Account const& a2, ApplyContext& ac) {
|
||||
auto const keylet = keylet::vault(a1.id(), ac.view().seq() - 2);
|
||||
auto const keylet =
|
||||
keylet::vault(a1.id(), SeqProxy::rawSequence(ac.view().seq() - 2));
|
||||
return kAdjust(ac.view(), keylet, kArgs(a4.id(), -10, [&](Adjustments& sample) {
|
||||
sample.accountShares->amount = -8;
|
||||
sample.assetsTotal = -7;
|
||||
@@ -4398,7 +4415,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
if (!sle)
|
||||
return false;
|
||||
|
||||
auto sleNew = std::make_shared<SLE>(keylet::check(a1.id(), (*sle)[sfSequence]));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::check(a1.id(), SeqProxy::rawSequence((*sle)[sfSequence])));
|
||||
sleNew->setAccountID(sfAccount, a1.id());
|
||||
sleNew->setAccountID(sfDestination, a2.id());
|
||||
sleNew->setFieldAmount(sfSendMax, nonCanonicalMPTAmount(sfSendMax));
|
||||
@@ -4413,7 +4431,8 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
if (!sle)
|
||||
return false;
|
||||
|
||||
auto sleNew = std::make_shared<SLE>(keylet::check(a1.id(), (*sle)[sfSequence]));
|
||||
auto sleNew = std::make_shared<SLE>(
|
||||
keylet::check(a1.id(), SeqProxy::rawSequence((*sle)[sfSequence])));
|
||||
sleNew->setAccountID(sfAccount, a1.id());
|
||||
sleNew->setAccountID(sfDestination, a2.id());
|
||||
sleNew->setFieldAmount(sfSendMax, negativeMPTAmount(sfSendMax));
|
||||
@@ -5797,7 +5816,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
STTx{ttACCOUNT_SET, [](STObject&) {}},
|
||||
{tecINVARIANT_FAILED, tefINVARIANT_FAILED},
|
||||
[&checkID](Account const& a1, Account const& a2, Env& env) {
|
||||
checkID = keylet::check(a1.id(), env.seq(a1)).key;
|
||||
checkID = keylet::check(a1.id(), SeqProxy::rawSequence(env.seq(a1))).key;
|
||||
env(check::create(a1, a2, XRP(1)));
|
||||
return true;
|
||||
});
|
||||
@@ -5923,7 +5942,7 @@ class Invariants_test : public beast::unit_test::Suite
|
||||
|
||||
OpenView ov{*env.current()};
|
||||
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), ov.seq());
|
||||
auto const vaultKeylet = keylet::vault(a1.id(), SeqProxy::rawSequence(ov.seq()));
|
||||
auto sleVault = std::make_shared<SLE>(vaultKeylet);
|
||||
sleVault->makeFieldAbsent(sfAccount);
|
||||
ov.rawInsert(sleVault);
|
||||
|
||||
Reference in New Issue
Block a user