From 67df07193da8091d089735026171c26907701b15 Mon Sep 17 00:00:00 2001 From: Vivek Teegalapally Date: Tue, 7 Aug 2018 10:17:53 +0530 Subject: [PATCH] Cleaning --- .gitignore | 1 + electrumx/lib/tx.py | 152 ++++++++++++++++++++++---------------------- 2 files changed, 77 insertions(+), 76 deletions(-) diff --git a/.gitignore b/.gitignore index 0c1c264..72519f5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ docs/_build /build /dist /electrumx.egg-info +.idea/ \ No newline at end of file diff --git a/electrumx/lib/tx.py b/electrumx/lib/tx.py index 7a0fff5..c0b7056 100644 --- a/electrumx/lib/tx.py +++ b/electrumx/lib/tx.py @@ -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