Set sequence to MAXINT-1 to fix locktime (per bauerj)

This commit is contained in:
ThomasV 2017-05-23 15:07:20 +02:00
parent 1ee70f798e
commit d4e8f4beb6
1 changed files with 5 additions and 5 deletions

View File

@ -686,11 +686,11 @@ class Transaction:
# Script length, script, sequence # Script length, script, sequence
s += var_int(len(script)/2) s += var_int(len(script)/2)
s += script s += script
s += int_to_hex(txin.get('sequence', 0xffffffff), 4) s += int_to_hex(txin.get('sequence', 0xffffffff - 1), 4)
return s return s
def set_rbf(self, rbf): def set_rbf(self, rbf):
nSequence = 0xffffffff - (2 if rbf else 0) nSequence = 0xffffffff - (2 if rbf else 1)
for txin in self.inputs(): for txin in self.inputs():
txin['sequence'] = nSequence txin['sequence'] = nSequence
@ -716,12 +716,12 @@ class Transaction:
txin = inputs[i] txin = inputs[i]
if self.is_segwit_input(txin): if self.is_segwit_input(txin):
hashPrevouts = Hash(''.join(self.serialize_outpoint(txin) for txin in inputs).decode('hex')).encode('hex') hashPrevouts = Hash(''.join(self.serialize_outpoint(txin) for txin in inputs).decode('hex')).encode('hex')
hashSequence = Hash(''.join(int_to_hex(txin.get('sequence', 0xffffffff), 4) for txin in inputs).decode('hex')).encode('hex') hashSequence = Hash(''.join(int_to_hex(txin.get('sequence', 0xffffffff - 1), 4) for txin in inputs).decode('hex')).encode('hex')
hashOutputs = Hash(''.join(self.serialize_output(o) for o in outputs).decode('hex')).encode('hex') hashOutputs = Hash(''.join(self.serialize_output(o) for o in outputs).decode('hex')).encode('hex')
outpoint = self.serialize_outpoint(txin) outpoint = self.serialize_outpoint(txin)
scriptCode = push_script(self.get_preimage_script(txin)) scriptCode = push_script(self.get_preimage_script(txin))
amount = int_to_hex(txin['value'], 8) amount = int_to_hex(txin['value'], 8)
nSequence = int_to_hex(txin.get('sequence', 0xffffffff), 4) nSequence = int_to_hex(txin.get('sequence', 0xffffffff - 1), 4)
preimage = nVersion + hashPrevouts + hashSequence + outpoint + scriptCode + amount + nSequence + hashOutputs + nLocktime + nHashType preimage = nVersion + hashPrevouts + hashSequence + outpoint + scriptCode + amount + nSequence + hashOutputs + nLocktime + nHashType
else: else:
txins = var_int(len(inputs)) + ''.join(self.serialize_input(txin, self.get_preimage_script(txin) if i==k else '') for k, txin in enumerate(inputs)) txins = var_int(len(inputs)) + ''.join(self.serialize_input(txin, self.get_preimage_script(txin) if i==k else '') for k, txin in enumerate(inputs))
@ -780,7 +780,7 @@ class Transaction:
return self.input_value() - self.output_value() return self.input_value() - self.output_value()
def is_final(self): def is_final(self):
return not any([x.get('sequence', 0xffffffff) < 0xffffffff - 1 for x in self.inputs()]) return not any([x.get('sequence', 0xffffffff - 1) < 0xffffffff - 1 for x in self.inputs()])
@profiler @profiler
def estimated_size(self): def estimated_size(self):