Create DESERIALIZER for EverGreenCoin to override tx parsing.

Issue #2 new
arfonzo repo owner created an issue

Currently we're getting an AssertionError with _read_nbytes() in /lib/tx.py.

Refer to this link for Florincoin: https://github.com/kyuupichan/electrumx/issues/334

Notes: * EGC uses a comment field that we need to parse or skip through. * Implement our own deserializer for Coin.EvergreenCoin subclass. * The current console errors when running the ex4egc:

Starting ElectrumX for EGC...
INFO:root:ElectrumX server starting
WARNING:Env:lowered maximum sessions from 1,000 to 674 because your open file limit is 1,024
INFO:Controller:event loop policy: None
INFO:LegacyRPCDaemon:daemon #1 at localhost:5758/ (current)
INFO:BlockProcessor:switching current directory to /home/art/.electrumx4egc/
INFO:BlockProcessor:using leveldb for DB backend
INFO:BlockProcessor:created new database
INFO:BlockProcessor:creating metadata directory
INFO:BlockProcessor:software version: ElectrumX 1.2.1
INFO:BlockProcessor:DB version: 6
INFO:BlockProcessor:coin: EverGreenCoin
INFO:BlockProcessor:network: mainnet
INFO:BlockProcessor:height: -1
INFO:BlockProcessor:tip: 0000000000000000000000000000000000000000000000000000000000000000
INFO:BlockProcessor:tx count: 0
INFO:BlockProcessor:flush count: 0
INFO:BlockProcessor:sync time so far: 00s
INFO:BlockProcessor:reorg limit is 5,000 blocks
INFO:BlockProcessor:flushing DB cache at 1,800 MB
INFO:PeerManager:accepted new peer 1/1 electrum.poorcoding.com from env
INFO:Controller:RPC server listening on localhost:8001
INFO:Prefetcher:catching up to daemon height 1,038,514 (1,038,515 blocks behind)
INFO:Prefetcher:verified genesis block with hash 00000a02cefbc063ba09034a6fbc123f7062b7ee0e4eed9128a1cadc7533e388
ERROR:Controller:Traceback (most recent call last):
  File "/home/art/src/electrumx4egc/server/controller.py", line 176, in on_future_done
    future.result()
  File "/home/art/src/electrumx4egc/server/block_processor.py", line 206, in main_loop
    await task()
  File "/home/art/src/electrumx4egc/server/block_processor.py", line 243, in check_and_advance_blocks
    for n, raw_block in enumerate(raw_blocks)]
  File "/home/art/src/electrumx4egc/server/block_processor.py", line 243, in <listcomp>
    for n, raw_block in enumerate(raw_blocks)]
  File "/home/art/src/electrumx4egc/lib/coins.py", line 272, in block
    txs = cls.DESERIALIZER(raw_block, start=len(header)).read_tx_block()
  File "/home/art/src/electrumx4egc/lib/tx.py", line 113, in read_tx_block
    return [read() for _ in range(self._read_varint())]
  File "/home/art/src/electrumx4egc/lib/tx.py", line 113, in <listcomp>
    return [read() for _ in range(self._read_varint())]
  File "/home/art/src/electrumx4egc/lib/tx.py", line 245, in read_tx_and_hash
    tx, tx_hash, vsize = self._read_tx_parts()
  File "/home/art/src/electrumx4egc/lib/tx.py", line 214, in _read_tx_parts
    tx = super().read_tx()
  File "/home/art/src/electrumx4egc/lib/tx.py", line 91, in read_tx
    self._read_inputs(),    # inputs
  File "/home/art/src/electrumx4egc/lib/tx.py", line 117, in _read_inputs
    return [read_input() for i in range(self._read_varint())]
  File "/home/art/src/electrumx4egc/lib/tx.py", line 117, in <listcomp>
    return [read_input() for i in range(self._read_varint())]
  File "/home/art/src/electrumx4egc/lib/tx.py", line 123, in _read_input
    self._read_varbytes(),   # script
  File "/home/art/src/electrumx4egc/lib/tx.py", line 149, in _read_varbytes
    return self._read_nbytes(self._read_varint())
  File "/home/art/src/electrumx4egc/lib/tx.py", line 145, in _read_nbytes
    assert self.binary_length >= end
AssertionError

Comments (0)

  1. Log in to comment