mirror of
https://github.com/XRPLF/rippled.git
synced 2026-07-28 01:20:32 +00:00
test: AccountDelete works with sponsored objects (#7740)
This commit is contained in:
@@ -396,9 +396,6 @@ AccountDelete::doApply()
|
||||
if (!isTesSuccess(ter))
|
||||
return ter;
|
||||
|
||||
if (src->isFieldPresent(sfSponsoredOwnerCount))
|
||||
return tefINTERNAL; // LCOV_EXCL_LINE
|
||||
|
||||
// Transfer any XRP remaining after the fee is paid to the destination:
|
||||
auto const remainingBalance = src->getFieldAmount(sfBalance).xrp();
|
||||
(*dst)[sfBalance] = (*dst)[sfBalance] + remainingBalance;
|
||||
@@ -410,11 +407,14 @@ AccountDelete::doApply()
|
||||
auto const sponsorID = src->getAccountID(sfSponsor);
|
||||
auto sponsorSle = view().peek(keylet::account(sponsorID));
|
||||
|
||||
if (!sponsorSle || !sponsorSle->isFieldPresent(sfSponsoringAccountCount))
|
||||
if (!sponsorSle)
|
||||
return tefINTERNAL; // LCOV_EXCL_LINE
|
||||
|
||||
auto const sponsoringAccountCount = sponsorSle->getFieldU32(sfSponsoringAccountCount);
|
||||
|
||||
XRPL_ASSERT(
|
||||
sponsoringAccountCount != 0,
|
||||
"xrpl::AccountDelete::doApply : sponsoring account count is present");
|
||||
if (sponsoringAccountCount == 0)
|
||||
{
|
||||
// sanity check
|
||||
|
||||
@@ -3897,12 +3897,6 @@ public:
|
||||
|
||||
auto const usd = gw["usd"];
|
||||
|
||||
// Create sponsorship allowing reserve sponsoring
|
||||
env(sponsor::set(sponsor, 0, 100, XRP(100)),
|
||||
sponsor::SponseeAcc(alice),
|
||||
Ter(tesSUCCESS));
|
||||
env.close();
|
||||
|
||||
// Create a trust line for alice
|
||||
env(trust(alice, usd(1000)));
|
||||
env.close();
|
||||
@@ -3962,6 +3956,37 @@ public:
|
||||
BEAST_EXPECT(
|
||||
sponsorSleAfter->getFieldU32(sfSponsoringAccountCount) == sponsoringAccountCount);
|
||||
}
|
||||
|
||||
{
|
||||
// Account with sponsored objects should be deletable
|
||||
Env env{*this, testableAmendments()};
|
||||
env.fund(XRP(1000000), alice, bob, sponsor);
|
||||
env.close();
|
||||
|
||||
// Create sponsored delegate (a non-deletion-blocker)
|
||||
env(deposit::auth(alice, bob),
|
||||
sponsor::As(sponsor, spfSponsorReserve),
|
||||
Sig(sfSponsorSignature, sponsor));
|
||||
|
||||
{
|
||||
auto const sponsorSle = env.le(keylet::account(sponsor));
|
||||
auto const aliceSle = env.le(keylet::account(alice));
|
||||
BEAST_EXPECT(sponsorSle->at(sfSponsoringOwnerCount) == 1);
|
||||
BEAST_EXPECT(aliceSle->at(sfOwnerCount) == 1);
|
||||
BEAST_EXPECT(aliceSle->at(sfSponsoredOwnerCount) == 1);
|
||||
}
|
||||
|
||||
incLgrSeqForAccDel(env, alice);
|
||||
|
||||
// AccountDelete should succeed
|
||||
{
|
||||
auto const requiredFee = drops(env.current()->fees().increment);
|
||||
env(acctdelete(alice, bob), Fee(requiredFee), Ter(tesSUCCESS));
|
||||
BEAST_EXPECT(!env.le(keylet::account(alice)));
|
||||
auto const sponsorSle = env.le(keylet::account(sponsor));
|
||||
BEAST_EXPECT(sponsorSle->at(sfSponsoringOwnerCount) == 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user