mirror of
https://github.com/XRPLF/rippled.git
synced 2026-08-22 06:40:53 +00:00
refactor: Retire DisallowIncomingV1 fix (#7364)
This commit is contained in:
@@ -60,7 +60,6 @@ XRPL_FEATURE(PriceOracle, Supported::Yes, VoteBehavior::DefaultNo
|
||||
XRPL_FIX (AMMOverflowOffer, Supported::Yes, VoteBehavior::DefaultYes)
|
||||
XRPL_FIX (FillOrKill, Supported::Yes, VoteBehavior::DefaultNo)
|
||||
XRPL_FEATURE(DID, Supported::Yes, VoteBehavior::DefaultNo)
|
||||
XRPL_FIX (DisallowIncomingV1, Supported::Yes, VoteBehavior::DefaultNo)
|
||||
XRPL_FEATURE(XChainBridge, Supported::Yes, VoteBehavior::DefaultNo)
|
||||
XRPL_FEATURE(AMM, Supported::Yes, VoteBehavior::DefaultNo)
|
||||
XRPL_FEATURE(XRPFees, Supported::Yes, VoteBehavior::DefaultNo)
|
||||
@@ -100,6 +99,7 @@ XRPL_RETIRE_FIX(1623)
|
||||
XRPL_RETIRE_FIX(1781)
|
||||
XRPL_RETIRE_FIX(AmendmentMajorityCalc)
|
||||
XRPL_RETIRE_FIX(CheckThreading)
|
||||
XRPL_RETIRE_FIX(DisallowIncomingV1)
|
||||
XRPL_RETIRE_FIX(InnerObjTemplate)
|
||||
XRPL_RETIRE_FIX(MasterKeyAsRegularKey)
|
||||
XRPL_RETIRE_FIX(NonFungibleTokensV1_2)
|
||||
|
||||
@@ -184,22 +184,10 @@ TrustSet::preclaim(PreclaimContext const& ctx)
|
||||
|
||||
// If the destination has opted to disallow incoming trustlines
|
||||
// then honour that flag
|
||||
if (sleDst->isFlag(lsfDisallowIncomingTrustline))
|
||||
if (sleDst && sleDst->isFlag(lsfDisallowIncomingTrustline) &&
|
||||
!ctx.view.exists(keylet::trustLine(id, uDstAccountID, currency)))
|
||||
{
|
||||
// The original implementation of featureDisallowIncoming was
|
||||
// too restrictive. If
|
||||
// o fixDisallowIncomingV1 is enabled and
|
||||
// o The trust line already exists
|
||||
// Then allow the TrustSet.
|
||||
if (ctx.view.rules().enabled(fixDisallowIncomingV1) &&
|
||||
ctx.view.exists(keylet::trustLine(id, uDstAccountID, currency)))
|
||||
{
|
||||
// pass
|
||||
}
|
||||
else
|
||||
{
|
||||
return tecNO_PERMISSION;
|
||||
}
|
||||
return tecNO_PERMISSION;
|
||||
}
|
||||
|
||||
// In general, trust lines to pseudo accounts are not permitted, unless
|
||||
|
||||
@@ -474,6 +474,38 @@ public:
|
||||
checkQuality(!createQuality);
|
||||
}
|
||||
|
||||
void
|
||||
testDisallowIncomingWithRequireAuth()
|
||||
{
|
||||
testcase("Create trustline with disallow incoming requiring auth");
|
||||
|
||||
using namespace test::jtx;
|
||||
|
||||
Env env{*this};
|
||||
auto const dist = Account("dist");
|
||||
auto const gw = Account("gw");
|
||||
auto const usd = gw["USD"];
|
||||
auto const distUSD = dist["USD"];
|
||||
|
||||
env.fund(XRP(1000), gw, dist);
|
||||
env.close();
|
||||
|
||||
env(fset(gw, asfRequireAuth));
|
||||
env.close();
|
||||
|
||||
env(fset(dist, asfDisallowIncomingTrustline));
|
||||
env.close();
|
||||
|
||||
env(trust(dist, usd(10000)));
|
||||
env.close();
|
||||
|
||||
env(trust(gw, distUSD(10000)), Txflags(tfSetfAuth), Ter(tesSUCCESS));
|
||||
env.close();
|
||||
|
||||
env(pay(gw, dist, usd(1000)), Ter(tesSUCCESS));
|
||||
env.close();
|
||||
}
|
||||
|
||||
void
|
||||
testDisallowIncoming(FeatureBitset features)
|
||||
{
|
||||
@@ -481,42 +513,6 @@ public:
|
||||
|
||||
using namespace test::jtx;
|
||||
|
||||
// fixDisallowIncomingV1
|
||||
{
|
||||
for (bool const withFix : {true, false})
|
||||
{
|
||||
auto const amend = withFix ? features : features - fixDisallowIncomingV1;
|
||||
|
||||
Env env{*this, amend};
|
||||
auto const dist = Account("dist");
|
||||
auto const gw = Account("gw");
|
||||
auto const usd = gw["USD"];
|
||||
auto const distUSD = dist["USD"];
|
||||
|
||||
env.fund(XRP(1000), gw, dist);
|
||||
env.close();
|
||||
|
||||
env(fset(gw, asfRequireAuth));
|
||||
env.close();
|
||||
|
||||
env(fset(dist, asfDisallowIncomingTrustline));
|
||||
env.close();
|
||||
|
||||
env(trust(dist, usd(10000)));
|
||||
env.close();
|
||||
|
||||
// withFix: can set trustline
|
||||
// withOutFix: cannot set trustline
|
||||
auto const trustResult = withFix ? Ter(tesSUCCESS) : Ter(tecNO_PERMISSION);
|
||||
env(trust(gw, distUSD(10000)), Txflags(tfSetfAuth), trustResult);
|
||||
env.close();
|
||||
|
||||
auto const txResult = withFix ? Ter(tesSUCCESS) : Ter(tecPATH_DRY);
|
||||
env(pay(gw, dist, usd(1000)), txResult);
|
||||
env.close();
|
||||
}
|
||||
}
|
||||
|
||||
Env env{*this, features};
|
||||
|
||||
auto const gw = Account{"gateway"};
|
||||
@@ -601,6 +597,7 @@ public:
|
||||
testModifyQualityOfTrustline(features, false, true);
|
||||
testModifyQualityOfTrustline(features, true, false);
|
||||
testModifyQualityOfTrustline(features, true, true);
|
||||
testDisallowIncomingWithRequireAuth();
|
||||
testDisallowIncoming(features);
|
||||
testTrustLineResetWithAuthFlag();
|
||||
testTrustLineDelete();
|
||||
|
||||
Reference in New Issue
Block a user