mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Fix remote fee logic. Remove magic constants.
This commit is contained in:
@@ -106,49 +106,39 @@ bool LoadManager::adjust(LoadSource& source, int credits) const
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64 LoadTrack::scaleFee(uint64 fee)
|
||||
uint64 LoadFeeTrack::scaleFee(uint64 fee)
|
||||
{
|
||||
static uint64 midrange(0x00000000FFFFFFFF);
|
||||
int factor = (mLocalTxnLoadFee > mRemoteTxnLoadFee) ? mLocalTxnLoadFee : mRemoteTxnLoadFee;
|
||||
|
||||
if (fee > midrange) // large fee, divide first
|
||||
return (fee >> 16) * factor;
|
||||
return (fee / lftNormalFee) * factor;
|
||||
else // small fee, multiply first
|
||||
return (fee * factor) >> 16;
|
||||
return (fee * factor) / lftNormalFee;
|
||||
}
|
||||
|
||||
void LoadTrack::raiseRemoteFee()
|
||||
void LoadFeeTrack::setRemoteFee(uint32 f)
|
||||
{
|
||||
if (mRemoteTxnLoadFee < mLocalTxnLoadFee) // make sure this fee takes effect
|
||||
mRemoteTxnLoadFee = mLocalTxnLoadFee;
|
||||
|
||||
if (mRemoteTxnLoadFee < 268435456) // no more than a million
|
||||
mRemoteTxnLoadFee += (mRemoteTxnLoadFee >> 4); // increment by 1/16th
|
||||
mRemoteTxnLoadFee = f;
|
||||
}
|
||||
|
||||
void LoadTrack::lowerRemoteFee()
|
||||
{
|
||||
mLocalTxnLoadFee -= (mLocalTxnLoadFee >> 4); // reduce by 1/16th
|
||||
|
||||
if (mLocalTxnLoadFee < 256)
|
||||
mLocalTxnLoadFee = 256;
|
||||
}
|
||||
|
||||
void LoadTrack::raiseLocalFee()
|
||||
void LoadFeeTrack::raiseLocalFee()
|
||||
{
|
||||
if (mLocalTxnLoadFee < mLocalTxnLoadFee) // make sure this fee takes effect
|
||||
mLocalTxnLoadFee = mLocalTxnLoadFee;
|
||||
|
||||
if (mLocalTxnLoadFee < 268435456) // no more than a million
|
||||
mLocalTxnLoadFee += (mLocalTxnLoadFee >> 4); // increment by 1/16th
|
||||
mLocalTxnLoadFee += (mLocalTxnLoadFee / lftFeeIncFraction); // increment by 1/16th
|
||||
|
||||
if (mLocalTxnLoadFee > lftFeeMax)
|
||||
mLocalTxnLoadFee = lftFeeMax;
|
||||
}
|
||||
|
||||
void LoadTrack::lowerLocalFee()
|
||||
void LoadFeeTrack::lowerLocalFee()
|
||||
{
|
||||
mLocalTxnLoadFee -= (mLocalTxnLoadFee >> 4); // reduce by 1/16th
|
||||
mLocalTxnLoadFee -= (mLocalTxnLoadFee / lftFeeDecFraction ); // reduce by 1/16th
|
||||
|
||||
if (mLocalTxnLoadFee < 256)
|
||||
mLocalTxnLoadFee = 256;
|
||||
if (mLocalTxnLoadFee < lftNormalFee)
|
||||
mLocalTxnLoadFee = lftNormalFee;
|
||||
}
|
||||
|
||||
// vim:ts=4
|
||||
|
||||
@@ -62,25 +62,30 @@ public:
|
||||
bool adjust(LoadSource&, int credits) const; // return value: false = balance okay, true = warn/cutoff
|
||||
};
|
||||
|
||||
class LoadTrack
|
||||
class LoadFeeTrack
|
||||
{ // structure that tracks our current fee/load schedule
|
||||
protected:
|
||||
|
||||
uint32 mLocalTxnLoadFee; // Scale factor, 256 = normal fee
|
||||
uint32 mRemoteTxnLoadFee; // Scale factor, 256 = normal fee
|
||||
static const int lftNormalFee = 256; // 256 is the minimum/normal load factor
|
||||
static const int lftFeeIncFraction = 16; // increase fee by 1/16
|
||||
static const int lftFeeDecFraction = 16; // decrease fee by 1/16
|
||||
static const int lftFeeMax = lftNormalFee * 1000000;
|
||||
|
||||
uint32 mLocalTxnLoadFee; // Scale factor, lftNormalFee = normal fee
|
||||
uint32 mRemoteTxnLoadFee; // Scale factor, lftNormalFee = normal fee
|
||||
uint32 mPeerLoadSchedule; // Schedule setting, 0 = normal schedule
|
||||
uint32 mClientLoadSchedule; // Schedule setting, 0 = normal schedule
|
||||
|
||||
public:
|
||||
|
||||
LoadTrack() : mLocalTxnLoadFee(256), mRemoteTxnLoadFee(256), mPeerLoadSchedule(0), mClientLoadSchedule(0)
|
||||
LoadFeeTrack()
|
||||
: mLocalTxnLoadFee(lftNormalFee), mRemoteTxnLoadFee(lftNormalFee), mPeerLoadSchedule(0), mClientLoadSchedule(0)
|
||||
{ ; }
|
||||
|
||||
uint64 scaleFee(uint64 fee);
|
||||
|
||||
void raiseRemoteFee();
|
||||
void setRemoteFee(uint32);
|
||||
void raiseLocalFee();
|
||||
void lowerRemoteFee();
|
||||
void lowerLocalFee();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user