CLI PoP Miner

📜 TL;DR:

  • This guide provides straightforward steps to download, set up, and run your PoP Miner, either by downloading pre-built binaries or by building from source.

  • Ensure you have your development environment ready and follow the steps below to join the mining network.

  • Basic CLI skills are required.

  • To start mining, claim tBTC via the Hemi Discord faucet or send at least 0.002 tBTC to your provided Bitcoin testnet address and run the miner with your private key.


🏁 Prerequisites

  • Basic CLI Knowledge

  • tBTC - Join the Hemi Discord and visit our #faucet channel to acquire tBTC.


📚 Tutorial

1. Binaries

Download a pre-built binary or build from source using the README. Choose the release you want to use (if unsure, choose the latest), and click on Assets dropdown:

The package you will need to download depends on your OS and architecture:

  • Windows (Intel/AMD CPU): heminetwork_v0.2.8_windows_amd64.zip

  • Mac (Intel CPU): heminetwork_v0.2.8_darwin_amd64.tar.gz

  • Mac (Apple Silicon "M" CPU): heminetwork_v0.2.8_darwin_arm64.tar.gz

  • Linux (Intel/AMD CPU): heminetwork_v0.2.8_linux_amd64.tar.gz

  • Linux (ARM CPU): heminetwork_v0.2.8_linux_arm64.tar.gz


2. Extract the files

After downloading the necessary files, you must extract them from their compressed format before you can use or access the software. On most operating systems, you can right-click on the downloaded archive and choose "Extract" or similar.

Linux/macOS tip:

You can also use the command tar xvf heminetwork_v0.2.8_linux_amd64.tar.gz Run the uname -a command in the Terminal to view all system information, ensuring compatibility with the correct asset on GitHub. Depending on the output: "x86_64" => Choose the "amd64" package corresponding to your OS "arm64" => Choose the "arm64" package corresponding to your OS


3. Open your CLI and navigate to the extracted folder

Launch your CLI:

For Windows:

  • Press ⊞ Win + R together to open the "Run Program Or File" Window

  • Type "cmd" and press Enter

For macOS:

  • Press + Space together to open Spotlight Search

  • Type "terminal" and press Enter

For Linux:

  • Depends on OS. On Ubuntu (Gnome): Ctrl + Alt + T

  • For most other distros, you can press Super (Windows Key) and search for Terminal.

Navigate to the folder you extracted by typing cd (don't press Enter yet) and then drag the path of the extracted folder into your CLI, or type the path in manually and then press Enter.

  • For example on Linux if you downloaded the package to your Downloads folder and extracted it through the GUI, you might run a command like: cd '/home/user/Downloads/heminetwork_v0.2.8_linux_amd64'


4. Confirm folder contents

List the files:

For Windows:

  • dir (and press Enter)Type "cmd" and press Enter

For macOS:

  • ls (and press Enter)

Your output should be:

  • Linux & macOS

    bfgd    bssd    extool    hemictl    keygen    popmd    tbcd
  • For Windows

    bfgd.exe    bssd.exe    extool.exe     hemictl.exe     keygen.exe     popmd.exe     tbcd.exe

5. Verify configuration success

To ensure you downloaded the correct binaries and are able to run them, execute the command below:

Linux & macOS

⚠️ On Mac you will need to first remove the quarantine by running the following command in your Terminal:

xattr -d com.apple.quarantine ./popmd Run

./popmd --help

Windows

⚠️ Important Note for Windows Users: To successfully execute this command, you must use the Command Prompt (CMD), not PowerShell (which is the default terminal in environments like Visual Studio Code).

Run

popmd.exe --help

This will display the help menu for popmd, indicating that it's installed and operational.

Hemi Proof of Proof miner: v0.1.0-pre+f09d4e5ff
Usage:
	help (this help)
Environment:
	POPM_BFG_URL           : url for BFG (Bitcoin Finality Governor) (default: http://localhost:8383/v1/ws/public)
	POPM_BTC_CHAIN_NAME    : the name of the bitcoin chain to connect to (ex. "mainnet", "testnet3") (default: testnet3)
	POPM_BTC_PRIVKEY       : bitcoin private key (required) 
	POPM_LOG_LEVEL         : loglevel for various packages; INFO, DEBUG and TRACE (default: popmd=INFO;popm=INFO)
	POPM_PPROF_ADDRESS     : address and port popm pprof listens on (open <address>/debug/pprof to see available profiles) 
	POPM_PROMETHEUS_ADDRESS: address and port popm prometheus listens on 
	POPM_REMINE_THRESHOLD  : the number of L2 Keystones behind the latest seen that we are willing to remine, this is handy for re-orgs (default: 0)
	POPM_STATIC_FEE        : specify the number of sats/vB the PoP Miner will pay for fees (default: 1)

6a. Generate public key

If you prefer to PoP mine using a preexisting private key, you may skip this step. You may import a private key from either an EVM or BTC address.

Linux & macOS

⚠️ On Mac you will need to remove the quarantine by running:

xattr -d com.apple.quarantine ./keygen

Run the following command:

./keygen -secp256k1 -json -net="testnet" > ~/popm-address.json

Windows

⚠️ Important Note for Windows Users: To successfully execute this command, you must use the Command Prompt, not PowerShell (which is the default terminal in environments like Visual Studio Code). Follow these steps to open Command Prompt:

  1. Click on the Start Menu button or press the Windows key on your keyboard.

  2. Type cmd into the search bar and open it.

  3. Type the following command and press Enter:

keygen.exe -secp256k1 -json 
-net="testnet" > 
%HOMEDRIVE%%HOMEPATH%\popm-address.json

Note: After running the command, you might not see any immediate feedback in the Command Prompt. This is expected behavior.

  1. Open the generated key file

After generating the key file, you'll want to check its contents. To do this, use the following command in Command Prompt:

%HOMEDRIVE%%HOMEPATH%\popm-address.json

This command opens the popm-address.json file in Notepad, allowing you to view or edit the generated key.

6b. Open the JSON

If you chose to generate a new private key in Step 6a, open your JSON to view your file contents.

On Windows: See the above instructions for how to open the file in Notepad.

On Linux/macOS: Run the following command to print the contents of your key file to the Terminal: cat ~/popm-address.json

You should see a result like:

{
  "ethereum_address": "0x12345FabcD298299b8250e16eEb7D6a7B81DfEdC",
  "network": "testnet",
  "private_key": "123456789abcdef123456789abcdef123456789abcdef123456789abcdef1234",
  "public_key": "04123456789abcdef123456789abcdef123456789abcdef123456789abcdef12345678abcdef123456789abcdef123456789abcdef123456789abcdef1234",
  "pubkey_hash": "m12345678P2xVWwVCWxq7tHJLGcJz2h6XYZ"
}

7. Fund your address

Find your wallet address:

  • New Address: If you generated a new public key in Step 6a, check the JSON file from Step 6b for your pubkey_hash.

  • Existing BTC Address: If you are importing a private key from an existing BTC address, change your wallet type to P2PKH (Legacy) and locate the public key.

  • Existing EVM Address: If you are importing a private key from an existing EVM address, import your private key into UniSat and select P2PKH (Legacy) as your wallet type.

Fund your wallet:

  • Claim tBTC in the Hemi Discord faucet to send at least0.002 tBTC to your pubkey_hash address.

  • You can also get tBTC from faucets like this one. However, these faucets often don't provide enough tBTC to do much PoP mining.


8. Run the Miner

In your console, execute the following commands while:

  1. replacing <private_key> with either the value from your JSON file in Step 5 OR your preexisting EVM/BTC private key,

  2. replacing <fee_per_vB_integer> with the fee in sat/vB you want to pay.

Read the "Bitcoin fee/vB" section below if you need help determining what value to set here.

Linux & macOS

export POPM_BTC_PRIVKEY=<private_key>
export POPM_STATIC_FEE=<fee_per_vB_integer>
export POPM_BFG_URL=wss://testnet.rpc.hemi.network/v1/ws/public
./popmd

Windows

set POPM_BTC_PRIVKEY=<private_key>
set POPM_STATIC_FEE=<fee_per_vB_integer>
set POPM_BFG_URL=wss://testnet.rpc.hemi.network/v1/ws/public 
popmd.exe

9. Expected Console Output

2024-09-19 23:03:46 INFO popmd popmd.go:111 Hemi Proof-of-Proof Miner v0.4.3+0c53c8654 (Hemi Labs, popmd, go1.23.1 darwin/arm64)
2024-09-19 23:03:46 INFO popmd popmd.go:115 POPM_BFG_URL           : wss://testnet.rpc.hemi.network/v1/ws/public
2024-09-19 23:03:46 INFO popmd popmd.go:115 POPM_BTC_CHAIN_NAME    : testnet3
2024-09-19 23:03:46 INFO popmd popmd.go:115 POPM_BTC_PRIVKEY       : ********
2024-09-19 23:03:46 INFO popmd popmd.go:115 POPM_LOG_LEVEL         : popmd=INFO;popm=INFO
2024-09-19 23:03:46 INFO popmd popmd.go:115 POPM_PPROF_ADDRESS     : 
2024-09-19 23:03:46 INFO popmd popmd.go:115 POPM_PROMETHEUS_ADDRESS: 
2024-09-19 23:03:46 INFO popmd popmd.go:115 POPM_REMINE_THRESHOLD  : 0
2024-09-19 23:03:46 INFO popmd popmd.go:115 POPM_STATIC_FEE        : 150
2024-09-19 23:03:46 INFO popm popm.go:954 Starting PoP miner with BTC address n3vTV2wz5wEqiX1rx4aE2LJ19himfXKxQY (public key 031865e70e33c70a741a00a9b262f4a83947c69c725dc9c14f98117e789ae8673f)
2024-09-19 23:03:46 INFO popm popm.go:450 Checking for new keystone headers...
2024-09-19 23:03:46 INFO popm popm.go:389 checking keystone received with height 88750 against last keystone 88800
2024-09-19 23:03:46 INFO popm popm.go:389 checking keystone received with height 88775 against last keystone 88800
2024-09-19 23:03:46 INFO popm popm.go:389 checking keystone received with height 88800 against last keystone 88800

10. 🎉 Congrats! You are now a Hemi PoP Miner!

Let us know how this process was for you via Discord. We are constantly looking for ways to improve our documentation.


Bitcoin fee/vB

The Bitcoin transaction (normally represented in satsoshis per virtual byte or sats/vB) is a fee paid to the Bitcoin miners to include a transaction in a Bitcoin block. It varies with network congestion, typically rising during periods of high transaction volume and decreasing when there is less activity.

  • The PoP Miner consumes tBTC to pay the Bitcoin miners to include PoP transactions in Bitcoin blocks.

  • In order to ensure PoP transactions from your PoP miner are included in Bitcoin blocks, ensure the configured fee is set to an appropriate value. The PoP miner can be configured to use a certain fee in sats/vB by changing the POPM_STATIC_FEE environment variable when running the PoP miner. In a future version, the PoP miner will automatically calculate the current network fee to guarantee PoP transactions are included in Bitcoin blocks.

  • The lower you set the fee, the less tBTC you will pay per PoP transaction. But if your fees are too low, Bitcoin miners may not include your transaction quickly enough for you to successfully PoP mine.

Beginner and intermediate users:

  • We recommend setting the POPM_STATIC_FEE environment variable to 50 (50 sats/vB) to ensure PoP transactions are included in Bitcoin blocks.

Advanced users:

  1. Check Current Fee Levels: Visit mempool.space to see the current fee levels. Look at the "sat/vB" numbers for the different transaction fee priorities. It is recommended to set the value to the "High Priority" value or slightly higher.

  2. Set the Static Fee: Re-run the command to set the POPM_STATIC_FEE environment variable from above (export on Linux/macOS, set on Windows) each time you want to change the fee, and restart the PoP Miner afterwards.

Last updated