This commit is contained in:
tequ
2026-03-19 14:50:09 +09:00
parent f8a8c2301c
commit 9a6432dd66
2 changed files with 19 additions and 10 deletions

View File

@@ -215,11 +215,6 @@ SponsorshipSet::doApply()
// Create
auto newSle = std::make_shared<SLE>(sponsorKeylet);
if (auto const ret = checkInsufficientReserve(
ctx_.view(), ctx_.tx, sponsorAccSle, preFeeBalance_, reserveSponsorAccSle, 1);
!isTesSuccess(ret))
return tecUNFUNDED;
(*newSle)[sfOwner] = sponsorAccountID;
(*newSle)[sfSponsee] = sponseeAccountID;
if (feeAmount && (*feeAmount).xrp() > (*sponsorAccSle)[sfBalance])
@@ -230,6 +225,17 @@ SponsorshipSet::doApply()
(*sponsorAccSle)[sfBalance] -= *feeAmount;
(*newSle)[sfFeeAmount] = *feeAmount;
}
if (auto const ret = checkInsufficientReserve(
ctx_.view(),
ctx_.tx,
sponsorAccSle,
STAmount{(*sponsorAccSle)[sfBalance]}.xrp(),
reserveSponsorAccSle,
1);
!isTesSuccess(ret))
return tecUNFUNDED;
if (maxFee && *maxFee > XRPAmount(0))
(*newSle)[sfMaxFee] = *maxFee;
if (reserveCount && *reserveCount > 0)
@@ -267,8 +273,7 @@ SponsorshipSet::doApply()
auto const currentFeeAmount = (*sponsorObjSle)[~sfFeeAmount].value_or(XRPAmount(0));
auto feeAmountDelta = XRPAmount(*feeAmount - currentFeeAmount);
if (feeAmountDelta > beast::zero &&
feeAmountDelta > (*sponsorAccSle)[sfBalance])
if (feeAmountDelta > beast::zero && feeAmountDelta > (*sponsorAccSle)[sfBalance])
return tecUNFUNDED;
// transfer feeAmount to ledger entry

View File

@@ -187,8 +187,11 @@ public:
env.close();
// insufficent reserve to create sponsorship
adjustAccountXRPBalance(env, sponsor, reserve(env, 1) - drops(1));
env(sponsor::set(sponsor, 0, 100, XRP(100)), sponsor::sponseeAcc(alice), ter(tecUNFUNDED));
adjustAccountXRPBalance(env, sponsor, XRP(100) + XRP(1) + reserve(env, 1) - drops(1));
env(sponsor::set(sponsor, 0, 100, XRP(100)),
sponsor::sponseeAcc(alice),
fee(XRP(1)),
ter(tecUNFUNDED));
env.close();
// FeeAmount + Fee > Balance
@@ -208,7 +211,8 @@ public:
env.close();
// create sponsor to use above tests
adjustAccountXRPBalance(env, sponsor, XRP(1001));
// need feeAmount(1000) + fee(1) + reserve(~250) = ~1251
adjustAccountXRPBalance(env, sponsor, XRP(1000) + XRP(1) + reserve(env, 1));
env(sponsor::set(sponsor, 0, 100, XRP(1000)),
sponsor::sponseeAcc(alice),
fee(XRP(1)),