mirror of
https://github.com/XRPLF/rippled.git
synced 2026-06-04 09:16:47 +00:00
audit 12
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()};
|
||||
|
||||
Reference in New Issue
Block a user