def SignatureHashForkId(script, txTo, inIdx, hashtype, amount): hashPrevouts = None hashSequence = None hashOutputs = None if not (hashtype & SIGHASH_ANYONECANPAY): serialize_prevouts = bytes() for i in txTo.vin: serialize_prevouts += i.prevout.serialize() hashPrevouts = bitcoin.core.Hash(serialize_prevouts) # uint256_from_str(hash256(serialize_prevouts)) if (not (hashtype & SIGHASH_ANYONECANPAY) and (hashtype & 0x1f) != SIGHASH_SINGLE and (hashtype & 0x1f) != SIGHASH_NONE): serialize_sequence = bytes() for i in txTo.vin: serialize_sequence += struct.pack("<I", i.nSequence) hashSequence = bitcoin.core.Hash(serialize_sequence) # uint256_from_str(hash256(serialize_sequence)) if ((hashtype & 0x1f) != SIGHASH_SINGLE and (hashtype & 0x1f) != SIGHASH_NONE): serialize_outputs = bytes() for o in txTo.vout: serialize_outputs += o.serialize() hashOutputs = bitcoin.core.Hash(serialize_outputs) elif ((hashtype & 0x1f) == SIGHASH_SINGLE and inIdx < len(txTo.vout)): serialize_outputs = txTo.vout[inIdx].serialize() hashOutputs = bitcoin.core.Hash(serialize_outputs) ss = bytes() ss += struct.pack("<i", txTo.nVersion) ss += hashPrevouts ss += hashSequence ss += txTo.vin[inIdx].prevout.serialize() ss += ( VarIntSerializer.serialize(len(script)) + script ) ss += struct.pack("<q", amount) ss += struct.pack("<I", txTo.vin[inIdx].nSequence) ss += hashOutputs ss += struct.pack("<i", txTo.nLockTime) ss += struct.pack("<I", hashtype) return bitcoin.core.Hash(ss)