|
|
|
@ -3,9 +3,10 @@
@@ -3,9 +3,10 @@
|
|
|
|
|
// Distributed under the MIT software license, see the accompanying
|
|
|
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
|
|
|
|
|
|
#ifndef H_BITCOIN_SCRIPT_COMPRESSOR |
|
|
|
|
#define H_BITCOIN_SCRIPT_COMPRESSOR |
|
|
|
|
#ifndef H_BITCOIN_COMPRESSOR |
|
|
|
|
#define H_BITCOIN_COMPRESSOR |
|
|
|
|
|
|
|
|
|
#include "core/transaction.h" |
|
|
|
|
#include "script/script.h" |
|
|
|
|
#include "serialize.h" |
|
|
|
|
|
|
|
|
@ -86,4 +87,33 @@ public:
@@ -86,4 +87,33 @@ public:
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#endif // H_BITCOIN_SCRIPT_COMPRESSOR
|
|
|
|
|
/** wrapper for CTxOut that provides a more compact serialization */ |
|
|
|
|
class CTxOutCompressor |
|
|
|
|
{ |
|
|
|
|
private: |
|
|
|
|
CTxOut &txout; |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
static uint64_t CompressAmount(uint64_t nAmount); |
|
|
|
|
static uint64_t DecompressAmount(uint64_t nAmount); |
|
|
|
|
|
|
|
|
|
CTxOutCompressor(CTxOut &txoutIn) : txout(txoutIn) { } |
|
|
|
|
|
|
|
|
|
ADD_SERIALIZE_METHODS; |
|
|
|
|
|
|
|
|
|
template <typename Stream, typename Operation> |
|
|
|
|
inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { |
|
|
|
|
if (!ser_action.ForRead()) { |
|
|
|
|
uint64_t nVal = CompressAmount(txout.nValue); |
|
|
|
|
READWRITE(VARINT(nVal)); |
|
|
|
|
} else { |
|
|
|
|
uint64_t nVal = 0; |
|
|
|
|
READWRITE(VARINT(nVal)); |
|
|
|
|
txout.nValue = DecompressAmount(nVal); |
|
|
|
|
} |
|
|
|
|
CScriptCompressor cscript(REF(txout.scriptPubKey)); |
|
|
|
|
READWRITE(cscript); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
#endif // H_BITCOIN_COMPRESSOR
|