ZEC electrum crashes with AssertionError after ZEC hardfork was activated
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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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