def serialize(self, for_sig=None): inputs = self.inputs() outputs = self.outputs() s = int_to_hex(1, 4) # version s += var_int(len(inputs)) # number of inputs for i, txin in enumerate(inputs): s += self.serialize_input(txin, i, for_sig) s += var_int(len(outputs)) # number of outputs for output in outputs: output_type, addr, amount = output s += int_to_hex(amount, 8) # amount script = self.pay_script(output_type, addr) s += var_int(len(script) / 2) # script length s += script # script s += int_to_hex(0, 4) # lock time if for_sig is not None and for_sig != -1: s += int_to_hex(1, 4) # hash type return s
def serialize_input(cls, txin, i, for_sig): # Prev hash and index s = txin['prevout_hash'].decode('hex')[::-1].encode('hex') s += int_to_hex(txin['prevout_n'], 4) # Script length, script, sequence script = cls.input_script(txin, i, for_sig) s += var_int(len(script) / 2) s += script s += "ffffffff" return s
def msg_magic(message): varint = var_int(len(message)) encoded_varint = "".join( [chr(int(varint[i:i + 2], 16)) for i in xrange(0, len(varint), 2)]) return "\x18Bitcoin Signed Message:\n" + encoded_varint + message