Adding a new class FLO in coins.py and writing new functions in tx.py to deserialize FLO's transactions

This commit is contained in:
Vivek Teegalapally 2018-07-11 19:58:10 +05:30
parent 71b3d30842
commit acba52786c
2 changed files with 96 additions and 1 deletions

View File

@ -1897,3 +1897,22 @@ class Monoeci(Coin):
'''Given a header return the hash.'''
import x11_hash
return x11_hash.getPoWHash(header)
class Flo(Coin):
NAME = "Flo"
SHORTNAME = "FLO"
NET = "mainnet"
XPUB_VERBYTES = bytes.fromhex("0134406b")
XPRV_VERBYTES = bytes.fromhex("01343c31")
P2PKH_VERBYTE = bytes.fromhex("23")
P2SH_VERBYTES = [bytes.fromhex("08")]
WIF_BYTE = bytes.fromhex("b0")
GENESIS_HASH = ('09c7781c9df90708e278c35d38ea5c9041d7ecfcdd1c56ba67274b7cff3e1cea')
TX_COUNT = 8908766
TX_COUNT_HEIGHT = 1105256
TX_PER_BLOCK = 10
RPC_PORT = 7313
REORG_LIMIT = 800
PEERS = [
]
DESERIALIZER = lib_tx.DeserializerFlo

View File

@ -402,6 +402,82 @@ 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
@ -503,7 +579,7 @@ class DeserializerDecred(Deserializer):
outputs = self._read_outputs()
locktime = self._read_le_uint32()
expiry = self._read_le_uint32()
no_witness_tx = b'\x01\x00\x01\x00' + self.binary[start+4:self.cursor]
no_witness_tx = b'\x01\x00\x01\x00' + self.binary[start + 4:self.cursor]
witness = self._read_witness(len(inputs))
return TxDcr(
version,