Compare commits

...

27 Commits

Author SHA1 Message Date
Ed Hennis
3d41fabf48 Merge branch 'ximinez/lending-XLS-66-ongoing' into ximinez/lending-shortages 2025-12-05 21:29:49 -05:00
Ed Hennis
5aab5de8cd Merge branch 'ximinez/lending-XLS-66-ongoing' into ximinez/lending-shortages 2025-12-05 21:13:55 -05:00
Ed Hennis
89d17442e2 Merge branch 'ximinez/lending-XLS-66-ongoing' into ximinez/lending-shortages 2025-12-03 15:34:17 -05:00
Ed Hennis
bb5585e34b Merge branch 'ximinez/lending-XLS-66-2' into ximinez/lending-shortages 2025-12-02 12:33:19 -05:00
Ed Hennis
8e4be94f4a Merge remote-tracking branch 'XRPLF/ximinez/develop-nolending' into ximinez/lending-XLS-66-2
* XRPLF/ximinez/develop-nolending:
  Revert "Implement Lending Protocol (unsupported) (5270)"
  Implement Lending Protocol (unsupported) (5270)
2025-12-02 12:26:11 -05:00
Ed Hennis
1f3ded7116 Test updates - show balances in runLoan() 2025-12-02 10:50:57 -05:00
Ed Hennis
aa1234199a Review feedback from @dangell7: early return & coverage
- Exclude LogicError lines in ApplyView.cpp (specifically directory
  operations) from code coverage.
- Replace the ability to set the next page on a new directory page with
  an assert, because nothing uses it right now.
- Early return with success for batch inner transactions in preflight2.
2025-12-02 10:48:22 -05:00
Ed Hennis
abff92d52c Merge branch 'ximinez/lending-XLS-66-2' into ximinez/lending-shortages 2025-12-01 16:50:45 -05:00
Ed Hennis
da9a483b79 Merge branch 'ximinez/develop-nolending' into ximinez/lending-XLS-66-2 2025-12-01 16:49:54 -05:00
Vito Tumas
f447827474 Fix overpayment asserts (#6084) 2025-12-01 14:59:12 -05:00
Ed Hennis
b9ca539c49 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-12-01 14:41:36 -05:00
Ed Hennis
19c72b30e4 Merge branch 'develop' into ximinez/lending-XLS-66 2025-12-01 14:40:31 -05:00
Ed Hennis
07497322de Merge branch 'ximinez/develop-nolending' into ximinez/lending-XLS-66-2 2025-12-01 14:40:27 -05:00
Ed Hennis
3b1bc3d497 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-28 15:53:14 -05:00
Ed Hennis
c58f5abcc9 Merge remote-tracking branch 'XRPLF/ximinez/lending-XLS-66' into ximinez/lending-shortages
* XRPLF/ximinez/lending-XLS-66:
  ci: Trigger clio pipeline on PRs targeting release branches (6080)
  Review feedback from @shawnxie999: MPT Clawback
  Move the ValidPseudoAccounts class back to its original location
  Fix formatting again
  refactor: Retire Flow and FlowSortStrands amendments (6054)
  Add additional documentation to Lending Protocol (6037)
2025-11-26 00:30:06 -05:00
Ed Hennis
4760885955 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-24 21:49:54 -05:00
Ed Hennis
3249461379 Merge remote-tracking branch 'XRPLF/ximinez/lending-XLS-66' into ximinez/lending-shortages
* XRPLF/ximinez/lending-XLS-66: (48 commits)
  Fix formatting
  Review feedback from @gregtatcam: typo
  Review feedback from @Tapanito, @gregtatcam, and @shawnxie999
  Update src/xrpld/app/tx/detail/LoanBrokerCoverClawback.cpp
  Fix formatting
  Add deep freeze check to LoanBrokerDelete (6053)
  Fix build error with LoanBroker invariant
  Address a couple of feedback items from @Tapanito and @shawnxie999:
  Review feedback from @shawnxie999: removeEmptyHolding
  Review feedback from @shawnxie999: broker owner count
  Update src/xrpld/app/tx/detail/LoanBrokerCoverClawback.cpp
  Update src/xrpld/app/tx/detail/LoanBrokerCoverDeposit.cpp
  Update src/xrpld/app/tx/detail/LoanBrokerSet.cpp
  Add a LoanBroker invariant to compare CoverAvailable to balance
  refactor: Retire RequireFullyCanonicalSig amendment (6035)
  refactor: Retire DeletableAccounts amendment (6056)
  refactor: Retire CryptoConditionsSuite amendment (6036)
  Review feedback from @gregtatcam: variable name
  Review feedback from @gregtatcam: readability
  From discussion with @gregtatcam: Revert "Payment"
  ...
2025-11-24 21:47:45 -05:00
Ed Hennis
11479cdf68 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-21 14:38:54 -05:00
Ed Hennis
27af46b111 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-18 22:51:48 -05:00
Ed Hennis
5e860ec749 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-15 03:13:07 -05:00
Ed Hennis
4719e05d89 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-13 14:46:25 -05:00
Ed Hennis
c8394eb52f Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-13 12:21:27 -05:00
Ed Hennis
5a3df22cea Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-13 01:53:46 -05:00
Ed Hennis
b44859ff15 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-12 20:12:43 -05:00
Ed Hennis
fe8d931992 Merge branch 'ximinez/lending-XLS-66' into ximinez/lending-shortages 2025-11-12 14:17:31 -05:00
Ed Hennis
0008e2d1db Revert "Partially revert aed8e2b166 Fill in payment computation shortages (#5941)"
This reverts commit 95fdbe520f.
2025-11-10 19:54:56 -05:00
Ed Hennis
060b6d3231 Revert "Remove the shortage code completely"
This reverts commit 165478b929.
2025-11-10 19:54:56 -05:00
3 changed files with 48 additions and 7 deletions

View File

@@ -2738,8 +2738,12 @@ protected:
broker.params.managementFeeRate);
BEAST_EXPECT(
paymentComponents.trackedValueDelta <=
roundedPeriodicPayment);
paymentComponents.trackedValueDelta ==
roundedPeriodicPayment ||
(paymentComponents.specialCase ==
detail::PaymentSpecialCase::final &&
paymentComponents.trackedValueDelta <
roundedPeriodicPayment));
ripple::LoanState const nextTrueState = computeRawLoanState(
state.periodicPayment,

View File

@@ -187,9 +187,9 @@ class Feature_test : public beast::unit_test::suite
BEAST_EXPECTS(jrr[jss::status] == jss::success, "status");
jrr.removeMember(jss::status);
BEAST_EXPECT(jrr.size() == 1);
BEAST_EXPECT(
jrr.isMember("12523DF04B553A0B1AD74F42DDB741DE8DC06A03FC089A0EF197E"
"2A87F1D8107"));
BEAST_EXPECT(jrr.isMember(
"740352F2412A9909880C23A559FCECEDA3BE2126FED62FC7660D6"
"28A06927F11"));
auto feature = *(jrr.begin());
BEAST_EXPECTS(feature[jss::name] == "fixAMMOverflowOffer", "name");

View File

@@ -1075,6 +1075,23 @@ computePaymentComponents(
"ripple::detail::computePaymentComponents",
"excess non-negative");
};
auto giveTo =
[](Number& component, Number& shortage, Number const& maximum) {
if (shortage > beast::zero)
{
// Put as much of the shortage as we can into the provided part
// and the total
auto part = std::min(maximum - component, shortage);
component += part;
shortage -= part;
}
// If the shortage goes negative, we put too much, which should be
// impossible
XRPL_ASSERT_PARTS(
shortage >= beast::zero,
"ripple::detail::computePaymentComponents",
"excess non-negative");
};
// Helper to reduce deltas when they collectively exceed a limit.
// Order matters: we prefer to reduce interest first (most flexible),
// then management fee, then principal (least flexible).
@@ -1084,6 +1101,19 @@ computePaymentComponents(
takeFrom(deltas.managementFee, excess);
takeFrom(deltas.principal, excess);
};
// Helper to increase deltas when they collectively do not reach an
// expected value.
// Order matters: we prefer to increase interest first (most flexible),
// then management fee, then principal (least flexible).
auto addressShortage = [&giveTo](
LoanDeltas& deltas,
Number& shortage,
LoanState const& current) {
giveTo(deltas.interestDueDelta, shortage, current.interestDue);
giveTo(
deltas.managementFeeDueDelta, shortage, current.managementFeeDue);
giveTo(deltas.principalDelta, shortage, current.principalOutstanding);
};
// Check if deltas exceed the total outstanding value. This should never
// happen due to earlier caps, but handle it defensively.
@@ -1115,12 +1145,19 @@ computePaymentComponents(
addressExcess(deltas, excess);
shortage = -excess;
}
else if (shortage > beast::zero && totalOverpayment < beast::zero)
{
// If there's a shortage, and there's room in the loan itself, we can
// top up the parts to make the payment correct.
shortage = std::min(-totalOverpayment, shortage);
addressShortage(deltas, shortage, currentLedgerState);
}
// At this point, shortage >= 0 means we're paying less than the full
// periodic payment (due to rounding or component caps).
// shortage < 0 would mean we're trying to pay more than allowed (bug).
// shortage < 0 means mean we're trying to pay more than allowed (bug).
XRPL_ASSERT_PARTS(
shortage >= beast::zero,
shortage == beast::zero,
"ripple::detail::computePaymentComponents",
"no shortage or excess");