From d1ce07ef5daf27d6c95079042184e36cfd15eccf Mon Sep 17 00:00:00 2001 From: Edward Hennis Date: Mon, 25 Jul 2016 18:46:16 -0400 Subject: [PATCH] Minor refactor of LoadFeeTrack (RIPD-956): * Load scaling functions are free, and take `Fees`. * Move LoadFeeTrack to app/misc. * Update naming convention. --- Builds/VisualStudio2015/RippleD.vcxproj | 24 ++-- .../VisualStudio2015/RippleD.vcxproj.filters | 18 +-- src/ripple/app/ledger/Ledger.cpp | 3 +- src/ripple/app/ledger/impl/LedgerCleaner.cpp | 2 +- .../app/ledger/impl/LedgerConsensusImp.cpp | 9 +- src/ripple/app/ledger/impl/LedgerMaster.cpp | 2 +- src/ripple/app/main/Application.cpp | 2 +- src/ripple/app/main/LoadManager.cpp | 2 +- src/ripple/{core => app/misc}/LoadFeeTrack.h | 99 ++++++++------ src/ripple/app/misc/NetworkOPs.cpp | 17 ++- src/ripple/app/misc/TxQ.h | 1 - .../{core => app/misc}/impl/LoadFeeTrack.cpp | 127 +++++++++--------- src/ripple/app/misc/impl/TxQ.cpp | 1 + src/ripple/app/paths/PathRequest.cpp | 2 +- .../{core => app}/tests/LoadFeeTrack.test.cpp | 28 ++-- src/ripple/app/tests/TxQ_test.cpp | 2 +- src/ripple/app/tx/impl/Transactor.cpp | 6 +- src/ripple/core/tests/Config.test.cpp | 1 - src/ripple/overlay/impl/PeerImp.cpp | 1 + src/ripple/overlay/impl/PeerImp.h | 1 - src/ripple/rpc/handlers/LedgerHandler.cpp | 2 +- src/ripple/rpc/handlers/LedgerHandler.h | 1 - src/ripple/rpc/handlers/NoRippleCheck.cpp | 6 +- src/ripple/rpc/handlers/Peers.cpp | 2 +- src/ripple/rpc/handlers/RipplePathFind.cpp | 2 +- src/ripple/rpc/impl/LegacyPathFind.cpp | 2 +- src/ripple/rpc/impl/TransactionSign.cpp | 11 +- src/ripple/rpc/tests/JSONRPC.test.cpp | 4 +- src/ripple/rpc/tests/Subscribe.test.cpp | 8 +- src/ripple/unity/app_misc.cpp | 1 + src/ripple/unity/app_tests.cpp | 1 + src/ripple/unity/core.cpp | 2 - 32 files changed, 205 insertions(+), 185 deletions(-) rename src/ripple/{core => app/misc}/LoadFeeTrack.h (50%) rename src/ripple/{core => app/misc}/impl/LoadFeeTrack.cpp (65%) rename src/ripple/{core => app}/tests/LoadFeeTrack.test.cpp (61%) diff --git a/Builds/VisualStudio2015/RippleD.vcxproj b/Builds/VisualStudio2015/RippleD.vcxproj index 5d4327bead..04e8a4d23a 100644 --- a/Builds/VisualStudio2015/RippleD.vcxproj +++ b/Builds/VisualStudio2015/RippleD.vcxproj @@ -937,6 +937,10 @@ True True + + True + True + True True @@ -949,6 +953,8 @@ True True + + True True @@ -1149,6 +1155,10 @@ True True + + True + True + True True @@ -1982,12 +1992,6 @@ ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - True True @@ -2052,8 +2056,6 @@ - - @@ -2072,12 +2074,6 @@ ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - - True - True - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - ..\..\src\soci\src\core;..\..\src\sqlite;%(AdditionalIncludeDirectories) - True True diff --git a/Builds/VisualStudio2015/RippleD.vcxproj.filters b/Builds/VisualStudio2015/RippleD.vcxproj.filters index 47f32ae1f3..493226509f 100644 --- a/Builds/VisualStudio2015/RippleD.vcxproj.filters +++ b/Builds/VisualStudio2015/RippleD.vcxproj.filters @@ -1419,6 +1419,9 @@ ripple\app\misc\impl + + ripple\app\misc\impl + ripple\app\misc\impl @@ -1428,6 +1431,9 @@ ripple\app\misc\impl + + ripple\app\misc + ripple\app\misc @@ -1623,6 +1629,9 @@ ripple\app\tests + + ripple\app\tests + ripple\app\tests @@ -2532,9 +2541,6 @@ ripple\core\impl - - ripple\core\impl - ripple\core\impl @@ -2589,9 +2595,6 @@ ripple\core - - ripple\core - ripple\core @@ -2607,9 +2610,6 @@ ripple\core\tests - - ripple\core\tests - ripple\core\tests diff --git a/src/ripple/app/ledger/Ledger.cpp b/src/ripple/app/ledger/Ledger.cpp index 707bc452c9..357a943f9e 100644 --- a/src/ripple/app/ledger/Ledger.cpp +++ b/src/ripple/app/ledger/Ledger.cpp @@ -29,14 +29,13 @@ #include #include #include +#include #include #include #include #include -#include #include #include -#include #include #include #include diff --git a/src/ripple/app/ledger/impl/LedgerCleaner.cpp b/src/ripple/app/ledger/impl/LedgerCleaner.cpp index cd50540fdb..597f5b5ed6 100644 --- a/src/ripple/app/ledger/impl/LedgerCleaner.cpp +++ b/src/ripple/app/ledger/impl/LedgerCleaner.cpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/ripple/app/ledger/impl/LedgerConsensusImp.cpp b/src/ripple/app/ledger/impl/LedgerConsensusImp.cpp index 198fac6ec4..77b8d25e1a 100644 --- a/src/ripple/app/ledger/impl/LedgerConsensusImp.cpp +++ b/src/ripple/app/ledger/impl/LedgerConsensusImp.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -40,7 +41,6 @@ #include #include #include -#include #include #include #include @@ -1765,11 +1765,12 @@ void LedgerConsensusImp::startRound ( void LedgerConsensusImp::addLoad(STValidation::ref val) { + auto const& feeTrack = app_.getFeeTrack(); std::uint32_t fee = std::max( - app_.getFeeTrack().getLocalFee(), - app_.getFeeTrack().getClusterFee()); + feeTrack.getLocalFee(), + feeTrack.getClusterFee()); - if (fee > app_.getFeeTrack().getLoadBase()) + if (fee > feeTrack.getLoadBase()) val->setFieldU32(sfLoadFee, fee); } diff --git a/src/ripple/app/ledger/impl/LedgerMaster.cpp b/src/ripple/app/ledger/impl/LedgerMaster.cpp index 524745fd0e..a381d92be7 100644 --- a/src/ripple/app/ledger/impl/LedgerMaster.cpp +++ b/src/ripple/app/ledger/impl/LedgerMaster.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -37,7 +38,6 @@ #include #include #include -#include #include #include #include diff --git a/src/ripple/app/main/Application.cpp b/src/ripple/app/main/Application.cpp index e1ab8886fc..b75a087234 100644 --- a/src/ripple/app/main/Application.cpp +++ b/src/ripple/app/main/Application.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -55,7 +56,6 @@ #include #include #include -#include #include #include #include diff --git a/src/ripple/app/main/LoadManager.cpp b/src/ripple/app/main/LoadManager.cpp index 3b674ad419..2f84f5c370 100644 --- a/src/ripple/app/main/LoadManager.cpp +++ b/src/ripple/app/main/LoadManager.cpp @@ -20,9 +20,9 @@ #include #include #include +#include #include #include -#include #include #include #include diff --git a/src/ripple/core/LoadFeeTrack.h b/src/ripple/app/misc/LoadFeeTrack.h similarity index 50% rename from src/ripple/core/LoadFeeTrack.h rename to src/ripple/app/misc/LoadFeeTrack.h index 46a083fce6..cc4c15caa2 100644 --- a/src/ripple/core/LoadFeeTrack.h +++ b/src/ripple/app/misc/LoadFeeTrack.h @@ -28,6 +28,8 @@ namespace ripple { +struct Fees; + /** Manages the current fee schedule. The "base" fee is the cost to send a reference transaction under no load, @@ -37,51 +39,42 @@ namespace ripple { reference transaction. This fee fluctuates based on the load of the server. */ -// VFALCO TODO Rename "load" to "current". -class LoadFeeTrack +class LoadFeeTrack final { public: explicit LoadFeeTrack (beast::Journal journal = beast::Journal()) - : m_journal (journal) - , mLocalTxnLoadFee (lftNormalFee) - , mRemoteTxnLoadFee (lftNormalFee) - , mClusterTxnLoadFee (lftNormalFee) - , raiseCount (0) + : j_ (journal) + , localTxnLoadFee_ (lftNormalFee) + , remoteTxnLoadFee_ (lftNormalFee) + , clusterTxnLoadFee_ (lftNormalFee) + , raiseCount_ (0) { } - virtual ~LoadFeeTrack () { } - - // Scale from fee units to millionths of a ripple - std::uint64_t scaleFeeBase (std::uint64_t fee, std::uint64_t baseFee, - std::uint32_t referenceFeeUnits) const; - - // Scale using load as well as base rate - std::uint64_t scaleFeeLoad (std::uint64_t fee, std::uint64_t baseFee, - std::uint32_t referenceFeeUnits, bool bUnlimited) const; + ~LoadFeeTrack() = default; void setRemoteFee (std::uint32_t f) { - ScopedLockType sl (mLock); - mRemoteTxnLoadFee = f; + std::lock_guard sl (lock_); + remoteTxnLoadFee_ = f; } std::uint32_t getRemoteFee () const { - ScopedLockType sl (mLock); - return mRemoteTxnLoadFee; + std::lock_guard sl (lock_); + return remoteTxnLoadFee_; } std::uint32_t getLocalFee () const { - ScopedLockType sl (mLock); - return mLocalTxnLoadFee; + std::lock_guard sl (lock_); + return localTxnLoadFee_; } std::uint32_t getClusterFee () const { - ScopedLockType sl (mLock); - return mClusterTxnLoadFee; + std::lock_guard sl (lock_); + return clusterTxnLoadFee_; } std::uint32_t getLoadBase () const @@ -91,15 +84,25 @@ public: std::uint32_t getLoadFactor () const { - ScopedLockType sl (mLock); - return std::max({ mClusterTxnLoadFee, mLocalTxnLoadFee, mRemoteTxnLoadFee }); + std::lock_guard sl (lock_); + return std::max({ clusterTxnLoadFee_, localTxnLoadFee_, remoteTxnLoadFee_ }); + } + + std::pair + getScalingFactors() const + { + std::lock_guard sl(lock_); + + return std::make_pair( + std::max(localTxnLoadFee_, remoteTxnLoadFee_), + std::max(remoteTxnLoadFee_, clusterTxnLoadFee_)); } void setClusterFee (std::uint32_t fee) { - ScopedLockType sl (mLock); - mClusterTxnLoadFee = fee; + std::lock_guard sl (lock_); + clusterTxnLoadFee_ = fee; } bool raiseLocalFee (); @@ -107,33 +110,41 @@ public: bool isLoadedLocal () const { - ScopedLockType sl (mLock); - return (raiseCount != 0) || (mLocalTxnLoadFee != lftNormalFee); + std::lock_guard sl (lock_); + return (raiseCount_ != 0) || (localTxnLoadFee_ != lftNormalFee); } bool isLoadedCluster () const { - ScopedLockType sl (mLock); - return (raiseCount != 0) || (mLocalTxnLoadFee != lftNormalFee) || (mClusterTxnLoadFee != lftNormalFee); + std::lock_guard sl (lock_); + return (raiseCount_ != 0) || (localTxnLoadFee_ != lftNormalFee) || + (clusterTxnLoadFee_ != lftNormalFee); } private: - static const int lftNormalFee = 256; // 256 is the minimum/normal load factor - static const int lftFeeIncFraction = 4; // increase fee by 1/4 - static const int lftFeeDecFraction = 4; // decrease fee by 1/4 - static const int lftFeeMax = lftNormalFee * 1000000; + static std::uint32_t constexpr lftNormalFee = 256; // 256 is the minimum/normal load factor + static std::uint32_t constexpr lftFeeIncFraction = 4; // increase fee by 1/4 + static std::uint32_t constexpr lftFeeDecFraction = 4; // decrease fee by 1/4 + static std::uint32_t constexpr lftFeeMax = lftNormalFee * 1000000; - beast::Journal m_journal; - using LockType = std::mutex; - using ScopedLockType = std::lock_guard ; - LockType mutable mLock; + beast::Journal j_; + std::mutex mutable lock_; - std::uint32_t mLocalTxnLoadFee; // Scale factor, lftNormalFee = normal fee - std::uint32_t mRemoteTxnLoadFee; // Scale factor, lftNormalFee = normal fee - std::uint32_t mClusterTxnLoadFee; // Scale factor, lftNormalFee = normal fee - int raiseCount; + std::uint32_t localTxnLoadFee_; // Scale factor, lftNormalFee = normal fee + std::uint32_t remoteTxnLoadFee_; // Scale factor, lftNormalFee = normal fee + std::uint32_t clusterTxnLoadFee_; // Scale factor, lftNormalFee = normal fee + std::uint32_t raiseCount_; }; +//------------------------------------------------------------------------------ + +// Scale from fee units to millionths of a ripple +std::uint64_t scaleFeeBase(std::uint64_t fee, Fees const& fees); + +// Scale using load as well as base rate +std::uint64_t scaleFeeLoad(std::uint64_t fee, LoadFeeTrack const& feeTrack, + Fees const& fees, bool bUnlimited); + } // ripple #endif diff --git a/src/ripple/app/misc/NetworkOPs.cpp b/src/ripple/app/misc/NetworkOPs.cpp index f61f814ea8..2447f55036 100644 --- a/src/ripple/app/misc/NetworkOPs.cpp +++ b/src/ripple/app/misc/NetworkOPs.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -53,7 +54,6 @@ #include #include #include -#include #include #include #include @@ -1581,13 +1581,14 @@ void NetworkOPsImp::pubServer () if (!mSubServer.empty ()) { Json::Value jvObj (Json::objectValue); + auto const& feeTrack = app_.getFeeTrack(); jvObj [jss::type] = "serverStatus"; jvObj [jss::server_status] = strOperatingMode (); jvObj [jss::load_base] = - (mLastLoadBase = app_.getFeeTrack ().getLoadBase ()); + (mLastLoadBase = feeTrack.getLoadBase ()); jvObj [jss::load_factor] = - (mLastLoadFactor = app_.getFeeTrack ().getLoadFactor ()); + (mLastLoadFactor = feeTrack.getLoadFactor ()); for (auto i = mSubServer.begin (); i != mSubServer.end (); ) { @@ -2358,8 +2359,9 @@ void NetworkOPsImp::pubLedger ( void NetworkOPsImp::reportFeeChange () { - if ((app_.getFeeTrack ().getLoadBase () == mLastLoadBase) && - (app_.getFeeTrack ().getLoadFactor () == mLastLoadFactor)) + auto const& feeTrack = app_.getFeeTrack(); + if ((feeTrack.getLoadBase () == mLastLoadBase) && + (feeTrack.getLoadFactor () == mLastLoadFactor)) return; m_job_queue.addJob ( @@ -2724,10 +2726,11 @@ bool NetworkOPsImp::subServer (InfoSub::ref isrListener, Json::Value& jvResult, uRandom.size(), crypto_prng()); + auto const& feeTrack = app_.getFeeTrack(); jvResult[jss::random] = to_string (uRandom); jvResult[jss::server_status] = strOperatingMode (); - jvResult[jss::load_base] = app_.getFeeTrack ().getLoadBase (); - jvResult[jss::load_factor] = app_.getFeeTrack ().getLoadFactor (); + jvResult[jss::load_base] = feeTrack.getLoadBase (); + jvResult[jss::load_factor] = feeTrack.getLoadFactor (); jvResult [jss::hostid] = getHostId (admin); jvResult[jss::pubkey_node] = toBase58 ( TokenType::TOKEN_NODE_PUBLIC, diff --git a/src/ripple/app/misc/TxQ.h b/src/ripple/app/misc/TxQ.h index e7c52a1800..03012ced51 100644 --- a/src/ripple/app/misc/TxQ.h +++ b/src/ripple/app/misc/TxQ.h @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include diff --git a/src/ripple/core/impl/LoadFeeTrack.cpp b/src/ripple/app/misc/impl/LoadFeeTrack.cpp similarity index 65% rename from src/ripple/core/impl/LoadFeeTrack.cpp rename to src/ripple/app/misc/impl/LoadFeeTrack.cpp index a61161dcc0..077e667a3f 100644 --- a/src/ripple/core/impl/LoadFeeTrack.cpp +++ b/src/ripple/app/misc/impl/LoadFeeTrack.cpp @@ -18,28 +18,79 @@ //============================================================================== #include +#include #include #include #include -#include #include +#include #include #include namespace ripple { +bool +LoadFeeTrack::raiseLocalFee () +{ + std::lock_guard sl (lock_); + + if (++raiseCount_ < 2) + return false; + + std::uint32_t origFee = localTxnLoadFee_; + + // make sure this fee takes effect + if (localTxnLoadFee_ < remoteTxnLoadFee_) + localTxnLoadFee_ = remoteTxnLoadFee_; + + // Increase slowly + localTxnLoadFee_ += (localTxnLoadFee_ / lftFeeIncFraction); + + if (localTxnLoadFee_ > lftFeeMax) + localTxnLoadFee_ = lftFeeMax; + + if (origFee == localTxnLoadFee_) + return false; + + JLOG(j_.debug()) << "Local load fee raised from " << + origFee << " to " << localTxnLoadFee_; + return true; +} + +bool +LoadFeeTrack::lowerLocalFee () +{ + std::lock_guard sl (lock_); + std::uint32_t origFee = localTxnLoadFee_; + raiseCount_ = 0; + + // Reduce slowly + localTxnLoadFee_ -= (localTxnLoadFee_ / lftFeeDecFraction ); + + if (localTxnLoadFee_ < lftNormalFee) + localTxnLoadFee_ = lftNormalFee; + + if (origFee == localTxnLoadFee_) + return false; + + JLOG(j_.debug()) << "Local load fee lowered from " << + origFee << " to " << localTxnLoadFee_; + return true; +} + +//------------------------------------------------------------------------------ + // Scale from fee units to millionths of a ripple std::uint64_t -LoadFeeTrack::scaleFeeBase (std::uint64_t fee, std::uint64_t baseFee, - std::uint32_t referenceFeeUnits) const +scaleFeeBase(std::uint64_t fee, Fees const& fees) { - return mulDivThrow (fee, baseFee, referenceFeeUnits); + return mulDivThrow (fee, fees.base, fees.units); } // Scale using load as well as base rate std::uint64_t -LoadFeeTrack::scaleFeeLoad (std::uint64_t fee, std::uint64_t baseFee, - std::uint32_t referenceFeeUnits, bool bUnlimited) const +scaleFeeLoad(std::uint64_t fee, LoadFeeTrack const& feeTrack, + Fees const& fees, bool bUnlimited) { if (fee == 0) return fee; @@ -47,25 +98,24 @@ LoadFeeTrack::scaleFeeLoad (std::uint64_t fee, std::uint64_t baseFee, std::uint32_t uRemFee; { // Collect the fee rates - std::lock_guard sl(mLock); - feeFactor = std::max(mLocalTxnLoadFee, mRemoteTxnLoadFee); - uRemFee = std::max(mRemoteTxnLoadFee, mClusterTxnLoadFee); + std::tie(feeFactor, uRemFee) = feeTrack.getScalingFactors(); } // Let privileged users pay the normal fee until // the local load exceeds four times the remote. if (bUnlimited && (feeFactor > uRemFee) && (feeFactor < (4 * uRemFee))) feeFactor = uRemFee; + auto baseFee = fees.base; // Compute: - // fee = fee * baseFee * feeFactor / (referenceFeeUnits * lftNormalFee); + // fee = fee * baseFee * feeFactor / (fees.units * lftNormalFee); // without overflow, and as accurately as possible // The denominator of the fraction we're trying to compute. - // referenceFeeUnits and lftNormalFee are both 32 bit, + // fees.units and lftNormalFee are both 32 bit, // so the multiplication can't overflow. - auto den = static_cast(referenceFeeUnits) - * static_cast(lftNormalFee); - // Reduce fee * baseFee * feeFactor / (referenceFeeUnits * lftNormalFee) + auto den = static_cast(fees.units) + * static_cast(feeTrack.getLoadBase()); + // Reduce fee * baseFee * feeFactor / (fees.units * lftNormalFee) // to lowest terms. lowestTerms(fee, den); lowestTerms(baseFee, den); @@ -102,53 +152,4 @@ LoadFeeTrack::scaleFeeLoad (std::uint64_t fee, std::uint64_t baseFee, return fee; } -bool -LoadFeeTrack::raiseLocalFee () -{ - ScopedLockType sl (mLock); - - if (++raiseCount < 2) - return false; - - std::uint32_t origFee = mLocalTxnLoadFee; - - // make sure this fee takes effect - if (mLocalTxnLoadFee < mRemoteTxnLoadFee) - mLocalTxnLoadFee = mRemoteTxnLoadFee; - - // Increase slowly - mLocalTxnLoadFee += (mLocalTxnLoadFee / lftFeeIncFraction); - - if (mLocalTxnLoadFee > lftFeeMax) - mLocalTxnLoadFee = lftFeeMax; - - if (origFee == mLocalTxnLoadFee) - return false; - - JLOG(m_journal.debug()) << "Local load fee raised from " << - origFee << " to " << mLocalTxnLoadFee; - return true; -} - -bool -LoadFeeTrack::lowerLocalFee () -{ - ScopedLockType sl (mLock); - std::uint32_t origFee = mLocalTxnLoadFee; - raiseCount = 0; - - // Reduce slowly - mLocalTxnLoadFee -= (mLocalTxnLoadFee / lftFeeDecFraction ); - - if (mLocalTxnLoadFee < lftNormalFee) - mLocalTxnLoadFee = lftNormalFee; - - if (origFee == mLocalTxnLoadFee) - return false; - - JLOG(m_journal.debug()) << "Local load fee lowered from " << - origFee << " to " << mLocalTxnLoadFee; - return true; -} - } // ripple diff --git a/src/ripple/app/misc/impl/TxQ.cpp b/src/ripple/app/misc/impl/TxQ.cpp index dc5c3c64cb..d0bd544ed5 100644 --- a/src/ripple/app/misc/impl/TxQ.cpp +++ b/src/ripple/app/misc/impl/TxQ.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include diff --git a/src/ripple/app/paths/PathRequest.cpp b/src/ripple/app/paths/PathRequest.cpp index dd05974375..9a44079dce 100644 --- a/src/ripple/app/paths/PathRequest.cpp +++ b/src/ripple/app/paths/PathRequest.cpp @@ -23,10 +23,10 @@ #include #include #include +#include #include #include #include -#include #include #include #include diff --git a/src/ripple/core/tests/LoadFeeTrack.test.cpp b/src/ripple/app/tests/LoadFeeTrack.test.cpp similarity index 61% rename from src/ripple/core/tests/LoadFeeTrack.test.cpp rename to src/ripple/app/tests/LoadFeeTrack.test.cpp index a9169972f4..6a78e6da10 100644 --- a/src/ripple/core/tests/LoadFeeTrack.test.cpp +++ b/src/ripple/app/tests/LoadFeeTrack.test.cpp @@ -18,9 +18,10 @@ //============================================================================== #include -#include +#include #include #include +#include namespace ripple { @@ -31,17 +32,26 @@ public: { Config d; // get a default configuration object LoadFeeTrack l; + Fees const fees = [&]() + { + Fees f; + f.base = d.FEE_DEFAULT; + f.units = d.TRANSACTION_FEE_BASE; + f.reserve = 200 * SYSTEM_CURRENCY_PARTS; + f.increment = 50 * SYSTEM_CURRENCY_PARTS; + return f; + }(); - BEAST_EXPECT(l.scaleFeeBase (10000, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 10000); - BEAST_EXPECT(l.scaleFeeLoad (10000, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE, false) == 10000); - BEAST_EXPECT(l.scaleFeeBase (1, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 1); - BEAST_EXPECT(l.scaleFeeLoad (1, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE, false) == 1); + BEAST_EXPECT (scaleFeeBase (10000, fees) == 10000); + BEAST_EXPECT (scaleFeeLoad (10000, l, fees, false) == 10000); + BEAST_EXPECT (scaleFeeBase (1, fees) == 1); + BEAST_EXPECT (scaleFeeLoad (1, l, fees, false) == 1); // Check new default fee values give same fees as old defaults - BEAST_EXPECT(l.scaleFeeBase (d.FEE_DEFAULT, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 10); - BEAST_EXPECT(l.scaleFeeBase (d.FEE_ACCOUNT_RESERVE, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 200 * SYSTEM_CURRENCY_PARTS); - BEAST_EXPECT(l.scaleFeeBase (d.FEE_OWNER_RESERVE, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 50 * SYSTEM_CURRENCY_PARTS); - BEAST_EXPECT(l.scaleFeeBase (d.FEE_OFFER, d.FEE_DEFAULT, d.TRANSACTION_FEE_BASE) == 10); + BEAST_EXPECT (scaleFeeBase (d.FEE_DEFAULT, fees) == 10); + BEAST_EXPECT (scaleFeeBase (d.FEE_ACCOUNT_RESERVE, fees) == 200 * SYSTEM_CURRENCY_PARTS); + BEAST_EXPECT (scaleFeeBase (d.FEE_OWNER_RESERVE, fees) == 50 * SYSTEM_CURRENCY_PARTS); + BEAST_EXPECT (scaleFeeBase (d.FEE_OFFER, fees) == 10); } }; diff --git a/src/ripple/app/tests/TxQ_test.cpp b/src/ripple/app/tests/TxQ_test.cpp index d5dfc3ff75..a6d5e0b205 100644 --- a/src/ripple/app/tests/TxQ_test.cpp +++ b/src/ripple/app/tests/TxQ_test.cpp @@ -18,10 +18,10 @@ //============================================================================== #include +#include #include #include #include -#include #include #include #include diff --git a/src/ripple/app/tx/impl/Transactor.cpp b/src/ripple/app/tx/impl/Transactor.cpp index 389d60addb..abc282d71d 100644 --- a/src/ripple/app/tx/impl/Transactor.cpp +++ b/src/ripple/app/tx/impl/Transactor.cpp @@ -19,13 +19,13 @@ #include #include +#include #include #include #include #include #include #include -#include #include #include #include @@ -107,8 +107,8 @@ XRPAmount calculateFee(Application& app, std::uint64_t const baseFee, Fees const& fees, ApplyFlags flags) { - return app.getFeeTrack().scaleFeeLoad( - baseFee, fees.base, fees.units, flags & tapUNLIMITED); + return scaleFeeLoad(baseFee, app.getFeeTrack(), + fees, flags & tapUNLIMITED); } //------------------------------------------------------------------------------ diff --git a/src/ripple/core/tests/Config.test.cpp b/src/ripple/core/tests/Config.test.cpp index 9e26562018..7b32e88bdf 100644 --- a/src/ripple/core/tests/Config.test.cpp +++ b/src/ripple/core/tests/Config.test.cpp @@ -19,7 +19,6 @@ #include #include -#include #include #include #include diff --git a/src/ripple/overlay/impl/PeerImp.cpp b/src/ripple/overlay/impl/PeerImp.cpp index 4e79d89e6c..116b5e1a1f 100644 --- a/src/ripple/overlay/impl/PeerImp.cpp +++ b/src/ripple/overlay/impl/PeerImp.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include diff --git a/src/ripple/overlay/impl/PeerImp.h b/src/ripple/overlay/impl/PeerImp.h index fc67ee2fff..9306d7df90 100644 --- a/src/ripple/overlay/impl/PeerImp.h +++ b/src/ripple/overlay/impl/PeerImp.h @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include diff --git a/src/ripple/rpc/handlers/LedgerHandler.cpp b/src/ripple/rpc/handlers/LedgerHandler.cpp index 0ab49023e0..808691e9c1 100644 --- a/src/ripple/rpc/handlers/LedgerHandler.cpp +++ b/src/ripple/rpc/handlers/LedgerHandler.cpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/ripple/rpc/handlers/LedgerHandler.h b/src/ripple/rpc/handlers/LedgerHandler.h index e8f6e49801..d642263c39 100644 --- a/src/ripple/rpc/handlers/LedgerHandler.h +++ b/src/ripple/rpc/handlers/LedgerHandler.h @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include diff --git a/src/ripple/rpc/handlers/NoRippleCheck.cpp b/src/ripple/rpc/handlers/NoRippleCheck.cpp index a97093dcf1..04454f0226 100644 --- a/src/ripple/rpc/handlers/NoRippleCheck.cpp +++ b/src/ripple/rpc/handlers/NoRippleCheck.cpp @@ -19,8 +19,8 @@ #include #include +#include #include -#include #include #include #include @@ -44,8 +44,8 @@ static void fillTransaction ( auto& fees = ledger.fees(); // Convert the reference transaction cost in fee units to drops // scaled to represent the current fee load. - txArray["Fee"] = Json::UInt (context.app.getFeeTrack().scaleFeeLoad( - fees.units, fees.base, fees.units, false)); + txArray["Fee"] = Json::UInt (scaleFeeLoad(fees.units, + context.app.getFeeTrack(), fees, false)); } // { diff --git a/src/ripple/rpc/handlers/Peers.cpp b/src/ripple/rpc/handlers/Peers.cpp index 690e410ee7..f4ca781a5d 100644 --- a/src/ripple/rpc/handlers/Peers.cpp +++ b/src/ripple/rpc/handlers/Peers.cpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/ripple/rpc/handlers/RipplePathFind.cpp b/src/ripple/rpc/handlers/RipplePathFind.cpp index 21b09abe9d..dc1b30ceac 100644 --- a/src/ripple/rpc/handlers/RipplePathFind.cpp +++ b/src/ripple/rpc/handlers/RipplePathFind.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -28,7 +29,6 @@ #include #include #include -#include #include #include #include diff --git a/src/ripple/rpc/impl/LegacyPathFind.cpp b/src/ripple/rpc/impl/LegacyPathFind.cpp index d63f3a4350..c644e4ef39 100644 --- a/src/ripple/rpc/impl/LegacyPathFind.cpp +++ b/src/ripple/rpc/impl/LegacyPathFind.cpp @@ -19,11 +19,11 @@ #include #include +#include #include #include #include #include -#include namespace ripple { namespace RPC { diff --git a/src/ripple/rpc/impl/TransactionSign.cpp b/src/ripple/rpc/impl/TransactionSign.cpp index fb07ed0052..d81cd7962a 100644 --- a/src/ripple/rpc/impl/TransactionSign.cpp +++ b/src/ripple/rpc/impl/TransactionSign.cpp @@ -22,13 +22,13 @@ #include #include #include +#include #include #include #include #include // Validity::Valid #include #include -#include #include #include #include @@ -690,8 +690,8 @@ Json::Value checkFee ( // Administrative and identified endpoints are exempt from local fees. std::uint64_t const loadFee = - feeTrack.scaleFeeLoad (feeDefault, - ledger->fees().base, ledger->fees().units, isUnlimited (role)); + scaleFeeLoad (feeDefault, feeTrack, + ledger->fees(), isUnlimited (role)); std::uint64_t fee = loadFee; { auto const assumeTx = request.isMember("x_assume_tx") && @@ -711,9 +711,8 @@ Json::Value checkFee ( } } - auto const limit = mulDivThrow(feeTrack.scaleFeeBase ( - feeDefault, ledger->fees().base, ledger->fees().units), - mult, div); + auto const limit = mulDivThrow(scaleFeeBase ( + feeDefault, ledger->fees()), mult, div); if (fee > limit && fee != loadFee && request.isMember("x_queue_okay") && diff --git a/src/ripple/rpc/tests/JSONRPC.test.cpp b/src/ripple/rpc/tests/JSONRPC.test.cpp index d557322019..763212ee51 100644 --- a/src/ripple/rpc/tests/JSONRPC.test.cpp +++ b/src/ripple/rpc/tests/JSONRPC.test.cpp @@ -18,9 +18,9 @@ //============================================================================== #include +#include #include #include -#include #include #include #include @@ -1843,7 +1843,7 @@ public: { test::jtx::Env env(*this); auto ledger = env.current(); - LoadFeeTrack const& feeTrack = env.app().getFeeTrack(); + auto const& feeTrack = env.app().getFeeTrack(); { Json::Value req; diff --git a/src/ripple/rpc/tests/Subscribe.test.cpp b/src/ripple/rpc/tests/Subscribe.test.cpp index 37e9ea43a5..ce2c87cac7 100644 --- a/src/ripple/rpc/tests/Subscribe.test.cpp +++ b/src/ripple/rpc/tests/Subscribe.test.cpp @@ -16,8 +16,8 @@ //============================================================================== #include +#include #include -#include #include #include #include @@ -47,8 +47,9 @@ public: { // Raise fee to cause an update + auto& feeTrack = env.app().getFeeTrack(); for(int i = 0; i < 5; ++i) - env.app().getFeeTrack().raiseLocalFee(); + feeTrack.raiseLocalFee(); env.app().getOPs().reportFeeChange(); // Check stream update @@ -67,8 +68,9 @@ public: { // Raise fee to cause an update + auto& feeTrack = env.app().getFeeTrack(); for (int i = 0; i < 5; ++i) - env.app().getFeeTrack().raiseLocalFee(); + feeTrack.raiseLocalFee(); env.app().getOPs().reportFeeChange(); // Check stream update diff --git a/src/ripple/unity/app_misc.cpp b/src/ripple/unity/app_misc.cpp index 421636bbfe..3fa5a8c83e 100644 --- a/src/ripple/unity/app_misc.cpp +++ b/src/ripple/unity/app_misc.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include #include diff --git a/src/ripple/unity/app_tests.cpp b/src/ripple/unity/app_tests.cpp index 177256f109..5439e4a191 100644 --- a/src/ripple/unity/app_tests.cpp +++ b/src/ripple/unity/app_tests.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include diff --git a/src/ripple/unity/core.cpp b/src/ripple/unity/core.cpp index 11a708a350..c4cb369e38 100644 --- a/src/ripple/unity/core.cpp +++ b/src/ripple/unity/core.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -35,6 +34,5 @@ #include #include -#include #include