2025-09-26 16:07:30 +02:00
# ElectrumX with Palladium (PLM) Support
This repository provides a **Dockerized ** setup of **ElectrumX ** with support for the **Palladium (PLM) ** coin.
It also includes a test script (`test-server.py` ) to verify the connection and main functionalities of the ElectrumX server.
Tested on:
* ✅ Debian 12
* ✅ Ubuntu 24.04
2025-10-15 14:07:11 +02:00
🔗 Palladium Full Node: [davide3011/palladiumcore ](https://github.com/davide3011/palladiumcore )
2025-09-26 16:07:30 +02:00
---
## Architecture
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Electrum │ │ ElectrumX │ │ Palladium │
│ Clients │◄──►│ Server │◄──►│ Full Node │
│ │ │ (Docker) │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
---
## Requirements
* [Docker ](https://docs.docker.com/get-docker/ )
* [Docker Compose ](https://docs.docker.com/compose/install/ )
* Python 3.10+ (to use `test-server.py` )
* A running **Palladium ** full node ([NotRin7/Palladium ](https://github.com/NotRin7/Palladium ))
2025-10-05 18:16:52 +02:00
**System Architecture**: This server requires a **64-bit system ** (both AMD64 and ARM64 architectures are supported, but 32-bit systems are not compatible).
2025-09-26 16:07:30 +02:00
**Recommendation**: to ensure maximum stability and reduce communication latency, it is strongly recommended to run the Palladium node **on the same machine ** that hosts the ElectrumX container.
---
## Docker Installation
If you don't have Docker installed yet, follow the official guide:
- [Install Docker ](https://docs.docker.com/get-docker/ )
For Docker Compose:
- [Install Docker Compose ](https://docs.docker.com/compose/install/ )
---
## Configuration
In the `docker-compose.yml` file, you can set the RPC credentials of the Palladium full node that ElectrumX will use:
```yaml
environment:
2025-10-15 14:07:11 +02:00
DAEMON_URL: "http://<rpcuser>:<rpcpassword>@host .docker.internal:<port>/"
2025-09-26 16:07:30 +02:00
```
Replace with your actual values:
* `<rpcuser>` → RPC username of the node
* `<rpcpassword>` → RPC password of the node
2025-11-28 12:32:12 +01:00
* `<port>` → RPC port of the node (`2332` for mainnet, `12332` for testnet)
2025-09-26 16:07:30 +02:00
2025-10-15 14:07:11 +02:00
**Note:** The compose uses `host.docker.internal` to connect to the Palladium node running on your host machine (outside the container). This works on both Windows/Mac and Linux thanks to the `extra_hosts` configuration.
**Ports:** ElectrumX exposes:
- `50001` → TCP (unencrypted)
- `50002` → SSL (encrypted, recommended)
2025-09-26 16:07:30 +02:00
**Important:** never include real credentials in files you upload to GitHub.
---
2025-11-28 12:32:12 +01:00
## Network Support (Mainnet & Testnet)
This ElectrumX server supports both **Palladium mainnet ** and **testnet ** . You can switch between networks by modifying the `docker-compose.yml` configuration.
### Network Comparison
| Network | COIN Value | RPC Port | Bech32 Prefix | Address Prefix |
|---------|-----------|----------|---------------|----------------|
| **Mainnet ** | `Palladium` | `2332` | `plm` | Standard (starts with `1` or `3` ) |
| **Testnet ** | `PalladiumTestnet` | `12332` | `tplm` | Testnet (starts with `t` ) |
---
### Running on Mainnet (Default)
The default configuration is set for **mainnet ** . No changes are needed if you want to run on mainnet.
**Configuration in `docker-compose.yml` :**
```yaml
environment:
COIN: "Palladium"
DAEMON_URL: "http://<rpcuser>:<rpcpassword>@host .docker.internal:2332/"
```
**Requirements:**
- Palladium Core node running on **mainnet **
- RPC port: `2332`
- RPC credentials configured in `palladium.conf`
---
### Switching to Testnet
To run ElectrumX on **testnet ** , follow these steps:
#### Step 1: Configure Palladium Core for Testnet
Edit your Palladium Core configuration file (`palladium.conf` ) and add:
```conf
# Enable testnet
testnet=1
# RPC settings for testnet
rpcuser=your_rpc_username
rpcpassword=your_rpc_password
rpcport=12332
# Allow RPC connections
server=1
```
Restart your Palladium Core node to apply testnet configuration.
#### Step 2: Modify docker-compose.yml
Open `docker-compose.yml` and change these two values in the `environment` section:
**Before (Mainnet):**
```yaml
environment:
COIN: "Palladium"
DAEMON_URL: "http://<rpcuser>:<rpcpassword>@host .docker.internal:2332/"
```
**After (Testnet):**
```yaml
environment:
COIN: "PalladiumTestnet"
DAEMON_URL: "http://<rpcuser>:<rpcpassword>@host .docker.internal:12332/"
```
**Important changes:**
1. Change `COIN` from `"Palladium"` to `"PalladiumTestnet"`
2. Change port in `DAEMON_URL` from `2332` to `12332`
3. Replace `<rpcuser>` and `<rpcpassword>` with your actual testnet RPC credentials
#### Step 3: Clear Existing Database (Important!)
When switching networks, you **must ** clear the ElectrumX database to avoid conflicts:
```bash
# Stop the container
docker compose down
# Remove the database
rm -rf ./data/*
# Or on Windows:
# rmdir /s /q data
# mkdir data
```
#### Step 4: Rebuild and Restart
```bash
# Rebuild the image (if you modified coins_plm.py)
docker build -t electrumx-plm:local .
# Start the container
docker compose up -d
# Monitor the logs
docker compose logs -f
```
The ElectrumX server will now sync with the Palladium **testnet ** blockchain.
---
### Testnet-Specific Information
**Genesis Block Hash (Testnet):**
```
000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
```
**Address Examples:**
- Legacy (P2PKH): starts with `t` (e.g., `tPLMAddress123...` )
- SegWit (Bech32): starts with `tplm` (e.g., `tplm1q...` )
**Network Ports:**
- Palladium Core RPC: `12332`
- Palladium Core P2P: `12333`
- ElectrumX TCP: `50001` (same as mainnet)
- ElectrumX SSL: `50002` (same as mainnet)
---
### Switching Back to Mainnet
To switch back from testnet to mainnet:
1. Edit `palladium.conf` and remove or comment `testnet=1`
2. Change `rpcport=2332` in `palladium.conf`
3. Restart Palladium Core node
4. In `docker-compose.yml` , change:
- `COIN: "PalladiumTestnet"` → `COIN: "Palladium"`
- Port in `DAEMON_URL` from `12332` → `2332`
5. Clear database: `rm -rf ./data/*`
6. Restart ElectrumX: `docker compose down && docker compose up -d`
---
2025-09-26 16:07:30 +02:00
## Build and Start the Project
1. Navigate to the directory containing `docker-compose.yml` and `Dockerfile` .
2. Build the custom Docker image:
```bash
docker build -t electrumx-plm:local .
```
3. Start the containers with Docker Compose:
```bash
2025-10-05 18:13:53 +02:00
docker compose up -d
2025-09-26 16:07:30 +02:00
```
4. Check the logs to verify that ElectrumX started correctly:
```bash
2025-10-05 18:13:53 +02:00
docker compose logs -f
2025-09-26 16:07:30 +02:00
```
---
## Testing with `test-server.py`
The `test-server.py` script allows you to connect to the ElectrumX server and test its APIs.
Usage example:
```bash
python test-server.py 127.0.0.1:50002
```
The script will perform:
* Handshake (`server.version` )
* Feature request (`server.features` )
* Block header subscription (`blockchain.headers.subscribe` )
---
## Notes
2025-11-28 12:32:12 +01:00
* `coins_plm.py` defines both **Palladium (PLM) ** mainnet and **PalladiumTestnet ** classes
* See "Network Support" section for switching between mainnet and testnet
2025-09-26 16:07:30 +02:00
* Production recommendations:
* Protect RPC credentials
* Use valid SSL certificates
* Monitor containers (logs, metrics, alerts)
---
## License
Distributed under the **MIT ** license. See the `LICENSE` file for details.