This commit is contained in:
Vivek Teegalapally 2018-08-07 10:17:53 +05:30
parent d6c15d6ea2
commit 67df07193d
2 changed files with 77 additions and 76 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ docs/_build
/build
/dist
/electrumx.egg-info
.idea/

View File

@ -402,82 +402,6 @@ class DeserializerTxTimeAuxPow(DeserializerTxTime):
return self._read_nbytes(header_end)
class TxFlo(namedtuple("Tx", "version inputs outputs locktime txcomment")):
'''Class representing a transaction.'''
@cachedproperty
def is_coinbase(self):
return self.inputs[0].is_coinbase
class TxFloSegWit(namedtuple("Tx", "version marker flag inputs outputs "
"witness locktime txcomment")):
'''Class representing a SegWit transaction.'''
@cachedproperty
def is_coinbase(self):
return self.inputs[0].is_coinbase
class DeserializerFlo(DeserializerSegWit):
# https://bitcoincore.org/en/segwit_wallet_dev/#transaction-serialization
def _read_tx(self):
'''Return a deserialized transaction.'''
version = self._read_le_int32()
inputs = self._read_inputs()
outputs = self._read_outputs()
locktime = self._read_le_uint32()
if version >= 2:
comment = self._read_varbytes()
else:
comment = ""
return TxFlo(version, inputs, outputs, locktime, comment)
def _read_tx_parts(self):
'''Return a (deserialized TX, tx_hash, vsize) tuple.'''
start = self.cursor
marker = self.binary[self.cursor + 4]
if marker:
tx = self._read_tx()
tx_hash = double_sha256(self.binary[start:self.cursor])
return tx, tx_hash, self.binary_length
# Ugh, this is nasty.
version = self._read_le_int32()
orig_ser = self.binary[start:self.cursor]
marker = self._read_byte()
flag = self._read_byte()
start = self.cursor
inputs = self._read_inputs()
outputs = self._read_outputs()
orig_ser += self.binary[start:self.cursor]
base_size = self.cursor - start
witness = self._read_witness(len(inputs))
start = self.cursor
locktime = self._read_le_uint32()
# FLO ->
if version >= 2:
tx_comment = self._read_varbytes()
else:
tx_comment = ""
# <- FLO
orig_ser += self.binary[start:self.cursor]
vsize = (3 * base_size + self.binary_length) // 4
return TxFloSegWit(version, marker, flag, inputs, outputs, witness,
locktime, tx_comment), double_sha256(orig_ser), vsize
class DeserializerBitcoinAtom(DeserializerSegWit):
FORK_BLOCK_HEIGHT = 505888
@ -589,3 +513,79 @@ class DeserializerDecred(Deserializer):
expiry,
witness
), DeserializerDecred.blake256(no_witness_tx)
class TxFlo(namedtuple("Tx", "version inputs outputs locktime txcomment")):
'''Class representing a transaction.'''
@cachedproperty
def is_coinbase(self):
return self.inputs[0].is_coinbase
class TxFloSegWit(namedtuple("Tx", "version marker flag inputs outputs "
"witness locktime txcomment")):
'''Class representing a SegWit transaction.'''
@cachedproperty
def is_coinbase(self):
return self.inputs[0].is_coinbase
class DeserializerFlo(DeserializerSegWit):
# https://bitcoincore.org/en/segwit_wallet_dev/#transaction-serialization
def _read_tx(self):
'''Return a deserialized transaction.'''
version = self._read_le_int32()
inputs = self._read_inputs()
outputs = self._read_outputs()
locktime = self._read_le_uint32()
if version >= 2:
comment = self._read_varbytes()
else:
comment = ""
return TxFlo(version, inputs, outputs, locktime, comment)
def _read_tx_parts(self):
'''Return a (deserialized TX, tx_hash, vsize) tuple.'''
start = self.cursor
marker = self.binary[self.cursor + 4]
if marker:
tx = self._read_tx()
tx_hash = double_sha256(self.binary[start:self.cursor])
return tx, tx_hash, self.binary_length
# Ugh, this is nasty.
version = self._read_le_int32()
orig_ser = self.binary[start:self.cursor]
marker = self._read_byte()
flag = self._read_byte()
start = self.cursor
inputs = self._read_inputs()
outputs = self._read_outputs()
orig_ser += self.binary[start:self.cursor]
base_size = self.cursor - start
witness = self._read_witness(len(inputs))
start = self.cursor
locktime = self._read_le_uint32()
# FLO ->
if version >= 2:
tx_comment = self._read_varbytes()
else:
tx_comment = ""
# <- FLO
orig_ser += self.binary[start:self.cursor]
vsize = (3 * base_size + self.binary_length) // 4
return TxFloSegWit(version, marker, flag, inputs, outputs, witness,
locktime, tx_comment), double_sha256(orig_ser), vsize