Remove the nType and nVersion as parameters to all serialization methods and functions. There is only one place where it's read and has an impact (in CAddress), and even there it does not impact any of the recursively invoked serializers. Instead, the few places that need nType or nVersion are changed to read it directly from the stream object, through GetType() and GetVersion() methods which are added to all stream classes.
65 lines
2.5 KiB
C++
65 lines
2.5 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_AMOUNT_H
|
|
#define BITCOIN_AMOUNT_H
|
|
|
|
#include "serialize.h"
|
|
|
|
#include <stdlib.h>
|
|
#include <string>
|
|
|
|
typedef int64_t CAmount;
|
|
|
|
static const CAmount COIN = 100000000;
|
|
static const CAmount CENT = 1000000;
|
|
|
|
extern const std::string CURRENCY_UNIT;
|
|
|
|
/** No amount larger than this (in satoshi) is valid.
|
|
*
|
|
* Note that this constant is *not* the total money supply, which in Bitcoin
|
|
* currently happens to be less than 21,000,000 BTC for various reasons, but
|
|
* rather a sanity check. As this sanity check is used by consensus-critical
|
|
* validation code, the exact value of the MAX_MONEY constant is consensus
|
|
* 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.
|
|
* */
|
|
static const CAmount MAX_MONEY = 21000000 * COIN;
|
|
inline bool MoneyRange(const CAmount& nValue) { return (nValue >= 0 && nValue <= MAX_MONEY); }
|
|
|
|
/** Type-safe wrapper class to for fee rates
|
|
* (how much to pay based on transaction size)
|
|
*/
|
|
class CFeeRate
|
|
{
|
|
private:
|
|
CAmount nSatoshisPerK; // unit is satoshis-per-1,000-bytes
|
|
public:
|
|
CFeeRate() : nSatoshisPerK(0) { }
|
|
explicit CFeeRate(const CAmount& _nSatoshisPerK): nSatoshisPerK(_nSatoshisPerK) { }
|
|
CFeeRate(const CAmount& nFeePaid, size_t nSize);
|
|
CFeeRate(const CFeeRate& other) { nSatoshisPerK = other.nSatoshisPerK; }
|
|
|
|
CAmount GetFee(size_t size) const; // unit returned is satoshis
|
|
CAmount GetFeePerK() const { return GetFee(1000); } // satoshis-per-1000-bytes
|
|
|
|
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; }
|
|
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
|