From f8c708f20c082ce1bf94b238b9b5a3952373a88b Mon Sep 17 00:00:00 2001 From: Ed Hennis Date: Thu, 27 Mar 2025 17:31:04 -0500 Subject: [PATCH] Finish LoanBrokerSet - Update changed field name. - Modify modifiable fields in an update. Note there are only two. - Add a node field to dirLink, defaulting sfOwnerNode, so other relationships can be updated. --- include/xrpl/protocol/detail/ledger_entries.macro | 2 +- src/xrpld/app/tx/detail/LoanBroker.cpp | 15 ++++++++++----- src/xrpld/ledger/View.h | 6 +++++- src/xrpld/ledger/detail/View.cpp | 8 ++++++-- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/include/xrpl/protocol/detail/ledger_entries.macro b/include/xrpl/protocol/detail/ledger_entries.macro index df380668ac..6c9cebcf67 100644 --- a/include/xrpl/protocol/detail/ledger_entries.macro +++ b/include/xrpl/protocol/detail/ledger_entries.macro @@ -536,7 +536,7 @@ LEDGER_ENTRY(ltLOAN, 0x0085, Loan, loan, ({ {sfPreviousPaymentDate, soeREQUIRED}, {sfNextPaymentDueDate, soeREQUIRED}, {sfPaymentRemaining, soeREQUIRED}, - {sfAssetAvailable, soeREQUIRED}, + {sfAssetsAvailable, soeREQUIRED}, {sfPrincipalOutstanding, soeREQUIRED}, })) diff --git a/src/xrpld/app/tx/detail/LoanBroker.cpp b/src/xrpld/app/tx/detail/LoanBroker.cpp index 34ac65f3fd..8161f1c225 100644 --- a/src/xrpld/app/tx/detail/LoanBroker.cpp +++ b/src/xrpld/app/tx/detail/LoanBroker.cpp @@ -142,9 +142,14 @@ LoanBrokerSet::doApply() if (auto const brokerID = tx[~sfLoanBrokerID]) { // Modify an existing LoanBroker - auto const sleBroker = view.read(keylet::loanbroker(*brokerID)); + auto broker = view.peek(keylet::loanbroker(*brokerID)); - assert(0); + if (auto const data = tx[~sfData]) + broker->at(sfData) = *data; + if (auto const debtMax = tx[~sfDebtMaximum]) + broker->at(sfDebtMaximum) = *debtMax; + + view.update(broker); } else { @@ -160,7 +165,7 @@ LoanBrokerSet::doApply() if (auto const ter = dirLink(view, account_, broker)) return ter; - if (auto const ter = dirLink(view, vaultPseudoID, broker)) + if (auto const ter = dirLink(view, vaultPseudoID, broker, sfVaultNode)) return ter; adjustOwnerCount(view, owner, 1, j_); @@ -188,7 +193,7 @@ LoanBrokerSet::doApply() broker->at(sfData) = *data; if (auto const rate = tx[~sfManagementFeeRate]) broker->at(sfManagementFeeRate) = *rate; - if (auto const debtMax = tx[~sfDebtMaximum]; debtMax) + if (auto const debtMax = tx[~sfDebtMaximum]) broker->at(sfDebtMaximum) = *debtMax; if (auto const coverMin = tx[~sfCoverRateMinimum]) broker->at(sfCoverRateMinimum) = *coverMin; @@ -198,7 +203,7 @@ LoanBrokerSet::doApply() view.insert(broker); } - return temDISABLED; + return tesSUCCESS; } //------------------------------------------------------------------------------ diff --git a/src/xrpld/ledger/View.h b/src/xrpld/ledger/View.h index 2c0c3e9850..a482dfb917 100644 --- a/src/xrpld/ledger/View.h +++ b/src/xrpld/ledger/View.h @@ -502,7 +502,11 @@ dirNext( describeOwnerDir(AccountID const& account); [[nodiscard]] TER -dirLink(ApplyView& view, AccountID const& owner, std::shared_ptr& object); +dirLink( + ApplyView& view, + AccountID const& owner, + std::shared_ptr& object, + SF_UINT64 const& node = sfOwnerNode); AccountID pseudoAccountAddress(ReadView const& view, uint256 const& pseudoOwnerKey); diff --git a/src/xrpld/ledger/detail/View.cpp b/src/xrpld/ledger/detail/View.cpp index 32ca5f4955..efba8da8f2 100644 --- a/src/xrpld/ledger/detail/View.cpp +++ b/src/xrpld/ledger/detail/View.cpp @@ -1030,13 +1030,17 @@ describeOwnerDir(AccountID const& account) } TER -dirLink(ApplyView& view, AccountID const& owner, std::shared_ptr& object) +dirLink( + ApplyView& view, + AccountID const& owner, + std::shared_ptr& object, + SF_UINT64 const& node) { auto const page = view.dirInsert( keylet::ownerDir(owner), object->key(), describeOwnerDir(owner)); if (!page) return tecDIR_FULL; // LCOV_EXCL_LINE - object->setFieldU64(sfOwnerNode, *page); + object->setFieldU64(node, *page); return tesSUCCESS; }