- mempool.get_info: the daemon has no incrementalrelayfee in getmempoolinfo, read incrementalfee from getnetworkinfo - testmempoolaccept: the daemon does not report wtxid - outpoint.subscribe: refuse the subscription (Coin.DAEMON_HAS_TXO_SPENDER_INDEX) instead of closing the session at the next block, when the daemon errors Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
plm-electrumx
Licence: MIT
Maintainer (plm-electrumx): Davide Grilli
Original Author: Neil Booth
Upstream Maintainers: The Electrum developers
Language: Python (>= 3.10)
plm-electrumx is an Electrum protocol server for Palladium (PLM), the coin of
Palladium Core. It is a fork of
spesmilo/electrumx that supports Palladium only.
It connects to your Palladium full node and indexes the blockchain, allowing efficient querying of
the history of arbitrary addresses.
Running
With Docker (next to the Palladium node)
ElectrumX joins the Docker network palladium, created by the node's compose project, and reaches the node
as palladiumd:2332. RPC and ZMQ of the node are not published on the host, so nothing else is exposed.
- Start the node (a compose service named
palladiumdon the networkpalladium). Its~/.palladium/palladium.confneedsserver=1andtxindex=1(noprune). cp .env.example .envand setPLM_RPC_USER/PLM_RPC_PASSWORDto the RPC credentials of that file (use a dedicatedrpcauthuser for anything public).- Create the data directory as your user:
mkdir -p ~/.plm-electrumx/db ~/.plm-electrumx/ssl(ELECTRUMX_DATADIRin.envchanges it). The container runs as uid/gid 1000; for another user setPLM_UID/PLM_GIDin.env. docker compose up -d --build
The first start builds the database from the node from genesis, which takes a while; follow it with
docker compose logs -f electrumx. The data directory has db/ (the database, rebuilt from the node if deleted) and ssl/ (the certificate). Electrum clients connect to
TCP port 50001 (ELECTRUMX_TCP_PORT in .env) and SSL port 50002 (ELECTRUMX_SSL_PORT). SSL is on by default:
a self-signed certificate is generated on the first start, kept in ~/.plm-electrumx/ssl and reused on every
later start (or use your own, see DEPLOY.md). To announce a public server to the network, set
REPORT_SERVICES in .env. Settings are in .env and docker-compose.yml; the image defaults are in the
Dockerfile. Ports, firewall, SSL, RPC credentials and troubleshooting are in DEPLOY.md.
Without Docker
Requirements: Python >= 3.10, a synced Palladium node with server=1 and txindex=1 (no pruning),
and one of the DB engines (pip install ".[leveldb]" or pip install ".[rocksdb]").
pip install ".[rocksdb]"
DB_ENGINE=rocksdb DB_DIRECTORY=/path/to/db \
DAEMON_URL=http://rpcuser:rpcpassword@127.0.0.1:2332/ \
SERVICES=tcp://:50001 electrumx_server
COIN defaults to Palladium and NET to mainnet (testnet and regtest are also available).
All settings are environment variables, documented in docs/environment.rst; docs/HOWTO.rst
describes a full installation.
Fork notes
Starting point
The first commit of this repository is an unmodified snapshot of upstream
spesmilo/electrumx at commit
280cb339aa158e099eb936033eecd15719770651
("Merge pull request #389 from SomberNight/202607_release_2_0", upstream release 2.0.0, 3 July 2026).
The upstream history itself is not included. All Palladium-specific changes are in the commits after it:
git log --reverse
Updating from upstream
There is no common git history with upstream, so git merge does not work. Apply the upstream
changes since the snapshot as a patch instead:
git remote add upstream https://github.com/spesmilo/electrumx.git # once
git fetch upstream
git log 280cb33..upstream/master --oneline # what changed upstream
git diff 280cb33 upstream/master | git apply --3way
Conflicts in files this fork deleted (see below) are resolved by keeping them deleted. After an update,
replace 280cb33 above with the new upstream commit that was applied.
Removed from upstream
All other coins: their classes in coins.py, their transaction deserializers (lib/tx.py,
tx_dash.py, tx_axe.py), the session/daemon/block-processor subclasses only they used, their
tests and fixtures, and the altcoin pip extras. Bitcoin was folded into Palladium.
When merging upstream, resolve modify/delete conflicts on these files by keeping them deleted.
Palladium specifics
- Segwit and taproot (BIP341/342, active on mainnet from block 405000) are supported: the server indexes
by the hash of the output script, so every script type is handled alike. Addresses (base58, bech32
plm1, bech32m for taproot) are only read by the localelectrumx_rpc querycommand. - Palladium Core has no
getindexinfo,txospenderindex(gettxspendingprevout) orsubmitpackageRPCs, so the daemon version/index checks are disabled forCOIN=Palladium, andblockchain.outpoint.subscribeis refused with an explicit error (Coin.DAEMON_HAS_TXO_SPENDER_INDEX) andblockchain.transaction.broadcast_packagereturns the daemon error to clients. - The daemon must run with
txindex=1. - Same genesis blocks as Bitcoin (mainnet, testnet3, regtest), 80-byte headers, sha256d PoW.
- Parameters (address prefixes, ports, genesis hashes) were taken from the Palladium Core chain parameters.
License
MIT, see LICENCE. The original copyright notices of ElectrumX are kept.