Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
BinaryData TransactionVerifier::serializeAllOutpoints() const
{
   BinaryWriter bw;
   for (unsigned i = 0; i < theTx_.txins_.size(); i++)
      bw.put_BinaryDataRef(getOutpoint(i));

   return bw.getData();
}
Ejemplo n.º 3
0
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();
}