Hemi is an EVM-compatible L2 blockchain that combines the security of Bitcoin with the programmability of Ethereum.
The Hemi Network consists of three key services, each serving a unique and important function within the network:
Service | Description |
---|---|
PoP Miner (popmd) | Mines L2 Keystones into Bitcoin blocks for Proof-of-Proof. |
Bitcoin Finality Governor (bfgd) | Acts as the gateway to the Bitcoin network. |
Bitcoin Secure Sequencer (bssd) | Acts as a gateway to the Bitcoin Finality Governor (BFG), managing the consensus mechanisms of the Hemi Network. |
Pre-built binaries are available on the Releases Page.
git
make
Clone the heminetwork
repository:
git clone https://github.com/hemilabs/heminetwork.git
cd heminetwork
Setup and build binaries:
make deps # Download and install dependencies
make install # Build binaries
Output binaries will be written to the bin/
directory.
For any service, you can view configuration options by running:
./bin/popmd --help
./bin/bfgd --help
./bin/bssd --help
Once properly configured and running, popmd
will start mining L2 Keystones by adding them to Bitcoin blocks that make
it into the chain.
Set up and start popmd using:
./bin/popmd
There is also a web interface that can be used to run a PoP miner. Build and run the web interface with:
[!NOTE] The web PoP Miner is currently a proof-of-concept.
cd ./web
make
go run ./integrationtest
./database/bfgd/scripts/
to be run to set up your schema.[!WARNING] This is designed for use in testing and development environments only.
docker
Start the Network: Launch the entire Hemi network locally using Docker, which will generate L2 Keystones and BTC Blocks at a high rate:
docker compose -f ./e2e/docker-compose.yml up --build
[!NOTE] The
--build
flag is optional and should only be used if you want to rebuild the binaries.
[!NOTE] During rebuilding,
popmd
,bssd
, andbfgd
may force a rebuild due to theCOPY
command, which can break the cache. If you need to deliberately break the cache for the op-stack, use the following arguments:
For op-geth + optimism (op-node):
docker compose -f ./e2e/docker-compose.yml build --build-arg OP_GETH_CACHE_BREAK="$(date)"
For optimism cache break only:
docker compose -f ./e2e/docker-compose.yml build --build-arg OPTIMISM_CACHE_BREAK="$(date)"
[!IMPORTANT] Make sure you run the cleanup command to remove data and ensure a fresh start.
docker compose -f ./e2e/docker-compose.yml down -v --remove-orphans
NOTE: The --remove-orphans
flag should remove other containers not defined
in the docker compose file. This is mainly here to help ensure you start with a
clean environment. It can be omitted.
This project is licensed under the MIT License.