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:
Mayukha Vadari
2026-08-07 17:29:11 -04:00
committed by GitHub
parent 798e889ec4
commit 0fb92c3194
72 changed files with 1026 additions and 679 deletions

View File

@@ -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);