How to setup an XPR Network Block Producer

Before you start READ THIS.

Do not proceed if you do not have an LLC, registered business and ability to KYC your account.

Block Producers are public representatives of the network and must be accountable entities. You must publicly disclose beneficial ownership on your website.

Let’s setup a basic Block Producer on XPR Network Testnet. Once you’ve been running on testnet for two weeks with no issues you can apply to become a Block Producer on Mainnet!

The Process

  1. Start on Testnet – Set up and run a testnet node first
  2. Prove Reliability – Produce blocks on testnet for at least 2 weeks without issues
  3. Apply for Mainnet – Once you’ve demonstrated reliability, apply to become a mainnet Block Producer
  4. Sign Code of Conduct – Agree to the BP Code of Conduct

Server Requirements

For testnet we can use a combined Producer + API node on a single server. When you’re on mainnet and producing blocks you’ll need to separate the Producer and API nodes into 2 different servers.

Testnet Minimum Spec

  • 2.8+ GHz CPU (high single-thread performance)
  • 16 GB RAM
  • 600 GB SSD Storage
  • Ubuntu 22.04 LTS
  • Stable connection, ports 8888 and 9876 open

Mainnet Requirements (Separate Servers)

  • Block Producer Node: 8+ cores, 32+ GB RAM, 1 TB NVMe – Signs and produces blocks
  • API Node: 8+ cores, 32+ GB RAM, 1 TB NVMe – Serves public RPC requests

Security Note: Never expose your Block Producer node directly to the public. Use your API node as the public-facing endpoint.

Step 1 – Setup the Node!

First get a server from contabo.com or wherever you get your servers from. Ensure it meets the minimum specifications above.

Open up your terminal and SSH into your new server by typing the command:

ssh root@YOUR_SERVER_IP

First let’s download the latest version of Antelope Leap. You can find the latest release here. We installed Ubuntu 22.04 as our OS so let’s use the correct version:

wget https://github.com/AntelopeIO/leap/releases/download/v5.0.3/leap_5.0.3_amd64.deb

Now let’s install the .deb file we just downloaded by running:

sudo apt update

sudo apt install ./leap_5.0.3_amd64.deb

Verify the installation:

nodeos --version

cleos --version

Next let’s create a folder for the XPR Testnet node config files and clone the GitHub repo there.

First make a new directory:

mkdir -p /opt/XPRTestNet

Now change directory into that new directory:

cd /opt/XPRTestNet

If you don’t have git installed, install it first:

sudo apt-get update

sudo apt-get install git

And clone the xpr-testnet.start repo into that directory:

git clone https://github.com/XPRNetwork/xpr-testnet.start.git ./

Now you can type ls in the console and get a list of files and folders, then cd into the xprNode directory:

ls

cd xprNode

Now let’s start syncing the chain from genesis:

./start.sh --delete-all-blocks --genesis-json genesis.json

Then let’s follow the log files to see what’s happening:

tail -f stderr.txt

You will see your server going through and syncing blocks from genesis. This process is really slow so let’s use a snapshot instead!

Press Ctrl + C to escape and stop nodeos:

./stop.sh

Snapshots are kindly provided by some Block Producers. Let’s fetch a snapshot.

Snapshot Sources:

First let’s download the latest snapshot:

cd /opt/XPRTestNet/xprNode/snapshots

wget https://snapshots.bloxprod.io/testnet/latest-snapshot.bin

If using CryptoLions (compressed), you’ll need to decompress:

sudo apt install zstd

unzstd latest-snapshot.bin.zst

Now we need to remove the old blocks and state:

cd /opt/XPRTestNet/xprNode

rm -rf blocks/*

rm -rf state/*

Start nodeos from snapshot:

./start.sh --snapshot /opt/XPRTestNet/xprNode/snapshots/latest-snapshot.bin

Check the logs:

tail -f stderr.txt

You should see blocks with recent timestamps. Congratulations, your node is now syncing live with the XPR Network Testnet!

Step 2 – Create a Testnet Account

Let’s create an account on testnet using the WebAuth.com wallet.

On the WebAuth.com wallet change to testnet by selecting the network dropdown top right and choose XPR Network Testnet.

Now select Signup and:

  1. Choose a username (1-12 characters, a-z and 1-5 only) – this will be your wallet address
  2. Choose a public name
  3. Select a signing device (Yubikey, Face ID, fingerprint, etc.)
  4. Save your recovery phrase securely – NEVER share it
  5. Confirm the recovery phrase by entering it back in order
  6. Enter an email address
  7. For testnet verification, enter code: 000000

You should consider a password manager like Bitwarden or 1Password to save your recovery phrase securely.

Now visit https://explorer.xprnetwork.org/wallet/utilities/format-keys

Paste your recovery phrase into the Mnemonic to Private Key field and press format. You will get a PVT_K1 key. Save this key safely with your recovery phrase. Never share this anywhere.

Step 3 – Register as a Block Producer

Request Permission

Switch to XPR Network Testnet on the explorer and login top right using your WebAuth wallet in Testnet mode!

Once you’re in Testnet mode visit this link:

https://testnet.explorer.xprnetwork.org/account/eosio.proton?loadContract=true&tab=Actions&account=eosio.proton&scope=eosio.proton&limit=100&action=reqperm

This link will take you to the eosio.proton smart contract where we will request permission to register as a block producer.

Under acc enter your XPR account and under permission enter regprod

Submit Transaction!

Now we requested permission. Visit the XPR Network Validators Telegram group and ask for someone to approve your status.

Congrats for making it this far! Go have some time to relax!

Generate Block Signing Keys

Now that we have permission let’s register as a block producer! First we need a NEW additional key. Visit https://testnet.explorer.xprnetwork.org/wallet/utilities/keys

Generate New Keys and save the Public (PUB_K1) and Private (PVT_K1) keys somewhere safe. This is your PRODUCER KEY – separate from your account key.

Register as Block Producer

Visit this link:

https://testnet.explorer.xprnetwork.org/account/eosio?loadContract=true&tab=Actions&account=eosio&scope=eosio&limit=100&action=regproducer

This will take us to the eosio smart contract where we can select the regproducer action.

  • producer: Your account name
  • producer_key: Your PUBLIC producer key (PUB_K1_…)
  • url: Your website URL (e.g., https://yoursite.com/testnet)
  • location: Your ISO 3166-1 numeric country code (e.g., 840 = USA, 826 = UK, 554 = NZ)

Submit Transaction! Sign with your WebAuth wallet and you should see Success.

Let’s visit the producers table to confirm you are registered:

https://testnet.explorer.xprnetwork.org/account/eosio?loadContract=true&tab=Tables&account=eosio&scope=eosio&limit=100&table=producers

Step 4 – Start Producing Blocks!

Let’s switch back to our terminal, make sure we’re in the /opt/XPRTestNet/xprNode folder and edit the config.ini file:

cd /opt/XPRTestNet/xprNode

sudo nano config.ini

Using your arrow keys, uncomment and configure the producer lines at the top:

# Block Producer Settings
producer-name = YOUR_ACCOUNT_NAME
signature-provider = PUB_K1_yourpublickey=KEY:PVT_K1_yourprivatekey

# Producer Plugin
plugin = eosio::producer_plugin
plugin = eosio::producer_api_plugin

# P2P Settings
p2p-server-address = YOUR_DOMAIN:9876

Remember that new PRODUCER KEY we generated above? This is where we need the PUB and PVT keys together. For signature-provider paste your PUB_K1 key then =KEY: then your PVT_K1 key.

Once you’ve made the changes press Ctrl + X, it will ask to save – press Y, then press Enter to save as config.ini.

Since we’ve updated our config.ini file we need to restart nodeos:

./stop.sh

./start.sh

Now let’s check the logs:

tail -f stderr.txt

Now Ctrl + C to exit and let’s check testnet.explorer.xprnetwork.org to see if we’re listed among the other Block Producers!

Now we’re ready for some votes! Once you get some votes on your testnet node and enter the Top 21 on testnet, your node will start producing blocks.

If you follow the logs once you’re in the Top 21 you will see logs showing BPs producing blocks in alphabetical order. Wait a couple of rounds for you to enter the schedule and start producing blocks.

Once you are actually producing you will see:

Produced block ... signed by YOUR_ACCOUNT

That means we are successfully producing blocks on XPR Network Testnet!

Now join the Testnet Reliability Tracker on Telegram to monitor Block Producers nodes for any downtime.

Let’s check in on our node to see the CPU and memory usage:

sudo apt install htop

htop

Step 5 – Setup a Website and bp.json

You need a website with:

  • Company/organization information
  • Ownership disclosure – List who owns your BP
  • Contact information
  • Links to social media (X/Twitter, Telegram)

Create a folder on your website called testnet (e.g., yoursite.com/testnet/) and inside that create a file called bp.json

You can generate a bp.json file using Antelope Tools BP JSON Generator or use this template:

{
  "producer_account_name": "youraccount",
  "org": {
    "candidate_name": "Your BP Name",
    "website": "https://yoursite.com",
    "code_of_conduct": "https://yoursite.com/code-of-conduct",
    "ownership_disclosure": "https://yoursite.com/ownership",
    "email": "contact@yoursite.com",
    "branding": {
      "logo_256": "https://yoursite.com/bp/logo_256.png",
      "logo_1024": "https://yoursite.com/bp/logo_1024.png",
      "logo_svg": "https://yoursite.com/bp/logo.svg"
    },
    "location": {
      "name": "City, Country",
      "country": "XX",
      "latitude": 0.0000,
      "longitude": 0.0000
    },
    "social": {
      "twitter": "youraccount",
      "telegram": "youraccount",
      "github": "youraccount"
    }
  },
  "nodes": [
    {
      "location": {
        "name": "City, Country",
        "country": "XX",
        "latitude": 0.0000,
        "longitude": 0.0000
      },
      "node_type": "producer",
      "p2p_endpoint": "tn1.yoursite.com:9876",
      "api_endpoint": "http://tn1.yoursite.com:8888",
      "ssl_endpoint": "https://tn1.yoursite.com"
    }
  ]
}

Replace all the placeholder values with your own data. Find your location lat/long at latlong.net.

Upload Logo Images

Prepare a logo (square, 1:1 ratio) and save two different sizes as PNG format:

  • yourname_logo_256.png (256×256 pixels)
  • yourname_logo_1024.png (1024×1024 pixels)

Upload them to a folder on your website (e.g., yoursite.com/bp/) and make sure your bp.json points to the correct URLs.

Update Your Registration

Now let’s update the regproducer with the correct URL. Visit the regproducer action again:

https://testnet.explorer.xprnetwork.org/account/eosio?loadContract=true&tab=Actions&account=eosio&scope=eosio&limit=100&action=regproducer

Enter your details again but this time with URL: https://yoursite.com/testnet (pointing to where bp.json is)

Submit Transaction. It may take up to an hour for the explorer to pick up your logo.

Step 6 – Setup DNS for Your Node

In your bp.json we set a domain that points to our API endpoint. This subdomain points to your Block Producer server IP address (the same one you SSH into).

In your domain’s DNS settings (cPanel Zone Editor, Cloudflare, etc.), create an A record:

  • Type: A
  • Name: tn1 (or whatever subdomain you chose)
  • Value: YOUR_SERVER_IP
  • TTL: 300

Wait a couple of hours for the DNS to propagate. Check the status using dnschecker.org – enter your domain and look for your IP address.

Once ready, test the API:

curl https://tn1.yoursite.com:8888/v1/chain/get_info

You should see JSON with blockchain info. If so, your API is responding!

Now update your config.ini with the domain:

cd /opt/XPRTestNet/xprNode

sudo nano config.ini

Update the p2p-server-address with your subdomain:

p2p-server-address = tn1.yoursite.com:9876

Ctrl + X, Y, Enter to save. Restart nodeos:

./stop.sh

./start.sh

Step 7 – The Two-Week Testnet Requirement

Before applying for mainnet, you must demonstrate reliability on testnet.

What You Must Demonstrate:

  1. Run continuously for 14 days without significant downtime
  2. Produce blocks when scheduled (requires Top 21 votes)
  3. Maintain API availability for health checks
  4. Respond to network issues promptly
  5. Achieve < 0.35ms block production time

Getting Votes:

  • Ask in the XPR Network Validators Telegram for votes
  • Other BPs and community members can vote for you
  • You need enough votes to enter the Top 21 to start producing

What Happens If You Miss Blocks:

  • Missing blocks damages network reliability
  • Consistent block misses will disqualify your mainnet application
  • Ensure you have monitoring and alerting set up

Step 8 – Apply for Mainnet

After successfully running on testnet for 2+ weeks with no issues, you can apply for mainnet.

Requirements Checklist for Mainnet:

  1. 1 x Block Producer Node + 1 x API Node (separate servers)
  2. KYC account with accurate Ownership disclosure (list who owns your BP on your website)
  3. Website showing accurate information
  4. X.com & Telegram Link
  5. Sign Code of Conduct
  6. 2+ weeks of reliable testnet block production

Mainnet Registration Process:

  1. Complete KYC at identity.metalx.com
  2. Request regprod permission on mainnet
  3. Generate new producer keys for mainnet
  4. Register as producer on mainnet
  5. Set up mainnet bp.json at https://yoursite.com/bp.json (not /testnet/)

Mainnet Resources:

Useful Commands Reference

# Start node (from genesis - rarely needed)
./start.sh --delete-all-blocks --genesis-json genesis.json

# Start node (from snapshot)
./start.sh --snapshot /path/to/snapshot.bin

# Start node (resume)
./start.sh

# Stop node
./stop.sh

# View logs
tail -f stderr.txt

# Check if running
ps aux | grep nodeos

# Check current block
curl -s http://127.0.0.1:8888/v1/chain/get_info

# Create snapshot
curl -X POST http://127.0.0.1:8888/v1/producer/create_snapshot

Network Information

Chain IDs:

  • Mainnet: 384da888112027f0321850a169f737c33e53b388aad48b5adace4bab97f437e0
  • Testnet: 71ee83bcf52142d61019d95f9cc5427ba6a0d7ff8accd9e2088ae2abeaf3d3dd

Default Ports:

  • 8888: HTTP API
  • 9876: P2P
  • 8080: State History (if enabled)

Support Channels

Good luck on your journey to becoming an XPR Network Block Producer!


Posted

in

by