5 #ifndef BITCOIN_BLOCKENCODINGS_H 6 #define BITCOIN_BLOCKENCODINGS_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())
209 #endif // BITCOIN_BLOCKENCODINGS_H enum ReadStatus_t ReadStatus
CBlockHeaderAndShortTxIDs()
ReadStatus FillBlock(CBlock &block, const std::vector< CTransactionRef > &vtx_missing)
uint64_t GetShortID(const uint256 &txhash) const
std::vector< uint16_t > indexes
std::vector< CTransactionRef > txn_available
static const int SHORTTXIDS_LENGTH
BlockTransactions(const BlockTransactionsRequest &req)
void FillShortTxIDSelector() const
PartiallyDownloadedBlock(CTxMemPool *poolIn)
std::shared_ptr< const CTransaction > CTransactionRef
void SerializationOp(Stream &s, Operation ser_action)
TransactionCompressor(CTransactionRef &txIn)
std::vector< CTransactionRef > txn
void SerializationOp(Stream &s, Operation ser_action)
void SerializationOp(Stream &s, Operation ser_action)
void SerializationOp(Stream &s, Operation ser_action)
void SerializationOp(Stream &s, Operation ser_action)
std::vector< uint64_t > shorttxids
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
std::vector< PrefilledTransaction > prefilledtxn
bool IsTxAvailable(size_t index) const
ReadStatus InitData(const CBlockHeaderAndShortTxIDs &cmpctblock, const std::vector< std::pair< uint256, CTransactionRef >> &extra_txn)
size_t BlockTxCount() const