diff --git a/src/test/app/FeeVote_test.cpp b/src/test/app/FeeVote_test.cpp index ddf1d2aa97..75d95f6433 100644 --- a/src/test/app/FeeVote_test.cpp +++ b/src/test/app/FeeVote_test.cpp @@ -1073,6 +1073,21 @@ class FeeVote_test : public beast::unit_test::Suite checkFeeTx(setup, feeTx, ledger); } + + { + FeeSetup setup; + setup.reference_fee = 42; + setup.account_reserve = 1234567; + setup.owner_reserve = 7654321; + setup.extension_compute_limit = kMaxExtensionComputeLimit + 1; + setup.extension_size_limit = kMaxExtensionSizeLimit + 1; + setup.gas_price = 300; + auto const [feeTx, ledger] = createFeeTxFromVoting(setup); + + setup.extension_compute_limit = ledger->fees().extensionComputeLimit; + setup.extension_size_limit = ledger->fees().extensionSizeLimit; + checkFeeTx(setup, feeTx, ledger); + } } void diff --git a/src/xrpld/app/misc/FeeVoteImpl.cpp b/src/xrpld/app/misc/FeeVoteImpl.cpp index 9e66177b6d..d61994e3c1 100644 --- a/src/xrpld/app/misc/FeeVoteImpl.cpp +++ b/src/xrpld/app/misc/FeeVoteImpl.cpp @@ -117,12 +117,6 @@ public: FeeVoteImpl::FeeVoteImpl(FeeSetup const& setup, beast::Journal journal) : target_(setup), journal_(journal) { - XRPL_ASSERT( - target_.extension_compute_limit <= kMaxExtensionComputeLimit, - "xrpl::FeeVoteImpl::FeeVoteImpl : extension compute limit in range"); - XRPL_ASSERT( - target_.extension_size_limit <= kMaxExtensionSizeLimit, - "xrpl::FeeVoteImpl::FeeVoteImpl : extension size limit in range"); } void @@ -180,16 +174,22 @@ FeeVoteImpl::doValidation(Fees const& lastFees, Rules const& rules, STValidation } if (rules.enabled(featureSmartEscrow)) { - vote( - lastFees.extensionComputeLimit, - target_.extension_compute_limit, - "extension compute limit", - sfExtensionComputeLimit); - vote( - lastFees.extensionSizeLimit, - target_.extension_size_limit, - "extension size limit", - sfExtensionSizeLimit); + if (target_.extension_compute_limit <= kMaxExtensionComputeLimit) + { + vote( + lastFees.extensionComputeLimit, + target_.extension_compute_limit, + "extension compute limit", + sfExtensionComputeLimit); + } + if (target_.extension_size_limit <= kMaxExtensionSizeLimit) + { + vote( + lastFees.extensionSizeLimit, + target_.extension_size_limit, + "extension size limit", + sfExtensionSizeLimit); + } vote(lastFees.gasPrice, target_.gas_price, "gas price", sfGasPrice); } } @@ -211,11 +211,23 @@ FeeVoteImpl::doVoting( detail::VotableValue incReserveVote(lastClosedLedger->fees().increment, target_.owner_reserve); + auto validOrCurrent = [](std::uint32_t target, std::uint32_t max, std::uint32_t current) { + return target <= max ? target : current; + }; + detail::VotableValue extensionComputeVote( - lastClosedLedger->fees().extensionComputeLimit, target_.extension_compute_limit); + lastClosedLedger->fees().extensionComputeLimit, + validOrCurrent( + target_.extension_compute_limit, + kMaxExtensionComputeLimit, + lastClosedLedger->fees().extensionComputeLimit)); detail::VotableValue extensionSizeVote( - lastClosedLedger->fees().extensionSizeLimit, target_.extension_size_limit); + lastClosedLedger->fees().extensionSizeLimit, + validOrCurrent( + target_.extension_size_limit, + kMaxExtensionSizeLimit, + lastClosedLedger->fees().extensionSizeLimit)); detail::VotableValue gasPriceVote(lastClosedLedger->fees().gasPrice, target_.gas_price);