Skip to main content

Testworld Mission 2.0 Protocol Performance Testing

The Testworld Mission 2.0: Protocol Performance Testing program is here. The goal of this program is to stress test the protocol and network with Mina community members to have a high level of confidence for Mina’s upcoming mainnet upgrade that will enable easier zkApps on Mina Mainnet.

The Program gathers experienced node operators to provide the network backbone for the Testworld 2.0 testnet. Participants will perform various node operation testing tasks for different grants. Participants can perform multiple node operation tasks.

note

The Testworld Mission 2.0 network:

  • Chain ID: 332c8cc05ba8de9efc23a011f57015d8c9ec96fac81d5d3f7a06969faf4bce92
  • Git SHA-1: 4061884b18137c1182c7fcfa80f52804008a2509

The seeds.txt file location:

  • Seed List: https://storage.googleapis.com/seed-lists/testworld-2-0_seeds.txt

You must configure the node to restart automatically. Follow the instructions in Start a mina node with auto-restart flows.

Please refer to the Discord testworld-2 channel for questions or to find any configuration options.

Please note that the flag --max-connections 200 has been removed for all types of nodes.

Launching the Nodes

Testworld Mission 2.0 nodes must run with the flags specified here in order to conduct the testing.

  1. Block Producers
  2. Load Testers
  3. SNARK Workers
  4. SNARK Coordinators
  5. Archive Node

For more information about running nodes, see the Node operators docs.

Use the latest Testworld Mission 2.0 release, this release can be found at here, we will announce any future releases on the Discord testworld-2 channel. Releases are located in the GitHub Releases directory.

Block Producer

See the Block Producer hardware requirements.

You must configure the block producer node with the following flags:

--log-json
--itn-max-logs 10000
--log-snark-work-gossip true
--internal-tracing
--insecure-rest-server
--log-level Debug
--file-log-level Debug
--config-directory <path to the mina configuration directory>
--external-ip <external server IP>
--itn-keys f1F38+W3zLcc45fGZcAf9gsZ7o9Rh3ckqZQw6yOJiS4=,6GmWmMYv5oPwQd2xr6YArmU1YXYCAxQAxKH7aYnBdrk=,ZJDkF9EZlhcAU1jyvP3m9GbkhfYa0yPV+UdAqSamr1Q=,NW2Vis7S5G1B9g2l9cKh3shy9qkI1lvhid38763vZDU=,Cg/8l+JleVH8yNwXkoLawbfLHD93Do4KbttyBS7m9hQ=
--itn-graphql-port 3089
--uptime-submitter-key <uptime-keyfile path> (**same key as block producer key**)
--uptime-url https://block-producers-uptime-itn.minaprotocol.tools/v1/submit
--metrics-port 10001 (**This flag is used when using Kubernetes. The port should be closed from external access**)
--enable-peer-exchange true
--libp2p-keypair <keyfile path> (**libp2p keypair pre-generated by the Node Operator**)
--log-precomputed-blocks true
--peer-list-url (**seeds.txt URL will be distributed prior to launch**)
--generate-genesis-proof true
--block-producer-key <keyfile path> (**keys will be distributed prior to launch**)
--node-status-url https://nodestats-itn.minaprotocol.tools/submit/stats
--node-error-url https://nodestats-itn.minaprotocol.tools/submit/stats
--file-log-rotations 500

and the following environment variables:

RAYON_NUM_THREADS=6
UPTIME_PRIVKEY_PASS
MINA_LIBP2P_PASS
MINA_PRIVKEY_PASS

Load Tester

See the Load Testing hardware requirements.

You must configure Load Testing nodes with the following flags:

--log-json
--itn-max-logs 10000
--log-snark-work-gossip true
--internal-tracing
--insecure-rest-server
--log-level Debug
--file-log-level Debug
--config-directory <path to mina config>
--external-ip <external server IP>
--itn-keys f1F38+W3zLcc45fGZcAf9gsZ7o9Rh3ckqZQw6yOJiS4=,6GmWmMYv5oPwQd2xr6YArmU1YXYCAxQAxKH7aYnBdrk=,ZJDkF9EZlhcAU1jyvP3m9GbkhfYa0yPV+UdAqSamr1Q=,NW2Vis7S5G1B9g2l9cKh3shy9qkI1lvhid38763vZDU=,Cg/8l+JleVH8yNwXkoLawbfLHD93Do4KbttyBS7m9hQ=
--itn-graphql-port 3089
--uptime-submitter-key <uptime-keyfile path>
--uptime-url https://block-producers-uptime-itn.minaprotocol.tools/v1/submit
--metrics-port 10001 (**This flag is used when using Kubernetes. The port should be closed from external access**)
--enable-peer-exchange true
--libp2p-keypair <keyfile path> (**libp2p keypair pre-generated by the Node Operator**)
--log-precomputed-blocks true
--peer-list-url (**seeds.txt URL will be distributed prior to launch**)
--generate-genesis-proof true
--node-status-url https://nodestats-itn.minaprotocol.tools/submit/stats
--node-error-url https://nodestats-itn.minaprotocol.tools/submit/stats
--file-log-rotations 500

and the following environment variables:

RAYON_NUM_THREADS=6
UPTIME_PRIVKEY_PASS
MINA_LIBP2P_PASS
MINA_PRIVKEY_PASS

SNARK Workers

See the SNARK Work hardware requirements.

You must configure SNARK workers with the following flags to connect to the SNARK Coordinator nodes:

internal 
snark-worker
--proof-level full
--shutdown-on-disconnect false
--daemon-address <snark coordinator IP and port - IP:port>

and the following environment variables:

RAYON_NUM_THREADS:8

SNARK Coordinator

See the SNARK Coordinator hardware requirements.

You must configure the SNARK coordinators with the following flags:

--log-json
--itn-max-logs 10000
--log-snark-work-gossip true
--internal-tracing
--insecure-rest-server
--log-level Debug
--file-log-level Debug
--config-directory <path>
--external-ip <external server IP>
--itn-keys f1F38+W3zLcc45fGZcAf9gsZ7o9Rh3ckqZQw6yOJiS4=,6GmWmMYv5oPwQd2xr6YArmU1YXYCAxQAxKH7aYnBdrk=,ZJDkF9EZlhcAU1jyvP3m9GbkhfYa0yPV+UdAqSamr1Q=,NW2Vis7S5G1B9g2l9cKh3shy9qkI1lvhid38763vZDU=,Cg/8l+JleVH8yNwXkoLawbfLHD93Do4KbttyBS7m9hQ=
--itn-graphql-port 3089
--uptime-submitter-key <uptime-keyfile path>
--uptime-url https://block-producers-uptime-itn.minaprotocol.tools/v1/submit
--metrics-port 10001 (**This flag is used when using Kubernetes. The port should be closed from external access**)
--enable-peer-exchange true
--libp2p-keypair <keyfile path> (**libp2p keypair pre-generated by the Node Operator**)
--log-precomputed-blocks true
--peer-list-url (**seeds.txt URL will be distributed prior to launch**)
--node-status-url https://nodestats-itn.minaprotocol.tools/submit/stats
--node-error-url https://nodestats-itn.minaprotocol.tools/submit/stats
--run-snark-coordinator <public key> (**keys be distributed prior to launch**)
--snark-worker-fee 0.001
--work-selection seq
--file-log-rotations 500

and the following environment variables:

RAYON_NUM_THREADS=6
UPTIME_PRIVKEY_PASS
MINA_LIBP2P_PASS

Archive Node

See the Archive Node hardware requirements.

The archive node requires a non-block producing node and PostgreSQL database. For more information about running archive nodes, see Archive Node.

The PostgreSQL database requires two schemas:

  1. The PostgreSQL schema used by the Mina archive database: create_schema.sql.
  2. The PostgreSQL schema extensions to support zkApp commands: zkapp_tables.sql.

The non-block producing node must be configured with the following flags:

--log-json
--itn-max-logs 10000
--internal-tracing
--insecure-rest-server
--log-level Debug
--file-log-level Debug
--config-directory <path to mina config>
--external-ip <external server IP>
--itn-keys (**keys will be distributed prior to launch**)
--itn-graphql-port 3089
--uptime-submitter-key <uptime-keyfile path> (** self-generated private key for uptime service**)
--uptime-url https://block-producers-uptime-itn.minaprotocol.tools/v1/submit
--metrics-port 10001 (**This flag is used when using Kubernetes. The port should be closed from external access**)
--enable-peer-exchange true
--libp2p-keypair <keyfile path> (**libp2p keypair pre-generated by the Node Operator**)
--log-precomputed-blocks true
--peer-list-url (**seeds.txt URL will be distributed prior to launch**)
--generate-genesis-proof true
--node-status-url https://nodestats-itn.minaprotocol.tools/submit/stats
--node-error-url https://nodestats-itn.minaprotocol.tools/submit/stats
--file-log-rotations 500
--archive-address <archive_address>:<archive_port - use 3086>

and the following environment variables:

RAYON_NUM_THREADS=6
UPTIME_PRIVKEY_PASS
MINA_LIBP2P_PASS
MINA_PRIVKEY_PASS

This non-block producing node connects to the archive node with the addresses specificied in the archive-address flag, using archive port used by the archive node.

The archive node command is:

mina-archive run --metrics-port <port> --postgres-uri postgres://<postgres user>:<postgres password>@<postgres address>:<postgres port>/<postgres db> --server-port <archive port - use 3086>

Port configuration

Nodes must have the following ports public (accessible with a node’s external ip):

  • libp2p port use 8302 by default
  • itn-graphql-port configured to 3089

Generation of libp2p keypair

Each node within the network must possess its own distinct libp2p key pair. This requirement extends to block producer nodes as well, despite their utilization of a common block production key. Every node operator must generate a unique libp2p keys locally on their respective machines using the following command:

mina libp2p generate-keypair -privkey-path <path-to-the-key-file>

See Generating a Key Pair.

Node Restarts

All nodes must be set up to restart on crash. See Start a mina node with auto-restart flows.

Feedback and Questions

Thank you for participating.

Use the dedicated Discord #testworld-2 to provide feedback and ask questions related to the Testworld Mission 2.0: Protocol Performance Testing program. We look forward to hearing from you!