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()); } }
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); } }
BinaryData SigHashDataSegWit::getDataForSigHashAll(const TransactionStub& stub, BinaryDataRef subScript, unsigned inputIndex) { //grab subscript auto lastCSoffset = stub.getLastCodeSeparatorOffset(inputIndex); auto subScriptLen = subScript.getSize() - lastCSoffset; auto&& subscript = subScript.getSliceRef(lastCSoffset, subScriptLen); //pre state computePreState(stub); //serialize hashdata BinaryWriter hashdata; //version hashdata.put_uint32_t(stub.getVersion()); //hashPrevouts hashdata.put_BinaryData(hashPrevouts_); //hashSequence hashdata.put_BinaryData(hashSequence_); //outpoint hashdata.put_BinaryDataRef(stub.getOutpoint(inputIndex)); //script code hashdata.put_uint8_t(subScriptLen); hashdata.put_BinaryDataRef(subscript); //value hashdata.put_uint64_t(stub.getOutpointValue(inputIndex)); //sequence hashdata.put_uint32_t(stub.getTxInSequence(inputIndex)); //hashOutputs hashdata.put_BinaryData(hashOutputs_); //nLocktime hashdata.put_uint32_t(stub.getLockTime()); //sighash type hashdata.put_uint32_t(1); return hashdata.getData(); }