Skip to content

Contributing

Repository Structure

BlockHost is a multi-repo project. The main repo orchestrates submodules:

RepoPurpose
blockhostInstaller, scripts, ISO builder, admin panel
blockhost-engine-evmEVM blockchain engine
blockhost-engine-opnetOPNet blockchain engine
blockhost-provisioner-proxmoxProxmox provisioner
blockhost-provisioner-libvirtlibvirt provisioner
blockhost-commonShared library
blockhost-brokerIPv6 broker
blockhost-monitorHost monitor (in development)
libpam-web3PAM authentication module
blockhost-factsInterface contracts

Before You Start

  1. Read the relevant interface contract for the component you're modifying
  2. Understand the architecture and where your change fits
  3. Check existing issues and discussions

Guidelines

  • Fix the interface, never wrap the mismatch. If two components disagree, the contract is wrong — not the code.
  • No shell=True. All subprocess calls use argument lists.
  • Validate at the boundary. Trust internal code. Validate external input.
  • Keep it simple. Don't add abstractions for one-time operations. Three similar lines are better than a premature helper.
  • Test with the ISO. The integration test is booting the ISO and running the wizard end-to-end. Unit tests are good; a working system is better.

Adding a New Engine

See Building an Engine. The interface contract is in facts/ENGINE_INTERFACE.md.

Adding a New Provisioner

See Building a Provisioner. The interface contract is in facts/PROVISIONER_INTERFACE.md.

Security Issues

If you find a security vulnerability, please report it responsibly. See Audit Status for what's been reviewed.