From 5b64ff0dd68b8ad83d3766a0d986b9eb719797e8 Mon Sep 17 00:00:00 2001 From: tequ Date: Tue, 30 Sep 2025 18:30:38 +0900 Subject: [PATCH] address 5594, 5592 changes --- src/test/app/Sponsor_test.cpp | 4 +- src/xrpld/app/tx/detail/SponsorshipSet.cpp | 17 ++--- src/xrpld/app/tx/detail/SponsorshipSet.h | 3 + .../app/tx/detail/SponsorshipTransfer.cpp | 11 +-- src/xrpld/app/tx/detail/Transactor.cpp | 68 ++++--------------- src/xrpld/app/tx/detail/Transactor.h | 3 - 6 files changed, 25 insertions(+), 81 deletions(-) diff --git a/src/test/app/Sponsor_test.cpp b/src/test/app/Sponsor_test.cpp index 17cac1750b..734e869e79 100644 --- a/src/test/app/Sponsor_test.cpp +++ b/src/test/app/Sponsor_test.cpp @@ -227,7 +227,7 @@ public: fee(XRP(1)), sponsor::as(invalid, tfSponsorReserve), sponsor::sig(invalid), - ter(tefBAD_AUTH)); + ter(terNO_ACCOUNT)); // Success env(noop(alice), @@ -273,7 +273,7 @@ public: fee(XRP(1)), sponsor::as(invalid, tfSponsorReserve), sponsor::msig({signer1}), - ter(tefBAD_AUTH)); + ter(tefNOT_MULTI_SIGNING)); env(noop(alice), fee(XRP(1)), diff --git a/src/xrpld/app/tx/detail/SponsorshipSet.cpp b/src/xrpld/app/tx/detail/SponsorshipSet.cpp index 159d63b992..8b80950e9e 100644 --- a/src/xrpld/app/tx/detail/SponsorshipSet.cpp +++ b/src/xrpld/app/tx/detail/SponsorshipSet.cpp @@ -25,20 +25,17 @@ namespace ripple { +std::uint32_t +SponsorshipSet::getFlagsMask(PreflightContext const& ctx) +{ + return tfSponsorshipSetMask; +} + NotTEC SponsorshipSet::preflight(PreflightContext const& ctx) { - if (!ctx.rules.enabled(featureSponsor)) - return temDISABLED; - - if (auto const ter = preflight1(ctx)) - return ter; - // check Flags { - if (ctx.tx.isFlag(tfSponsorshipSetMask)) - return temINVALID_FLAG; - if (ctx.tx.isFlag(tfSponsorshipSetRequireSignForFee) && ctx.tx.isFlag(tfSponsorshipClearRequireSignForFee)) return temINVALID_FLAG; @@ -123,7 +120,7 @@ SponsorshipSet::preflight(PreflightContext const& ctx) return temMALFORMED; } - return preflight2(ctx); + return tesSUCCESS; } TER diff --git a/src/xrpld/app/tx/detail/SponsorshipSet.h b/src/xrpld/app/tx/detail/SponsorshipSet.h index ea037a686c..89de23ee63 100644 --- a/src/xrpld/app/tx/detail/SponsorshipSet.h +++ b/src/xrpld/app/tx/detail/SponsorshipSet.h @@ -33,6 +33,9 @@ public: { } + static std::uint32_t + getFlagsMask(PreflightContext const& ctx); + static NotTEC preflight(PreflightContext const& ctx); diff --git a/src/xrpld/app/tx/detail/SponsorshipTransfer.cpp b/src/xrpld/app/tx/detail/SponsorshipTransfer.cpp index 84442ae362..9a45bb77be 100644 --- a/src/xrpld/app/tx/detail/SponsorshipTransfer.cpp +++ b/src/xrpld/app/tx/detail/SponsorshipTransfer.cpp @@ -34,16 +34,7 @@ namespace ripple { NotTEC SponsorshipTransfer::preflight(PreflightContext const& ctx) { - if (!ctx.rules.enabled(featureSponsor)) - return temDISABLED; - - if (auto const ter = preflight1(ctx)) - return ter; - - if (ctx.tx.getFlags() & tfUniversalMask) - return temINVALID_FLAG; - - return preflight2(ctx); + return tesSUCCESS; } template diff --git a/src/xrpld/app/tx/detail/Transactor.cpp b/src/xrpld/app/tx/detail/Transactor.cpp index e8dc544d27..0f73398e3a 100644 --- a/src/xrpld/app/tx/detail/Transactor.cpp +++ b/src/xrpld/app/tx/detail/Transactor.cpp @@ -786,26 +786,28 @@ Transactor::checkSign( return tesSUCCESS; } - // If the pk is empty and not simulate or simulate and signers, - // then we must be multi-signing. - if (ctx.tx.isFieldPresent(sfSigners)) + if (sigObject.isFieldPresent(sfSponsor)) { - return checkMultiSign(ctx, idAccount, sigObject); - } - - if (ctx.tx.isFieldPresent(sfSponsor)) - { - auto const sponsorObj = ctx.tx.getFieldObject(sfSponsor); + auto const sponsorObj = sigObject.getFieldObject(sfSponsor); auto const isCoSigned = sponsorObj.isFieldPresent(sfTxnSignature) || !sponsorObj.getFieldVL(sfSigningPubKey).empty() || sponsorObj.isFieldPresent(sfSigners); if (isCoSigned) { - if (auto const ret = checkSponsorSign(ctx); !isTesSuccess(ret)) + auto const sponsorAcc = sponsorObj.getAccountID(sfAccount); + if (auto const ret = checkSign(ctx, sponsorAcc, sponsorObj); + !isTesSuccess(ret)) return ret; } } + // If the pk is empty and not simulate or simulate and signers, + // then we must be multi-signing. + if (sigObject.isFieldPresent(sfSigners)) + { + return checkMultiSign(ctx, idAccount, sigObject); + } + // Check Single Sign XRPL_ASSERT( !pkSigner.empty(), "ripple::Transactor::checkSign : non-empty signer"); @@ -880,52 +882,6 @@ Transactor::checkBatchSign(PreclaimContext const& ctx) return ret; } -NotTEC -Transactor::checkSponsorSign(PreclaimContext const& ctx) -{ - NotTEC ret = tesSUCCESS; - - if (!ctx.tx.isFieldPresent(sfSponsor)) - return tesSUCCESS; - - auto const sponsorObj = ctx.tx.getFieldObject(sfSponsor); - - auto const sponsorAcc = sponsorObj.getAccountID(sfAccount); - Blob const& pkSigner = sponsorObj.getFieldVL(sfSigningPubKey); - - auto const sleAccount = ctx.view.read(keylet::account(sponsorAcc)); - if (!sleAccount) - return tefBAD_AUTH; - - if (pkSigner.empty()) - { - STArray const& txSigners(sponsorObj.getFieldArray(sfSigners)); - for (auto const& txSigner : txSigners) - { - if (ret = checkMultiSign(ctx, sponsorAcc, txSigner); - !isTesSuccess(ret)) - return ret; - } - } - else - { - // LCOV_EXCL_START - if (!publicKeyType(makeSlice(pkSigner))) - return tefBAD_AUTH; - // LCOV_EXCL_STOP - - auto const idSigner = calcAccountID(PublicKey(makeSlice(pkSigner))); - - if (ret = checkSingleSign(ctx, idSigner, sponsorAcc, sleAccount); - !isTesSuccess(ret)) - { - return ret; - } - } - - return ret; -} - NotTEC Transactor::checkSingleSign( PreclaimContext const& ctx, diff --git a/src/xrpld/app/tx/detail/Transactor.h b/src/xrpld/app/tx/detail/Transactor.h index 4d79f3b721..583896b263 100644 --- a/src/xrpld/app/tx/detail/Transactor.h +++ b/src/xrpld/app/tx/detail/Transactor.h @@ -210,9 +210,6 @@ public: static NotTEC checkBatchSign(PreclaimContext const& ctx); - static NotTEC - checkSponsorSign(PreclaimContext const& ctx); - // Returns the fee in fee units, not scaled for load. static XRPAmount calculateBaseFee(ReadView const& view, STTx const& tx);