void LedgerEntryVector::serialize(BinaryWriter& bw) const { bw.put_uint8_t(LEDGERENTRYVECTOR_CODE); bw.put_var_int(leVec_.size()); for (auto& le : leVec_) { auto idSize = le.ID_.size(); size_t totalsize = idSize + 53; bw.put_var_int(totalsize); bw.put_var_int(idSize); bw.put_BinaryData((uint8_t*)le.ID_.c_str(), idSize); bw.put_uint64_t(le.value_); bw.put_uint32_t(le.blockNum_); bw.put_BinaryData(le.txHash_); bw.put_uint32_t(le.index_); bw.put_uint32_t(le.txTime_); BitPacker<uint8_t> bp; bp.putBit(le.isCoinbase_); bp.putBit(le.isSentToSelf_); bp.putBit(le.isChangeBack_); bp.putBit(le.optInRBF_); bw.put_BitPacker(bp); } }
void TxIOPair::serializeDbValue(BinaryWriter& bw) const { uint8_t sersize = 17; //bit pack + amount + txout key if (hasTxIn()) sersize += 8; bw.put_uint8_t(sersize); BitPacker<uint8_t> bitpacker; bitpacker.putBit(isTxOutFromSelf_); bitpacker.putBit(isFromCoinbase_); bitpacker.putBit(hasTxIn()); bitpacker.putBit(isMultisig_); bitpacker.putBit(isUTXO_); bitpacker.putBit(isFromSameBlock_); bw.put_BitPacker(bitpacker); bw.put_uint64_t(amount_); bw.put_BinaryData(getDBKeyOfOutput()); if (hasTxIn()) { bw.put_BinaryData(getDBKeyOfInput()); } }