Changeset View
Changeset View
Standalone View
Standalone View
src/amount.h
// Copyright (c) 2009-2010 Satoshi Nakamoto | // Copyright (c) 2009-2010 Satoshi Nakamoto | ||||
// Copyright (c) 2009-2016 The Bitcoin Core developers | // Copyright (c) 2009-2016 The Bitcoin Core developers | ||||
// Copyright (c) 2017-2018 The Bitcoin developers | |||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#ifndef BITCOIN_AMOUNT_H | #ifndef BITCOIN_AMOUNT_H | ||||
#define BITCOIN_AMOUNT_H | #define BITCOIN_AMOUNT_H | ||||
#include "serialize.h" | #include "serialize.h" | ||||
▲ Show 20 Lines • Show All 147 Lines • ▼ Show 20 Lines | |||||
* critical; in unusual circumstances like a(nother) overflow bug that allowed | * critical; in unusual circumstances like a(nother) overflow bug that allowed | ||||
* for the creation of coins out of thin air modification could lead to a fork. | * for the creation of coins out of thin air modification could lead to a fork. | ||||
*/ | */ | ||||
static const Amount MAX_MONEY = 21000000 * COIN; | static const Amount MAX_MONEY = 21000000 * COIN; | ||||
inline bool MoneyRange(const Amount nValue) { | inline bool MoneyRange(const Amount nValue) { | ||||
return (nValue >= Amount(0) && nValue <= MAX_MONEY); | return (nValue >= Amount(0) && nValue <= MAX_MONEY); | ||||
} | } | ||||
/** | |||||
* Fee rate in satoshis per kilobyte: Amount / kB | |||||
*/ | |||||
class CFeeRate { | |||||
private: | |||||
// unit is satoshis-per-1,000-bytes | |||||
Amount nSatoshisPerK; | |||||
public: | |||||
/** Fee rate of 0 satoshis per kB */ | |||||
CFeeRate() : nSatoshisPerK(0) {} | |||||
explicit CFeeRate(const Amount _nSatoshisPerK) | |||||
: nSatoshisPerK(_nSatoshisPerK) {} | |||||
/** | |||||
* Constructor for a fee rate in satoshis per kB. The size in bytes must not | |||||
* exceed (2^63 - 1) | |||||
*/ | |||||
CFeeRate(const Amount nFeePaid, size_t nBytes); | |||||
CFeeRate(const CFeeRate &other) { nSatoshisPerK = other.nSatoshisPerK; } | |||||
/** | |||||
* Return the fee in satoshis for the given size in bytes. | |||||
*/ | |||||
Amount GetFee(size_t nBytes) const; | |||||
/** | |||||
* Return the ceiling of a fee calculation in satoshis for the given size in | |||||
* bytes. | |||||
*/ | |||||
Amount GetFeeCeiling(size_t nBytes) const; | |||||
/** | |||||
* Return the fee in satoshis for a size of 1000 bytes | |||||
*/ | |||||
Amount GetFeePerK() const { return GetFee(1000); } | |||||
friend bool operator<(const CFeeRate &a, const CFeeRate &b) { | |||||
return a.nSatoshisPerK < b.nSatoshisPerK; | |||||
} | |||||
friend bool operator>(const CFeeRate &a, const CFeeRate &b) { | |||||
return a.nSatoshisPerK > b.nSatoshisPerK; | |||||
} | |||||
friend bool operator==(const CFeeRate &a, const CFeeRate &b) { | |||||
return a.nSatoshisPerK == b.nSatoshisPerK; | |||||
} | |||||
friend bool operator<=(const CFeeRate &a, const CFeeRate &b) { | |||||
return a.nSatoshisPerK <= b.nSatoshisPerK; | |||||
} | |||||
friend bool operator>=(const CFeeRate &a, const CFeeRate &b) { | |||||
return a.nSatoshisPerK >= b.nSatoshisPerK; | |||||
} | |||||
CFeeRate &operator+=(const CFeeRate &a) { | |||||
nSatoshisPerK += a.nSatoshisPerK; | |||||
return *this; | |||||
} | |||||
std::string ToString() const; | |||||
ADD_SERIALIZE_METHODS; | |||||
template <typename Stream, typename Operation> | |||||
inline void SerializationOp(Stream &s, Operation ser_action) { | |||||
READWRITE(nSatoshisPerK); | |||||
} | |||||
}; | |||||
#endif // BITCOIN_AMOUNT_H | #endif // BITCOIN_AMOUNT_H |