From c321e1070df2e0127f4b0e4fd42a73248659f59a Mon Sep 17 00:00:00 2001 From: tequ Date: Thu, 15 Jan 2026 14:51:05 +0900 Subject: [PATCH] address reviews --- include/xrpl/protocol/Fees.h | 12 ++++++++---- src/libxrpl/protocol/TER.cpp | 2 +- src/xrpld/app/tx/detail/Payment.cpp | 6 ++++-- src/xrpld/app/tx/detail/Transactor.cpp | 4 ++-- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/include/xrpl/protocol/Fees.h b/include/xrpl/protocol/Fees.h index 95f9d147b2..d86ea6e8a1 100644 --- a/include/xrpl/protocol/Fees.h +++ b/include/xrpl/protocol/Fees.h @@ -34,10 +34,14 @@ struct Fees bool isAccountSponsored = false, std::size_t sponsoringAccountCount = 0) const { - return (isAccountSponsored ? XRPAmount(0) : reserve) + - increment * - (ownerCount + sponsoringOwnerCount - sponsoredOwnerCount) + - reserve * sponsoringAccountCount; + auto const accountReserveUnits = + (isAccountSponsored ? 0 : 1) + sponsoringAccountCount; + + auto const ownerReserveUnits = + (ownerCount - sponsoredOwnerCount) + sponsoringOwnerCount; + + return (reserve * accountReserveUnits) + + (increment * ownerReserveUnits); } }; diff --git a/src/libxrpl/protocol/TER.cpp b/src/libxrpl/protocol/TER.cpp index b6303efef2..d839b5f607 100644 --- a/src/libxrpl/protocol/TER.cpp +++ b/src/libxrpl/protocol/TER.cpp @@ -109,7 +109,7 @@ transResults() MAKE_ERROR(tecPSEUDO_ACCOUNT, "This operation is not allowed against a pseudo-account."), MAKE_ERROR(tecPRECISION_LOSS, "The amounts used by the transaction cannot interact."), MAKE_ERROR(tecNO_DELEGATE_PERMISSION, "Delegated account lacks permission to perform this transaction."), - MAKE_ERROR(tecNO_SPONSOR_PERMISSION, "Does not have permission to sponsored this transaction."), + MAKE_ERROR(tecNO_SPONSOR_PERMISSION, "Sponsor has not authorized this transaction."), MAKE_ERROR(tefALREADY, "The exact transaction was already in this ledger."), MAKE_ERROR(tefBAD_ADD_AUTH, "Not authorized to add account."), diff --git a/src/xrpld/app/tx/detail/Payment.cpp b/src/xrpld/app/tx/detail/Payment.cpp index 19413617cd..4c1bdf02a8 100644 --- a/src/xrpld/app/tx/detail/Payment.cpp +++ b/src/xrpld/app/tx/detail/Payment.cpp @@ -337,6 +337,9 @@ Payment::preclaim(PreclaimContext const& ctx) } else { + // The tfSponsorCreatedAccount flag is specific to account creation via + // sponsorship. If the destination account already exists, applying this + // flag is invalid. if (txFlags & tfSponsorCreatedAccount) return tecNO_SPONSOR_PERMISSION; @@ -425,12 +428,11 @@ Payment::doApply() { auto const sponsor = view().peek(keylet::account(account_)); if (!sponsor) - return tecINTERNAL; // LCOV_EXCL_LINE + return tefINTERNAL; // LCOV_EXCL_LINE auto const currentSponsoringAccountCount = sponsor->getFieldU32(sfSponsoringAccountCount); sponsor->setFieldU32( sfSponsoringAccountCount, currentSponsoringAccountCount + 1); - view().update(sponsor); addSponsorToLedgerEntry(sleDst, sponsor); view().update(sponsor); diff --git a/src/xrpld/app/tx/detail/Transactor.cpp b/src/xrpld/app/tx/detail/Transactor.cpp index 241a8e2ea8..31a38ec1aa 100644 --- a/src/xrpld/app/tx/detail/Transactor.cpp +++ b/src/xrpld/app/tx/detail/Transactor.cpp @@ -805,8 +805,8 @@ Transactor::checkSign( auto const sponsorAcc = sponsorObj.getAccountID(sfAccount); auto const sponsorSignature = sigObject.getFieldObject(sfSponsorSignature); - if (auto const ret = - checkSign(view, flags, {}, sponsorAcc, sponsorSignature, j); + if (auto const ret = checkSign( + view, flags, std::nullopt, sponsorAcc, sponsorSignature, j); !isTesSuccess(ret)) return ret; }