Help validating pool network architecture

I’m working on setting up a pool (only testnet until I have a full understanding of the setup).
Although it seems to be popular to run everything on a VPS (like AWS) to ensure high uptime, I would like to use a more decentralized approach.

So I plan to have 3 or 4 relays placed in home server locations that I trust (they have fixed public IPs, racks, UPS, and firewalls with DMZ zones (so not just sticking it in my parents basement).
The producing node (and maybe a relay as well) would be on a VPS with high uptime. Everything connected together with a Wireguard mesh VPN.
The relays would have access to internet and the VPN, while the producing node only would have VPN access. Inside the VPN I would have an ubuntu repo mirror so the producing node can update the OS without going outside the VPN.
Everything will be run in ubuntu containers for easy backup snapshots, and the wireguard would actually only be configured on the hypervisor, which in turn routes VPN traffic to the containers running on it.

Then there is the question of producing node uptime during sw updates, keys updates, and OS updates (, and general outages). But I think that should be a seperate post later.

So, is this a viable setup? The home locations will of course not have 99.9% uptime, but as long as there always are a minimum of 2 relays up, will I be dinged/punished for some relays going down frome time to time?


The answer is no, your nodes should be up and runing when the block is asigned otherwise u wil not create it; meantime the nodes can be down for maintanance, upgrading, etc … will be no punishments

Theoretically u can keep the nodes down if u don’t have blocks assigned but it’s not helping the decentralization


So all relay nodes must be up as much as possible? Would that not mean that adding more relays can actually hurt the pool “uptime” as there is a higher chance of one being down?

Of course I understand that the producing node must always be up. I just don’t understand why all the relays must be up to get blocks.

Sorry for being a bit slow in understanding here.

At least one of your relays need to be up and sending out an alive signal (topologyUpdater or similar) in order to receive inbound traffic from other pools’ relays. Otherwise you do not receive transaction to be processed and cannot create a block.

Of course. That’s why I specified minimum of 1 or more relays always up, but that 1 or 2 of them (out of a total of let’s say 4), may go down at times.

Maybe my initial explanation wasn’t clear enough.