refactor: Retire ImmediateOfferKilled amendment (#5973)

Amendments activated for more than 2 years can be retired. This change retires the ImmediateOfferKilled amendment.
This commit is contained in:
Jingchen
2025-11-03 17:26:12 +00:00
committed by GitHub
parent 12c4b5a632
commit 8ac8a47c99
3 changed files with 8 additions and 56 deletions

View File

@@ -82,7 +82,6 @@ XRPL_FIX (NonFungibleTokensV1_2, Supported::yes, VoteBehavior::DefaultNo
XRPL_FIX (UniversalNumber, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FEATURE(XRPFees, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FEATURE(DisallowIncoming, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FEATURE(ImmediateOfferKilled, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FIX (RemoveNFTokenAutoTrustLine, Supported::yes, VoteBehavior::DefaultYes)
XRPL_FIX (TrustLinesToSelf, Supported::yes, VoteBehavior::DefaultNo)
XRPL_FEATURE(NonFungibleTokensV1_1, Supported::yes, VoteBehavior::DefaultNo)
@@ -149,6 +148,7 @@ XRPL_RETIRE(Escrow)
XRPL_RETIRE(EnforceInvariants)
XRPL_RETIRE(FeeEscalation)
XRPL_RETIRE(FlowCross)
XRPL_RETIRE(ImmediateOfferKilled)
XRPL_RETIRE(MultiSign)
XRPL_RETIRE(PayChan)
XRPL_RETIRE(SortedDirectories)

View File

@@ -855,9 +855,7 @@ public:
// No cross:
{
TER const expectedCode = features[featureImmediateOfferKilled]
? static_cast<TER>(tecKILLED)
: static_cast<TER>(tesSUCCESS);
TER const expectedCode = tecKILLED;
env(offer(alice, XRP(1000), USD(1000)),
txflags(tfImmediateOrCancel),
ter(expectedCode));
@@ -5289,34 +5287,12 @@ public:
testFillOrKill(features);
}
void
run(std::uint32_t instance, bool last = false)
{
using namespace jtx;
static FeatureBitset const all{testable_amendments()};
static FeatureBitset const immediateOfferKilled{
featureImmediateOfferKilled};
FeatureBitset const fillOrKill{fixFillOrKill};
FeatureBitset const permDEX{featurePermissionedDEX};
static std::array<FeatureBitset, 5> const feats{
all - immediateOfferKilled - permDEX,
all - immediateOfferKilled - fillOrKill - permDEX,
all - fillOrKill - permDEX,
all - permDEX,
all};
if (BEAST_EXPECT(instance < feats.size()))
{
testAll(feats[instance]);
}
BEAST_EXPECT(!last || instance == feats.size() - 1);
}
FeatureBitset const allFeatures{jtx::testable_amendments()};
void
run() override
{
run(0);
testAll(allFeatures - featurePermissionedDEX);
testFalseAssert();
}
};
@@ -5326,25 +5302,7 @@ class OfferWOSmallQOffers_test : public OfferBaseUtil_test
void
run() override
{
OfferBaseUtil_test::run(1);
}
};
class OfferWOFillOrKill_test : public OfferBaseUtil_test
{
void
run() override
{
OfferBaseUtil_test::run(2);
}
};
class OfferWOPermDEX_test : public OfferBaseUtil_test
{
void
run() override
{
OfferBaseUtil_test::run(3);
testAll(allFeatures - fixFillOrKill - featurePermissionedDEX);
}
};
@@ -5353,7 +5311,7 @@ class OfferAllFeatures_test : public OfferBaseUtil_test
void
run() override
{
OfferBaseUtil_test::run(4, true);
testAll(allFeatures);
}
};
@@ -5364,12 +5322,9 @@ class Offer_manual_test : public OfferBaseUtil_test
{
using namespace jtx;
FeatureBitset const all{testable_amendments()};
FeatureBitset const immediateOfferKilled{featureImmediateOfferKilled};
FeatureBitset const fillOrKill{fixFillOrKill};
FeatureBitset const permDEX{featurePermissionedDEX};
testAll(all - immediateOfferKilled - permDEX);
testAll(all - immediateOfferKilled - fillOrKill - permDEX);
testAll(all - fillOrKill - permDEX);
testAll(all - permDEX);
testAll(all);
@@ -5378,8 +5333,6 @@ class Offer_manual_test : public OfferBaseUtil_test
BEAST_DEFINE_TESTSUITE_PRIO(OfferBaseUtil, app, ripple, 2);
BEAST_DEFINE_TESTSUITE_PRIO(OfferWOSmallQOffers, app, ripple, 2);
BEAST_DEFINE_TESTSUITE_PRIO(OfferWOFillOrKill, app, ripple, 2);
BEAST_DEFINE_TESTSUITE_PRIO(OfferWOPermDEX, app, ripple, 2);
BEAST_DEFINE_TESTSUITE_PRIO(OfferAllFeatures, app, ripple, 2);
BEAST_DEFINE_TESTSUITE_MANUAL_PRIO(Offer_manual, app, ripple, 20);

View File

@@ -789,9 +789,8 @@ CreateOffer::applyGuts(Sandbox& sb, Sandbox& sbCancel)
if (bImmediateOrCancel)
{
JLOG(j_.trace()) << "Immediate or cancel: offer canceled";
if (!crossed && sb.rules().enabled(featureImmediateOfferKilled))
// If the ImmediateOfferKilled amendment is enabled, any
// ImmediateOrCancel offer that transfers absolutely no funds
if (!crossed)
// Any ImmediateOrCancel offer that transfers absolutely no funds
// returns tecKILLED rather than tesSUCCESS. Motivation for the
// change is here: https://github.com/ripple/rippled/issues/4115
return {tecKILLED, false};