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(); }
BinaryData TransactionVerifier::serializeAllOutpoints() const { BinaryWriter bw; for (unsigned i = 0; i < theTx_.txins_.size(); i++) bw.put_BinaryDataRef(getOutpoint(i)); return bw.getData(); }
BinaryData TransactionVerifier::serializeAllSequences() const { BinaryWriter bw; for (auto& txinOnS : theTx_.txins_) { auto sequenceOffset = txinOnS.first + txinOnS.second - 4; BinaryDataRef bdr(theTx_.data_ + sequenceOffset, 4); bw.put_BinaryDataRef(bdr); } return bw.getData(); }