This commit is contained in:
tequ
2026-02-18 15:55:10 +09:00
parent fe5fab00ed
commit 2fd8e1be3c
2 changed files with 51 additions and 2 deletions

View File

@@ -346,7 +346,7 @@ SponsorshipTransfer::doApply()
else
{
// dissolve object sponsor
auto const oldSponsor = objSle->getAccountID(sfSponsor);
auto const oldSponsor = objSle->getAccountID(sponsorField);
auto const oldSponsorSle = view().peek(keylet::account(oldSponsor));
if (!oldSponsorSle)
return tefINTERNAL; // LCOV_EXCL_LINE
@@ -367,7 +367,7 @@ SponsorshipTransfer::doApply()
return ter;
// remove sponsor from object
objSle->makeFieldAbsent(sfSponsor);
objSle->makeFieldAbsent(sponsorField);
view().update(objSle);
}
}

View File

@@ -873,6 +873,55 @@ public:
BEAST_EXPECT(sponsor2Sle->getFieldU32(sfReserveCount) == 100); // paybacked
}
{
// sponsor trustline
Account const alice("alice");
Account const bob("bob");
Account const sponsor("sponsor");
auto const& highAcc = alice > bob ? alice : bob;
auto const& lowAcc = alice > bob ? bob : alice;
for (bool isIssuerHigh : {false, true})
{
Env env{*this, testable_amendments()};
env.fund(XRP(10000), alice, bob, sponsor);
env.close();
auto const& issuer = isIssuerHigh ? highAcc : lowAcc;
auto const& user = isIssuerHigh ? lowAcc : highAcc;
auto const USD = issuer["USD"];
auto const currency = USD.currency;
env(trust(user, issuer["USD"](100)));
env.close();
auto const trustId = keylet::line(user, issuer, currency);
BEAST_EXPECT(env.le(trustId));
// transfer sponsor
env(sponsor::transfer(user, trustId.key),
sponsor::as(sponsor, tfSponsorReserve),
sig(sfSponsorSignature, sponsor));
env.close();
BEAST_EXPECT(env.le(trustId));
BEAST_EXPECT(
env.le(trustId)->getAccountID(isIssuerHigh ? sfLowSponsor : sfHighSponsor) == sponsor.id());
BEAST_EXPECT(!env.le(trustId)->isFieldPresent(isIssuerHigh ? sfHighSponsor : sfLowSponsor));
// dissolve sponsor
env(sponsor::transfer(user, trustId.key));
env.close();
BEAST_EXPECT(env.le(trustId));
BEAST_EXPECT(!env.le(trustId)->isFieldPresent(isIssuerHigh ? sfLowSponsor : sfHighSponsor));
BEAST_EXPECT(!env.le(trustId)->isFieldPresent(isIssuerHigh ? sfHighSponsor : sfLowSponsor));
}
}
{
// invalid transfer
Env env{*this, testable_amendments()};