Add testnet support for palladium electrumx server

Add PalladiumTestnet class with testnet-specific configurations including ports, address prefixes, and genesis hash. Update docker-compose.yml with clear network configuration comments and documentation in README.md explaining how to switch between mainnet and testnet.
This commit is contained in:
2025-11-28 12:32:12 +01:00
parent 4231aafb1e
commit 54b434d33f
3 changed files with 180 additions and 4 deletions

149
README.md
View File

@@ -60,7 +60,7 @@ Replace with your actual values:
* `<rpcuser>` → RPC username of the node
* `<rpcpassword>` → RPC password of the node
* `<port>` → RPC port of the node (e.g., `2332` for Palladium)
* `<port>` → RPC port of the node (`2332` for mainnet, `12332` for testnet)
**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.
@@ -72,6 +72,150 @@ Replace with your actual values:
---
## 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`
---
## Build and Start the Project
1. Navigate to the directory containing `docker-compose.yml` and `Dockerfile`.
@@ -115,7 +259,8 @@ The script will perform:
## Notes
* `coins_plm.py` defines the **Palladium (PLM)** coin, based on Bitcoin.
* `coins_plm.py` defines both **Palladium (PLM)** mainnet and **PalladiumTestnet** classes
* See "Network Support" section for switching between mainnet and testnet
* Production recommendations:
* Protect RPC credentials

View File

@@ -10,9 +10,15 @@ services:
- "50002:50002" # SSL
environment:
COIN: "Palladium"
NET: "mainnet"
# ===== Network Configuration =====
# For MAINNET use: COIN: "Palladium" and DAEMON_URL port 2332
# For TESTNET use: COIN: "PalladiumTestnet" and DAEMON_URL port 12332
COIN: "Palladium" # Change to "PalladiumTestnet" for testnet
NET: "mainnet" # This is set automatically by the COIN parameter
# Palladium Core RPC connection
# MAINNET: port 2332 | TESTNET: port 12332
DAEMON_URL: "http://<rpcuser>:<rpcpassword>@host.docker.internal:2332/" # RPC credentials
SERVICES: "tcp://0.0.0.0:50001,ssl://0.0.0.0:50002"

View File

@@ -17,6 +17,31 @@ class Palladium(Bitcoin):
# === Genesis hash (Bitcoin mainnet) ===
GENESIS_HASH = "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"
# === Default ports ===
RPC_PORT = 2332
PEER_DEFAULT_PORTS = {'t': '2333', 's': '52333'}
# === Deserializer ===
DESERIALIZER = lib_tx.DeserializerSegWit
class PalladiumTestnet(Palladium):
NAME = "Palladium"
SHORTNAME = "tPLM"
NET = "testnet"
# === Testnet address prefixes ===
P2PKH_VERBYTE = bytes([0x7f]) # 127 decimal - addresses start with 't'
P2SH_VERBYTE = bytes([0x73]) # 115 decimal
WIF_BYTE = bytes([0xff]) # 255 decimal
# === Bech32 prefix for testnet ===
HRP = "tplm"
# === Genesis hash (Bitcoin testnet) ===
GENESIS_HASH = "000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"
# === Testnet ports ===
RPC_PORT = 12332
PEER_DEFAULT_PORTS = {'t': '12333', 's': '62333'}