Create DESERIALIZER for EverGreenCoin to override tx parsing.
Issue #2
new
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