How To Deploy A Mina Node
Mina Protocol is revolutionizing the blockchain space with a lightweight, snark-powered consensus mechanism that drastically reduces data requirements and empowers decentralization.
Running a node is the best way to engage in the Mina network. This step-by-step tutorial will show you how to deploy a Mina node to support the protocol's performance and security.
What is a Mina Node?
Every node on the Mina network is a full node, but there are different labels for node types depending on their specific roles. Here is a summary of primary Mina nodes, according to Mina Glossary:
- Block producers (BPs): BPs are responsible for validating transactions and producing blocks. They are also responsible for securing the network by participating in the consensus process (also known as consensus nodes).
- SNARK workers: These nodes are responsible for generating the proofs used to verify transactions. They do not participate in the consensus process, but they are essential for the security and efficiency of the network.
Mina Node Requirements
Software:
- Operating Systems: macOS, Linux (Debian 9 and Ubuntu 18.04 LTS), or any host with Docker.
- Windows is not officially supported, but it can be set up using Windows Subsystem for Linux or Docker (community-created instructions available).
Hardware:
- CPU: At least an 8-core processor.
- RAM: At least 16GB (more may be needed if running a snark worker node simultaneously).
- GPUs are not currently required but may be needed in future protocol upgrades for node operators.
Network:
- Minimum 1 Mbps connection.
VM Instances (Recommended for Basic Node Operator Needs):
- AWS: c5.2xlarge.
- GCP: c2-standard-8.
- Azure: Standard_F8s_v2.
- Digital Ocean: c-8-16gib.
Note: Custom requirements or different cost constraints may necessitate choosing a different instance type. For the latest updates, kindly check out Mina Protocol documentation.
How to Deploy a Mina Node
Step 1: Install Mina
- Add the Mina Debian repo and install (for Ubuntu 18.04 / Debian 9):
- Check the installation by running
mina version
. The expected output isCommit a42bdeef6b0c15ee34616e4df76c882b0c5c7c2a on branch master
.
If you're on another Linux distro or macOS version, you can try building Mina from source code. Note that other operating systems might have issues. Seek troubleshooting help on Discord
Step 2: Create a keypair
Generate a keypair
- First, ensure you have a dedicated folder on your system to store the key files. We recommend using the
~/keys
folder.
mkdir ~/keys
- Next, set the proper permissions for this folder to prevent unauthorized access:
chmod 700 ~/keys
- Generate a key using one of the following methods based on your setup:
On Ubuntu/Debian: Use the mina-generate-keypair
command. When prompted, set a strong password for this key. Remember this password, as it will be used to secure the key. If you set the MINA_PRIVKEY_PASS environment variable, the tool uses that password without prompting. Keep the password secure.
mina-generate-keypair --privkey-path ~/keys/my-wallet
On Docker (Windows/MacOS/Linux): Use the minaprotocol/generate-keypair
Docker image. When prompted, set a strong password for the key. Remember this password, as it will be used to secure the key. Keep the password secure.
cd
~docker run --interactive --tty --rm --volume $(pwd)/keys:/keys minaprotocol/mina-generate-keypair:1.3.0-9b0369c --privkey-path /keys/my-wallet
This creates two files: ~/keys/my-wallet (encrypted private key) and ~/keys/my-wallet.pub (public key in plain text). Store the private key file and its password securely, such as in a password manager.
Ensure Private Key File Permissions
For added security, set the proper permissions for the private key file:
chmod 600 $(pwd)/keys/my-wallet
Validate Your Private Key
Ensure your private key works by validating it. Use the mina-validate-keypair
tool for this:
On Linux:
mina-validate-keypair --privkey-path <path-to-the-private-key-file>
Using Docker:
docker run --interactive --tty --rm --entrypoint=mina-validate-keypair --volume $(pwd)/keys:/keys minaprotocol/mina-generate-keypair:1.3.0-9b0369c --privkey-path /keys/my-wallet
Step 3: Start your node
Update your Mina daemon
To update your Mina daemon and connect to Mainnet, follow these steps based on your operating system:
For Ubuntu 18.04, 20.04, Debian 9, 10, 11:
Install the latest Stable Mina Release 1.3.1.2, or opt for pre-release (Beta) builds from GitHub Releases Page.
To set up the stable package repository and install the latest version:
echo "deb [trusted=yes] http://packages.o1test.net $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/mina.list sudo apt-get install --yes apt-transport-https sudo apt-get update sudo apt-get install --yes curl unzip mina-mainnet=1.3.1.2-25388a0Verify that the daemon is installed correctly: mina version
The expected output is:
Commit 25388a0fed9695e8e9d04f75f50c2bae1c9c80db on branch masterStart a standalone mina node
Note: If using Hetzner hosting, refer to Networking troubleshooting guidance before starting a node.
To start a Mina node instance and connect to the live network:
mina daemon --peer-list-url https://storage.googleapis.com/seed-lists/mainnet_seeds.txtMina uses peer-to-peer protocol, connecting to seed peers for network initiation.
If you have a key with MINA stake and wish to produce blocks:
mina daemon --peer-list-url https://storage.googleapis.com/seed-lists/mainnet_seeds.txt \ --block-producer-key ~/keys/my-walletHere, ~/keys/my-wallet
is the path to your private key.
Stop the standalone node
Pause the existing mina daemon process by pressing Ctrl+C.
Start a mina node with auto-restart flows
After confirming functionality with the standalone process, set up mina with auto-restart workflows for continued operation after logout and automatic restart on machine reboot.
Create and customize the .mina-env
For block production or configuration customization:
Create the ~/.mina-env
file.
For block production, add configuration (replace <BLOCK_PRODUCER_KEY_PATH>
):
- If not producing blocks, keep
~/.mina-env
empty. - To change mina's configuration, specify flags with space-separated arguments in
EXTRA_FLAGS
.
Start a Mina node instance and connect
Run the command:
systemctl --user daemon-reload systemctl --user start mina systemctl --user enable mina sudo loginctl enable-lingerThis allows the node to run after logout and restart automatically on machine reboots.
Check connectivity
Monitor the running mina process and auto-restarts.
- Check if Mina had trouble starting:
- Stop Mina and disable automatic restart:
- Manually restart Mina:
- View logs:
In some cases:
journalctl --user-unit mina -n 1000 -fMonitor mina client status
In a different terminal:
mina client statusUpon initial startup, it may take time for mina client status
to connect. If you see "Error: daemon not running," wait and try again.
The expected response includes:
...Peers: Total: 4 (...) ...Sync Status: BootstrapBootstrap indicates syncing, which can take time. Later, it moves to Sync Status: Catchup, gathering recent blocks. Upon reaching Synced, it's successfully connected.
Troubleshoot port issues causing prolonged Bootstrap state.
With a synced node, explore advanced daemon features like Sending a payment, Staking & Delegating. Check out our guide on staking MINA with validators to earn MINA tokens.