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

@@ -53,6 +53,7 @@
#include <xrpl/protocol/STAmount.h>
#include <xrpl/protocol/STPathSet.h>
#include <xrpl/protocol/STTx.h>
#include <xrpl/protocol/SeqProxy.h>
#include <xrpl/protocol/Serializer.h>
#include <xrpl/protocol/TER.h>
#include <xrpl/protocol/TxFlags.h>
@@ -2385,7 +2386,7 @@ class MPToken_test : public beast::unit_test::Suite
env.submit(tx);
env.close();
auto const checkKeylet = keylet::check(alice.id(), checkSeq);
auto const checkKeylet = keylet::check(alice.id(), SeqProxy::rawSequence(checkSeq));
auto const sleCheck = env.le(checkKeylet);
BEAST_EXPECT((sleCheck != nullptr) == !bad.negative);
if (sleCheck && !bad.negative)
@@ -2413,7 +2414,7 @@ class MPToken_test : public beast::unit_test::Suite
env.submit(tx);
env.close();
auto const checkKeylet = keylet::check(alice.id(), checkSeq);
auto const checkKeylet = keylet::check(alice.id(), SeqProxy::rawSequence(checkSeq));
BEAST_EXPECT((env.le(checkKeylet) != nullptr) == !bad.negative);
if (!bad.negative)
{
@@ -2441,7 +2442,7 @@ class MPToken_test : public beast::unit_test::Suite
env.submit(tx);
env.close();
auto const checkKeylet = keylet::check(alice.id(), checkSeq);
auto const checkKeylet = keylet::check(alice.id(), SeqProxy::rawSequence(checkSeq));
BEAST_EXPECT((env.le(checkKeylet) != nullptr) == !bad.negative);
if (!bad.negative)
{
@@ -2472,7 +2473,7 @@ class MPToken_test : public beast::unit_test::Suite
env.submit(tx);
env.close();
auto const checkKeylet = keylet::check(alice.id(), checkSeq);
auto const checkKeylet = keylet::check(alice.id(), SeqProxy::rawSequence(checkSeq));
BEAST_EXPECT((env.le(checkKeylet) != nullptr) == !bad.negative);
if (!bad.negative)
{
@@ -2501,7 +2502,7 @@ class MPToken_test : public beast::unit_test::Suite
env.jt(
check::cash(
bob,
keylet::check(alice.id(), checkSeq).key,
keylet::check(alice.id(), SeqProxy::rawSequence(checkSeq)).key,
STAmount{issue, std::uint64_t{1}})),
sfAmount,
badCashAmount,
@@ -2510,7 +2511,8 @@ class MPToken_test : public beast::unit_test::Suite
tx.ter = bad.holderSourcePreFixTer;
env.submit(tx);
env.close();
BEAST_EXPECT(env.le(keylet::check(alice.id(), checkSeq)) != nullptr);
BEAST_EXPECT(
env.le(keylet::check(alice.id(), SeqProxy::rawSequence(checkSeq))) != nullptr);
BEAST_EXPECT(
(env.balance(alice, issue).value() == STAmount{MPTAmount{10'000}, issue}));
BEAST_EXPECT(
@@ -2534,7 +2536,7 @@ class MPToken_test : public beast::unit_test::Suite
env.jt(
check::cash(
bob,
keylet::check(alice.id(), checkSeq).key,
keylet::check(alice.id(), SeqProxy::rawSequence(checkSeq)).key,
STAmount{issue, std::uint64_t{1}})),
sfAmount,
badCashAmount,
@@ -2562,7 +2564,9 @@ class MPToken_test : public beast::unit_test::Suite
tx.ter = bad.negative ? TER{temBAD_AMOUNT} : TER{tecINSUFFICIENT_FUNDS};
env.submit(tx);
env.close();
BEAST_EXPECT(env.le(keylet::escrow(alice.id(), escrowSeq)) == nullptr);
BEAST_EXPECT(
env.le(keylet::escrow(alice.id(), SeqProxy::rawSequence(escrowSeq))) ==
nullptr);
}
{
Env env{*this, withFix};
@@ -2963,7 +2967,7 @@ class MPToken_test : public beast::unit_test::Suite
auto const issue = makeIssue(env);
auto const badAmount = badMPTAmount(issue, bad);
uint256 const fakeVaultId = keylet::vault(gw.id(), 1).key;
uint256 const fakeVaultId = keylet::vault(gw.id(), SeqProxy::rawSequence(1)).key;
auto tx = withNonCanonicalMPTAmount(
env.jt(
Vault::clawback(
@@ -6561,7 +6565,7 @@ class MPToken_test : public beast::unit_test::Suite
auto const mpt = mptTester["MPT"];
mptTester.authorize({.account = alice});
uint256 const checkId{keylet::check(gw, env.seq(gw)).key};
uint256 const checkId{keylet::check(gw, SeqProxy::rawSequence(env.seq(gw))).key};
env(check::create(gw, alice, mpt(100)), Ter(temDISABLED));
env.close();
@@ -6582,7 +6586,7 @@ class MPToken_test : public beast::unit_test::Suite
mptTester.authorize({.account = alice});
mptTester.pay(gw, alice, 50);
uint256 const checkId{keylet::check(alice, env.seq(alice)).key};
uint256 const checkId{keylet::check(alice, SeqProxy::rawSequence(env.seq(alice))).key};
// can create
env(check::create(alice, carol, mpt(100)));
@@ -6612,7 +6616,7 @@ class MPToken_test : public beast::unit_test::Suite
.flags = tfMPTCanTransfer | tfMPTCanTrade});
auto const mpt = mptTester["MPT"];
uint256 const checkId{keylet::check(gw, env.seq(gw)).key};
uint256 const checkId{keylet::check(gw, SeqProxy::rawSequence(env.seq(gw))).key};
// can create
env(check::create(gw, alice, mpt(200)));
@@ -6766,7 +6770,7 @@ class MPToken_test : public beast::unit_test::Suite
{.env = env, .issuer = gw, .holders = {alice, carol}, .flags = tfMPTCanTrade});
// src is issuer
uint256 checkId{keylet::check(gw, env.seq(gw)).key};
uint256 checkId{keylet::check(gw, SeqProxy::rawSequence(env.seq(gw))).key};
// can create
env(check::create(gw, alice, mpt(100)));
@@ -6780,7 +6784,7 @@ class MPToken_test : public beast::unit_test::Suite
BEAST_EXPECT(env.balance(gw, mpt) == mpt(-100));
// dst is issuer
checkId = keylet::check(alice, env.seq(alice)).key;
checkId = keylet::check(alice, SeqProxy::rawSequence(env.seq(alice))).key;
// can create
env(check::create(alice, gw, mpt(100)));
@@ -6794,13 +6798,13 @@ class MPToken_test : public beast::unit_test::Suite
BEAST_EXPECT(env.balance(gw, mpt) == mpt(0));
// neither src nor dst is issuer, can't create
checkId = keylet::check(alice, env.seq(alice)).key;
checkId = keylet::check(alice, SeqProxy::rawSequence(env.seq(alice))).key;
env(check::create(alice, carol, mpt(100)), Ter(tecNO_AUTH));
env.close();
// can create now
mpt.set({.account = gw, .flags = tfMPTSetCanTransfer});
checkId = keylet::check(alice, env.seq(alice)).key;
checkId = keylet::check(alice, SeqProxy::rawSequence(env.seq(alice))).key;
env(check::create(alice, carol, mpt(100)));
env.close();
env(pay(gw, alice, mpt(10)));
@@ -6824,7 +6828,7 @@ class MPToken_test : public beast::unit_test::Suite
.pay = 10,
.flags = tfMPTCanTransfer});
uint256 const checkId{keylet::check(alice, env.seq(alice)).key};
uint256 const checkId{keylet::check(alice, SeqProxy::rawSequence(env.seq(alice))).key};
// can create
env(check::create(alice, carol, mpt(100)));
@@ -6898,7 +6902,7 @@ class MPToken_test : public beast::unit_test::Suite
env.fund(XRP(1'000), alice, carol);
// src is issuer
uint256 const checkId{keylet::check(alice, env.seq(alice)).key};
uint256 const checkId{keylet::check(alice, SeqProxy::rawSequence(env.seq(alice))).key};
// can create
env(check::create(alice, carol, mpt(100)));
@@ -6926,7 +6930,7 @@ class MPToken_test : public beast::unit_test::Suite
auto const mpt = mptTester["MPT"];
mptTester.authorize({.account = alice});
uint256 const checkId{keylet::check(gw, env.seq(gw)).key};
uint256 const checkId{keylet::check(gw, SeqProxy::rawSequence(env.seq(gw))).key};
env(check::create(gw, alice, mpt(100)));
env.close();