refactor: Move reserve checks from preclaim to doApply where relevant (#7607)

This commit is contained in:
Mayukha Vadari
2026-06-29 16:04:38 -04:00
committed by GitHub
parent 5029c08f12
commit 35e1a6ef25

View File

@@ -78,19 +78,16 @@ PaymentChannelCreate::preclaim(PreclaimContext const& ctx)
return terNO_ACCOUNT;
// Check reserve and funds availability
if (!ctx.view.rules().enabled(featureSponsor))
{
auto const balance = (*sle)[sfBalance];
auto const sponsorSle = getTxReserveSponsor(ctx.view, ctx.tx);
if (!sponsorSle)
return sponsorSle.error(); // LCOV_EXCL_LINE
if (auto const ret =
checkInsufficientReserve(ctx.view, ctx.tx, sle, balance, *sponsorSle, 1, 0, ctx.j);
!isTesSuccess(ret))
return ret;
auto const fees = ctx.view.fees();
auto const reserve = fees.reserve + fees.increment * ((*sle)[sfOwnerCount] + 1);
if (auto const ret = checkInsufficientReserve(
ctx.view, ctx.tx, sle, balance - ctx.tx[sfAmount], *sponsorSle, 1, 0, ctx.j);
!isTesSuccess(ret))
if (balance < reserve)
return tecINSUFFICIENT_RESERVE;
if (balance < reserve + ctx.tx[sfAmount])
return tecUNFUNDED;
}
@@ -137,6 +134,28 @@ PaymentChannelCreate::doApply()
return tecEXPIRED;
}
if (ctx_.view().rules().enabled(featureSponsor))
{
auto const sponsorSle = getTxReserveSponsor(ctx_.view(), ctx_.tx);
if (!sponsorSle)
return sponsorSle.error();
if (auto const ret = checkInsufficientReserve(
ctx_.view(), ctx_.tx, sle, STAmount{preFeeBalance_}, *sponsorSle, 1, 0, j_);
!isTesSuccess(ret))
return ret;
if (auto const ret = checkInsufficientReserve(
ctx_.view(),
ctx_.tx,
sle,
STAmount{preFeeBalance_ - ctx_.tx[sfAmount].xrp()},
{},
1,
0,
j_);
!isTesSuccess(ret))
return tecUNFUNDED;
}
auto const dst = ctx_.tx[sfDestination];
// Create PayChan in ledger.