5 #ifndef BITCOIN_BLOCK_ENCODINGS_H
6 #define BITCOIN_BLOCK_ENCODINGS_H
23 template <
typename Stream,
typename Operation>
37 template <
typename Stream,
typename Operation>
40 uint64_t indexes_size = (uint64_t)
indexes.size();
42 if (ser_action.ForRead()) {
44 while (
indexes.size() < indexes_size) {
45 indexes.resize(std::min((uint64_t)(1000 +
indexes.size()), indexes_size));
46 for (; i <
indexes.size(); i++) {
49 if (index > std::numeric_limits<uint16_t>::max())
50 throw std::ios_base::failure(
"index overflowed 16 bits");
56 for (
size_t j = 0; j <
indexes.size(); j++) {
57 if (uint64_t(
indexes[j]) + uint64_t(offset) > std::numeric_limits<uint16_t>::max())
58 throw std::ios_base::failure(
"indexes overflowed 16 bits");
63 for (
size_t i = 0; i <
indexes.size(); i++) {
75 std::vector<CTransactionRef>
txn;
83 template <
typename Stream,
typename Operation>
86 uint64_t txn_size = (uint64_t)
txn.size();
88 if (ser_action.ForRead()) {
90 while (
txn.size() < txn_size) {
91 txn.resize(std::min((uint64_t)(1000 +
txn.size()), txn_size));
92 for (; i <
txn.size(); i++)
96 for (
size_t i = 0; i <
txn.size(); i++)
111 template <
typename Stream,
typename Operation>
113 uint64_t idx =
index;
115 if (idx > std::numeric_limits<uint16_t>::max())
116 throw std::ios_base::failure(
"index overflowed 16-bits");
159 template <
typename Stream,
typename Operation>
164 uint64_t shorttxids_size = (uint64_t)
shorttxids.size();
166 if (ser_action.ForRead()) {
171 uint32_t lsb = 0; uint16_t msb = 0;
174 shorttxids[i] = (uint64_t(msb) << 32) | uint64_t(lsb);
175 static_assert(
SHORTTXIDS_LENGTH == 6,
"shorttxids serialization assumes 6-byte shorttxids");
179 for (
size_t i = 0; i <
shorttxids.size(); i++) {
181 uint16_t msb = (
shorttxids[i] >> 32) & 0xffff;
189 if (ser_action.ForRead())
@ READ_STATUS_CHECKBLOCK_FAILED
enum ReadStatus_t ReadStatus
std::vector< CTransactionRef > txn
BlockTransactions(const BlockTransactionsRequest &req)
void SerializationOp(Stream &s, Operation ser_action)
void SerializationOp(Stream &s, Operation ser_action)
std::vector< uint16_t > indexes
void SerializationOp(Stream &s, Operation ser_action)
size_t BlockTxCount() const
void FillShortTxIDSelector() const
CBlockHeaderAndShortTxIDs()
std::vector< PrefilledTransaction > prefilledtxn
uint64_t GetShortID(const uint256 &txhash) const
std::vector< uint64_t > shorttxids
static const int SHORTTXIDS_LENGTH
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
ReadStatus InitData(const CBlockHeaderAndShortTxIDs &cmpctblock, const std::vector< std::pair< uint256, CTransactionRef >> &extra_txn)
PartiallyDownloadedBlock(CTxMemPool *poolIn)
std::vector< CTransactionRef > txn_available
bool IsTxAvailable(size_t index) const
ReadStatus FillBlock(CBlock &block, const std::vector< CTransactionRef > &vtx_missing)
T & REF(const T &val)
Used to bypass the rule against non-const reference to temporary where it makes sense with wrappers s...
void SerializationOp(Stream &s, Operation ser_action)
TransactionCompressor(CTransactionRef &txIn)
void SerializationOp(Stream &s, Operation ser_action)
std::shared_ptr< const CTransaction > CTransactionRef