mirror of
https://github.com/XRPLF/rippled.git
synced 2026-06-04 01:06:48 +00:00
fix M2
This commit is contained in:
@@ -210,9 +210,6 @@ SponsorshipSet::doApply()
|
||||
|
||||
auto reserveSponsorAccSle = getTxReserveSponsor(view(), ctx_.tx);
|
||||
|
||||
if (feeAmount && (*feeAmount).xrp() > (*sponsorAccSle)[sfBalance])
|
||||
return tecUNFUNDED;
|
||||
|
||||
if (!sponsorObjSle)
|
||||
{
|
||||
// Create
|
||||
@@ -225,6 +222,9 @@ SponsorshipSet::doApply()
|
||||
|
||||
(*newSle)[sfOwner] = sponsorAccountID;
|
||||
(*newSle)[sfSponsee] = sponseeAccountID;
|
||||
if (feeAmount && (*feeAmount).xrp() > (*sponsorAccSle)[sfBalance])
|
||||
return tecUNFUNDED;
|
||||
|
||||
if (feeAmount && *feeAmount > XRPAmount(0))
|
||||
{
|
||||
(*sponsorAccSle)[sfBalance] -= *feeAmount;
|
||||
@@ -267,6 +267,10 @@ SponsorshipSet::doApply()
|
||||
auto const currentFeeAmount = (*sponsorObjSle)[~sfFeeAmount].value_or(XRPAmount(0));
|
||||
auto feeAmountDelta = XRPAmount(*feeAmount - currentFeeAmount);
|
||||
|
||||
if (feeAmountDelta > beast::zero &&
|
||||
feeAmountDelta > (*sponsorAccSle)[sfBalance])
|
||||
return tecUNFUNDED;
|
||||
|
||||
// transfer feeAmount to ledger entry
|
||||
if (feeAmountDelta != beast::zero)
|
||||
{
|
||||
|
||||
@@ -214,6 +214,35 @@ public:
|
||||
fee(XRP(1)),
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
|
||||
// delta-based balance check
|
||||
// After create: sponsor balance ~ 0, feeAmount = XRP(1000)
|
||||
|
||||
// Decreasing feeAmount should succeed (refund, negative delta)
|
||||
adjustAccountXRPBalance(env, sponsor, XRP(500));
|
||||
env(sponsor::set_fee(sponsor, 0, XRP(800)),
|
||||
sponsor::sponseeAcc(alice),
|
||||
fee(XRP(1)),
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
// balance was 500, delta = 800-1000 = -200 (refund), balance = 500+200-1 = 699
|
||||
|
||||
// Increasing feeAmount within delta budget should succeed
|
||||
adjustAccountXRPBalance(env, sponsor, XRP(500));
|
||||
env(sponsor::set_fee(sponsor, 0, XRP(850)),
|
||||
sponsor::sponseeAcc(alice),
|
||||
fee(XRP(1)),
|
||||
ter(tesSUCCESS));
|
||||
env.close();
|
||||
// balance was 500, delta = 850-800 = 50, balance = 500-50-1 = 449
|
||||
|
||||
// Increasing feeAmount where delta exceeds balance should fail
|
||||
adjustAccountXRPBalance(env, sponsor, XRP(310));
|
||||
env(sponsor::set_fee(sponsor, 0, XRP(1200)),
|
||||
sponsor::sponseeAcc(alice),
|
||||
fee(XRP(1)),
|
||||
ter(tecUNFUNDED));
|
||||
env.close();
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user