MiniMina is a command line tool for spinning up Mina networks locally on a user's computer. It supports both Docker Compose and native process deployment modes, enabling integration tests of the Mina protocol outside of GCP. For design details, see the RFC.
- Docker - required for Docker mode. See docker install.
- Rust & Cargo - required for building from source. See Rust install.
cd src/app/minimina
cargo build --release
cp target/release/minimina ~/.local/binAssuming ~/.local/bin is on your $PATH, minimina will be available from the command line.
echo "deb [trusted=yes] http://packages.o1test.net ubuntu stable" | sudo tee /etc/apt/sources.list.d/mina.list
sudo apt-get update
sudo apt-get install -y miniminaThe
stablerepository contains the release version, whileunstablemirrors the current state of the main branch.
cargo testminimina --help
minimina network --help
minimina node --helpCreate a local blockchain network with default settings:
minimina network createminimina network start
minimina network stop
minimina network deleteminimina network info
minimina network statusThe default network is stored at ~/.minimina/default/ (override with $MINIMINA_HOME):
~/.minimina/default/
├── docker-compose.yaml
├── network.json
├── services.json
├── genesis_ledger.json
├── create_schema.sql
├── zkapp_tables.sql
├── libp2p-keypairs/ (12 files)
└── network-keypairs/ (12 files)
| Node | Role | GraphQL |
|---|---|---|
mina-seed-1 |
Seed | localhost:3101 |
mina-bp-1 |
Block producer | localhost:4001 |
mina-bp-2 |
Block producer | localhost:4006 |
mina-snark-worker-1 |
SNARK worker | - |
mina-snark-coordinator |
SNARK coordinator | localhost:7001 |
mina-archive |
Archive node | localhost:5006 |
Logs:
minimina node logs -n <node-name> # JSON logs
minimina node logs -n <node-name> --raw # raw logsStart/Stop individual nodes:
minimina node stop -n <node-name>
minimina node start -n <node-name>
minimina node start -n <node-name> --fresh-state
minimina node start -n <node-name> --import-accounts
minimina node start -n <node-name> --graphql-filtered-logsDump data:
minimina node dump-precomputed-blocks -n <node-name>
minimina node dump-archive-data -n <node-name>
minimina node run-replayer -n <node-name>Pre-configured test networks are available in ./tests/data/:
Large network:
minimina network create \
-g ./tests/data/large_network/genesis_ledger.json \
-t ./tests/data/large_network/topology.json \
-n large-networkSmall network:
minimina network create \
-g ./tests/data/small_network/genesis_ledger.json \
-t ./tests/data/small_network/topology.json \
-n small-networkManage custom networks with the same commands, using -n <name>:
minimina network start -n large-network
minimina network status -n large-network
minimina network stop -n large-network
minimina network delete -n large-networkTest data is in tests/data/uptime_service_network.
- Populate
app_config.jsonandminasheets.jsonwith AWS S3 and Google Sheets credentials - Rename
uptime_service_config_testtouptime_service_config - Create and start:
minimina network create \
-n uptime \
-t tests/data/uptime_service_network/topology.json \
-g tests/data/uptime_service_network/genesis_ledger.json
minimina network start -n uptimeMiniMina supports two deployment modes:
- Docker mode (
src/docker/): Uses Docker Compose to manage containerized Mina nodes - Native mode (
src/native/): Spawns Mina processes directly on the host machine
MiniMina is designed to work with Lucy (the Mina integration test executive). Lucy generates network topology and genesis files, then uses MiniMina to create and manage the test network:
- Lucy generates topology and genesis files
- Lucy calls
minimina network createwith those files - MiniMina returns GraphQL endpoints and log paths
- Lucy executes integration tests via GraphQL
- Lucy can start/stop individual nodes during tests
- Lucy calls
minimina network deleteto tear down
This project is licensed under the MIT License.