spesmilo / spesmilo/electrumx

ZEC electrum crashes with AssertionError after ZEC hardfork was activated

Open
#181 10 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
568
Forks
447
PR merge metrics
No merged PRs in 30d

Description

this is the error

May 31 17:48:10 electrum1 electrumx_server[1507364]: INFO:Prefetcher:new block height 1,687,103 hash 000000000162bdf56998ca7703adad22cdce21252f6354c077e82ccf434e761f
May 31 17:48:10 electrum1 electrumx_server[1507364]: INFO:DB:flush #338 took 0.0s.  Height 1,687,103 txs: 10,569,143 (+1)
May 31 17:48:10 electrum1 electrumx_server[1507364]: INFO:BlockProcessor:processed 1 block size 0.00 MB in 0.0s
May 31 17:48:37 electrum1 electrumx_server[1507364]: INFO:MemPool:0 txs 0.00 MB touching 0 addresses
May 31 17:48:47 electrum1 electrumx_server[1507364]: INFO:ElectrumX:[261] TCP 88.155.42.59:58420, 44 total
May 31 17:49:29 electrum1 electrumx_server[1507364]: INFO:ElectrumX:[262] TCP 91.232.29.13:52390, 44 total
May 31 17:49:37 electrum1 electrumx_server[1507364]: INFO:MemPool:0 txs 0.00 MB touching 0 addresses
May 31 17:50:07 electrum1 electrumx_server[1507364]: INFO:Prefetcher:cancelled; prefetcher stopping
May 31 17:50:07 electrum1 electrumx_server[1507364]: INFO:BlockProcessor:flushing to DB for a clean shutdown...
May 31 17:50:07 electrum1 electrumx_server[1507364]: INFO:SessionManager:closing down server for ssl://all_interfaces:20058
May 31 17:50:07 electrum1 electrumx_server[1507364]: INFO:SessionManager:closing down server for tcp://all_interfaces:10058
May 31 17:50:07 electrum1 electrumx_server[1507364]: INFO:SessionManager:closing down server for rpc://localhost:8058
May 31 17:50:07 electrum1 electrumx_server[1507364]: INFO:SessionManager:closing down server for wss://all_interfaces:30058
May 31 17:50:08 electrum1 electrumx_server[1507364]: INFO:Controller:shutting down
May 31 17:50:08 electrum1 electrumx_server[1507364]: INFO:Controller:shutdown complete
May 31 17:50:08 electrum1 electrumx_server[1507364]: ERROR:electrumx:ElectrumX server terminated abnormally
May 31 17:50:08 electrum1 electrumx_server[1507364]: Traceback (most recent call last):
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/bin/electrumx_server", line 35, in main
May 31 17:50:08 electrum1 electrumx_server[1507364]:     asyncio.run(controller.run())
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/lib/python3.9/asyncio/runners.py", line 44, in run
May 31 17:50:08 electrum1 electrumx_server[1507364]:     return loop.run_until_complete(main)
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "uvloop/loop.pyx", line 1501, in uvloop.loop.Loop.run_until_complete
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/server_base.py", line 129, in run
May 31 17:50:08 electrum1 electrumx_server[1507364]:     await server_task
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/server_base.py", line 102, in serve
May 31 17:50:08 electrum1 electrumx_server[1507364]:     await self.serve(shutdown_event)
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/server/controller.py", line 134, in serve
May 31 17:50:08 electrum1 electrumx_server[1507364]:     await group.spawn(wait_for_catchup())
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/aiorpcx/curio.py", line 297, in __aexit__
May 31 17:50:08 electrum1 electrumx_server[1507364]:     await self.join()
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/util.py", line 370, in join
May 31 17:50:08 electrum1 electrumx_server[1507364]:     task.result()
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/server/mempool.py", line 368, in keep_synchronized
May 31 17:50:08 electrum1 electrumx_server[1507364]:     await group.spawn(self._logging(synchronized_event))
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/aiorpcx/curio.py", line 297, in __aexit__
May 31 17:50:08 electrum1 electrumx_server[1507364]:     await self.join()
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/util.py", line 370, in join
May 31 17:50:08 electrum1 electrumx_server[1507364]:     task.result()
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/server/mempool.py", line 257, in _refresh_hashes
May 31 17:50:08 electrum1 electrumx_server[1507364]:     await self._process_mempool(hashes, touched, height)
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/server/mempool.py", line 301, in _process_mempool
May 31 17:50:08 electrum1 electrumx_server[1507364]:     deferred, unspent = task.result()
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/server/mempool.py", line 344, in _fetch_and_accept
May 31 17:50:08 electrum1 electrumx_server[1507364]:     tx_map = await run_in_thread(deserialize_txs)
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/aiorpcx/curio.py", line 57, in run_in_thread
May 31 17:50:08 electrum1 electrumx_server[1507364]:     return await get_event_loop().run_in_executor(None, func, *args)
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/lib/python3.9/concurrent/futures/thread.py", line 52, in run
May 31 17:50:08 electrum1 electrumx_server[1507364]:     result = self.fn(*self.args, **self.kwargs)
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/server/mempool.py", line 331, in deserialize_txs
May 31 17:50:08 electrum1 electrumx_server[1507364]:     tx, tx_size = deserializer(raw_tx).read_tx_and_vsize()
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/tx.py", line 146, in read_tx_and_vsize
May 31 17:50:08 electrum1 electrumx_server[1507364]:     return self.read_tx(), self.binary_length
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/tx.py", line 388, in read_tx
May 31 17:50:08 electrum1 electrumx_server[1507364]:     self._read_inputs(),    # inputs
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/tx.py", line 156, in _read_inputs
May 31 17:50:08 electrum1 electrumx_server[1507364]:     return [read_input() for i in range(self._read_varint())]
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/tx.py", line 156, in <listcomp>
May 31 17:50:08 electrum1 electrumx_server[1507364]:     return [read_input() for i in range(self._read_varint())]
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/tx.py", line 162, in _read_input
May 31 17:50:08 electrum1 electrumx_server[1507364]:     self._read_varbytes(),   # script
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/tx.py", line 188, in _read_varbytes
May 31 17:50:08 electrum1 electrumx_server[1507364]:     return self._read_nbytes(self._read_varint())
May 31 17:50:08 electrum1 electrumx_server[1507364]:   File "/usr/local/lib/python3.9/dist-packages/electrumx/lib/tx.py", line 184, in _read_nbytes
May 31 17:50:08 electrum1 electrumx_server[1507364]:     assert self.binary_length >= end
May 31 17:50:08 electrum1 electrumx_server[1507364]: AssertionError

same error after restart, the last block that worked was INFO:DB:height: 1,687,103

hardfork was Activated at block 1687104, mined May 31, 2022 18:12 UTC+00:00 as of https://z.cash/upgrade/nu5/

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with electrumx/server/mempool.py, where _process_mempool calls _fetch_and_accept and deserializes transactions, then inspect electrumx/lib/tx.py around read_tx, _read_inputs, and _read_nbytes. Reproduce the failure at block 1,687,104 or with the affected transaction format, and consider the issue done when the server processes those transactions without the AssertionError.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.