fix SponsorshipTransfer

This commit is contained in:
tequ
2025-09-20 10:34:46 +09:00
parent cc5e063438
commit 5dc63b64eb
2 changed files with 14 additions and 5 deletions

View File

@@ -374,6 +374,14 @@ public:
env(pay(alice, sponsor1, drops(1)));
env.close();
// Invalid Owner
env(sponsor::transfer(bob, checkId),
sponsor::as(sponsor1, tfSponsorReserve),
sponsor::sig(sponsor1),
ter(tecNO_PERMISSION));
env.close();
// Valid Owner
env(sponsor::transfer(alice, checkId),
sponsor::as(sponsor1, tfSponsorReserve),
sponsor::sig(sponsor1));
@@ -1530,7 +1538,7 @@ public:
// transfer sponsor
auto const mptTokenKeylet = keylet::mptoken(mptid, bob);
env(sponsor::transfer(alice, mptTokenKeylet.key),
env(sponsor::transfer(bob, mptTokenKeylet.key),
sponsor::as(sponsor2, tfSponsorReserve),
sponsor::sig(sponsor2));
env.close();

View File

@@ -144,9 +144,11 @@ SponsorshipTransfer::preclaim(PreclaimContext const& ctx)
if (!sle)
return tecNO_ENTRY;
auto const ownerCountDelta = getLedgerEntryOwnerCount(sle);
auto const owner =
getLedgerEntryOwner(ctx.view, sle, ctx.tx[sfAccount]);
if (!owner)
if (!owner || owner != ctx.tx[sfAccount])
return tecNO_PERMISSION;
if (newSponsor)
@@ -166,14 +168,13 @@ SponsorshipTransfer::preclaim(PreclaimContext const& ctx)
return tecNO_PERMISSION;
}
// check account have sufficient balance
// check new sponsor have sufficient balance
if (auto const ter = checkInsufficientReserve(
ctx.view,
accSle,
accSle->getFieldAmount(sfBalance),
newSponsor,
// TODO: address variable ownerCount like PriceOracle
1);
ownerCountDelta);
!isTesSuccess(ter))
return ter;
}