romanz / electrs

An efficient re-implementation of Electrum Server in Rust
MIT License
1.02k stars 373 forks source link

Bug: electrs p2p disconnects on "Broken pipe (os error 32)" and exits #1011

Open iyusaf opened 4 months ago

iyusaf commented 4 months ago

Describe the bug electrs fails on p2p disconnects running against Satoshi:26.0.0 on Debian bullseye with "Broken pipe (os error 32)".

Electrs version electrs v0.10.3

To Reproduce Steps to reproduce the behavior:

  1. Configure and start electrs
  2. Connect with Sparrow wallet via SSH tunnel
  3. Explore wallet addresses
  4. See error

Expected behavior electrs should not exit.

Configuration

electrs.service ``` [Unit] Description=Electrs After=bitcoind.service [Service] WorkingDirectory=/home/bitcoin/.electrs ExecStart=/usr/local/bin/electrs --log-filters WARN --db-dir ./db --electrum-rpc-addr="127.0.0.1:50001" User=bitcoin Group=bitcoin Type=simple KillMode=process TimeoutSec=60 Restart=always RestartSec=60 Environment="RUST_BACKTRACE=1" # Hardening measures PrivateTmp=true ProtectSystem=full NoNewPrivileges=true MemoryDenyWriteExecute=true [Install] WantedBy=multi-user.target ```
electrs error log ``` Feb 28 07:01:35 zeus systemd[1]: Started Electrs. Feb 28 07:01:35 zeus electrs[3058]: Starting electrs 0.10.3 on x86_64 linux with Config { network: Bitcoin, db_path: "./db/bitcoin", db_log_dir: None, daemon_dir: "/home/bitcoin/.bitcoin", daemon_auth: CookieFile("/home/bitcoin/.bitcoin/.cookie"), daemon_rpc_addr: 127.0.0.1:8332, daemon_p2p_addr: 127.0.0.1:8333, electrum_rpc_addr: 127.0.0.1:50001, monitoring_addr: 127.0.0.1:4224, wait_duration: 10s, jsonrpc_timeout: 15s, index_batch_size: 10, index_lookup_limit: None, reindex_last_blocks: 0, auto_reindex: true, ignore_mempool: false, sync_once: false, skip_block_download_wait: false, disable_electrum_rpc: false, server_banner: "Welcome to electrs 0.10.3 (Electrum Rust Server)!", signet_magic: f9beb4d9, args: [] } Feb 28 07:04:35 zeus electrs[3058]: [2024-02-28T12:04:35.317Z WARN electrs::thread] p2p_send thread failed: p2p failed to send Feb 28 07:04:35 zeus electrs[3058]: [2024-02-28T12:04:35.317Z WARN electrs::thread] because: Broken pipe (os error 32) Feb 28 07:04:35 zeus electrs[3058]: [2024-02-28T12:04:35.317Z WARN electrs::electrum] RPC blockchain.scripthash.get_history failed: failed to get block 000000000000000000083b1f4b5bdc0a589f7637ad6de6f578ddbb1cbe21bc92: receiving on an empty and disconnected channel Feb 28 07:04:35 zeus electrs[3058]: Error: electrs failed Feb 28 07:04:35 zeus electrs[3058]: Caused by: Feb 28 07:04:35 zeus electrs[3058]: 0: sync failed Feb 28 07:04:35 zeus electrs[3058]: 1: sending on a disconnected channel Feb 28 07:04:35 zeus systemd[1]: electrs.service: Main process exited, code=exited, status=1/FAILURE Feb 28 07:04:35 zeus systemd[1]: electrs.service: Failed with result 'exit-code'. Feb 28 07:04:35 zeus systemd[1]: electrs.service: Consumed 20.130s CPU time. ```
bitcoin.conf ``` rpcauth=XXX [main] rpcbind=127.0.0.1 rpcbind=X.X.X.X rpcallowip=127.0.0.1 rpcallowip=X.X.X.0/24 ## Whitelisting is intended for 'electrs' whitelist=download@127.0.0.1 whitelist=download@X.X.X.X ```

Environment variables: N/A Arguments: see above

System running electrs

Electrum client Sparrow on macOS Sonoma 14.2.1

Additional context Sparrow is connecting via SSH tunnel. Trace file is attached. Apologies for the large file. problem.log

Many thanks for your help. Cheers!