Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Troubleshooting

Common errors people hit when first running an Exfer node, and what to do.

"Address already in use"

ERROR exfer: FATAL: P2P listener failed on 0.0.0.0:9333: Address already in use (os error 98)

Something else is on port 9333. Either:

  1. Another exfer instance is already running. Stop it:
    sudo systemctl stop exfer
    pgrep -af exfer
    
  2. Another program owns the port. Identify it:
    sudo ss -ltnp | grep 9333
    
  3. Pick a different port for this instance:
    exfer node --bind 0.0.0.0:19333
    
    Note that peers reach you on whatever port you bind. For inbound P2P connections you'll need to map your firewall / NAT to the same port.

"Permissions on node_identity.key are too open"

ERROR exfer: node_identity.key has insecure permissions (0644). Refusing to start.

The file must be owner-readable only (0600). Either fix it manually:

chmod 0600 ~/.exfer/node_identity.key

Or let exfer repair it on startup:

exfer node --datadir ~/.exfer --repair-perms

The latter is the right choice for filesystems that strip permissions (WSL on a Windows drive, certain NAS mounts).

Sync stuck at one height

If get_block_height doesn't move for minutes despite a working network:

  1. Are the peers healthy? Look at the log for peer N: ... lines. The sync manager rotates to a different peer after a timeout if one stalls.
  2. Are you still in IBD? During cold-bootstrap, header sync runs first; bodies follow. The tip height only advances once bodies start validating.
  3. Check disk space. A full disk silently breaks RocksDB writes.
    df -h ~/.exfer
    
  4. Restart cleanly. Some peer-state issues clear on restart.

"Failed to decrypt wallet"

You typed the passphrase wrong, or the file is corrupted. The CLI cannot tell the two apart from outside — both produce a generic decryption failure.

  • Try a backup copy of the wallet first.
  • If the backup decrypts, the original file is corrupted (probably truncated by a bad copy). Replace with the backup.
  • If no backup decrypts, the passphrase is wrong. There is no recovery path.

"Address must be 32 bytes"

You passed an address that isn't 64 hex chars. Check:

  • No surrounding whitespace.
  • No 0x prefix (Exfer addresses are bare hex).
  • Length is exactly 64 chars.
echo -n "$ADDRESS" | wc -c    # must print 64

"Insufficient funds"

exfer wallet send reports balance is too low to cover amount + fee.

  • Check actual balance: exfer wallet balance --wallet ... --rpc ...
  • Check amount: did you mean exfers or EXFER? --amount 10 is 10 exfers (0.0000001 EXFER). --amount "10 EXFER" is 10 EXFER. The CLI accepts both forms, but they mean different things.
  • Mature coinbases only: outputs younger than 360 blocks are excluded.
  • Dust outputs (below 200 exfers) are skipped.

RPC returns HTTP 429

You hit a rate limit on the RPC endpoint (typically a community node).

  • For send_raw_transaction: 60 / min / IP.
  • For UTXO scans (get_balance, get_address_utxos, get_script_utxos): 30 / min / IP.

Back off and retry with jitter. For sustained workloads, run your own node so you control the rate limits.

Log noise: "rate-limited peer X"

Demoted from WARN to DEBUG in v1.8.1. If you're on an older binary and the log is dominated by these lines, upgrade to the latest release.

"Failed to deserialize transaction"

You called send_raw_transaction with bytes that aren't a valid Exfer transaction:

  • Wrong serialization format (e.g. used Bitcoin's, not Exfer's — see Protocol specification §5).
  • Hex string has odd length or non-hex characters.
  • Trailing garbage after the canonical end of the transaction.

Reconstruct with exfer wallet send (which signs correctly), or follow Wallet developer guide for the byte-level construction.

When to ask for help

Open an issue at https://github.com/ahuman-exfer/exfer/issues with:

  • Exact exfer --version output.
  • The complete command you ran.
  • The full error message and the previous few lines of log.
  • OS, distro version, filesystem (ext4 / btrfs / NTFS-on-WSL / etc.).

The more reproducible the report, the faster it gets fixed.