From 92e5e0802572278144ee83cfc215590259ba2f74 Mon Sep 17 00:00:00 2001 From: Richard Holland Date: Sun, 24 Sep 2023 10:16:39 +0000 Subject: [PATCH] allow deletable accounts but make importsequence on accountroot a blocker --- src/ripple/app/tx/impl/DeleteAccount.cpp | 7 ++++--- src/ripple/app/tx/impl/GenesisMint.cpp | 2 -- src/ripple/protocol/impl/Feature.cpp | 2 +- src/ripple/protocol/impl/Rules.cpp | 4 ---- src/test/app/AccountDelete_test.cpp | 2 +- src/test/app/Offer_test.cpp | 2 +- 6 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/ripple/app/tx/impl/DeleteAccount.cpp b/src/ripple/app/tx/impl/DeleteAccount.cpp index 2c57cd8a1..6447c510b 100644 --- a/src/ripple/app/tx/impl/DeleteAccount.cpp +++ b/src/ripple/app/tx/impl/DeleteAccount.cpp @@ -36,9 +36,6 @@ namespace ripple { NotTEC DeleteAccount::preflight(PreflightContext const& ctx) { - if (ctx.rules.enabled(featureXahauGenesis)) - return temDISABLED; - if (!ctx.rules.enabled(featureDeletableAccounts)) return temDISABLED; @@ -204,6 +201,10 @@ DeleteAccount::preclaim(PreclaimContext const& ctx) if (!sleDst) return tecNO_DST; + // accounts created via Import are blocked from deletion + if (sleDst->isFieldPresent(sfImportSequence)) + return tecHAS_OBLIGATIONS; + if ((*sleDst)[sfFlags] & lsfRequireDestTag && !ctx.tx[~sfDestinationTag]) return tecDST_TAG_NEEDED; diff --git a/src/ripple/app/tx/impl/GenesisMint.cpp b/src/ripple/app/tx/impl/GenesisMint.cpp index c187b9395..3a2e61c3d 100644 --- a/src/ripple/app/tx/impl/GenesisMint.cpp +++ b/src/ripple/app/tx/impl/GenesisMint.cpp @@ -180,8 +180,6 @@ GenesisMint::doApply() // Create the account. std::uint32_t const seqno{ view().rules().enabled(featureDeletableAccounts) - // RH NOTE: this condition is impossible, but left for completeness and consistency with other - // code, and defensively against future changes. ? view().seq() : 1}; diff --git a/src/ripple/protocol/impl/Feature.cpp b/src/ripple/protocol/impl/Feature.cpp index 13bddc0e9..ef3d3ce0e 100644 --- a/src/ripple/protocol/impl/Feature.cpp +++ b/src/ripple/protocol/impl/Feature.cpp @@ -429,7 +429,7 @@ REGISTER_FIX (fixTakerDryOfferRemoval, Supported::yes, VoteBehavior::De REGISTER_FIX (fixMasterKeyAsRegularKey, Supported::yes, VoteBehavior::DefaultYes); REGISTER_FIX (fixCheckThreading, Supported::yes, VoteBehavior::DefaultYes); REGISTER_FIX (fixPayChanRecipientOwnerDir, Supported::yes, VoteBehavior::DefaultYes); -REGISTER_FEATURE(DeletableAccounts, Supported::yes, VoteBehavior::DefaultYes); +REGISTER_FEATURE(DeletableAccounts, Supported::yes, VoteBehavior::DefaultNo); // fixQualityUpperBound should be activated before FlowCross REGISTER_FIX (fixQualityUpperBound, Supported::yes, VoteBehavior::DefaultYes); REGISTER_FEATURE(RequireFullyCanonicalSig, Supported::yes, VoteBehavior::DefaultYes); diff --git a/src/ripple/protocol/impl/Rules.cpp b/src/ripple/protocol/impl/Rules.cpp index 4db7bf572..c8f4720bd 100644 --- a/src/ripple/protocol/impl/Rules.cpp +++ b/src/ripple/protocol/impl/Rules.cpp @@ -54,10 +54,6 @@ public: bool enabled(uint256 const& feature) const { - if (feature == featureDeletableAccounts && - (presets_.count(featureXahauGenesis) > 0 || set_.count(featureXahauGenesis))) - return false; - if (presets_.count(feature) > 0) return true; return set_.count(feature) > 0; diff --git a/src/test/app/AccountDelete_test.cpp b/src/test/app/AccountDelete_test.cpp index 01ac866f2..5b40f37c5 100644 --- a/src/test/app/AccountDelete_test.cpp +++ b/src/test/app/AccountDelete_test.cpp @@ -942,7 +942,7 @@ public: using namespace test::jtx; auto const sa = supported_amendments(); - testWithFeatures(sa - featureXahauGenesis); + testWithFeatures(sa); } }; diff --git a/src/test/app/Offer_test.cpp b/src/test/app/Offer_test.cpp index 0d1a43264..d743d7c50 100644 --- a/src/test/app/Offer_test.cpp +++ b/src/test/app/Offer_test.cpp @@ -5206,7 +5206,7 @@ class Offer_manual_test : public Offer_test run() override { using namespace jtx; - FeatureBitset const all{supported_amendments()}; + FeatureBitset const all{supported_amendments() - featureXahauGenesis}; FeatureBitset const flowCross{featureFlowCross}; FeatureBitset const f1513{fix1513}; FeatureBitset const immediateOfferKilled{featureImmediateOfferKilled};