Skip to main content

Plain Nodes

o1Labs maintains plain node infrastructure that provides HTTP endpoints for interacting with the Mina Rust network. These nodes offer API access and network information without requiring direct peer-to-peer connections.

Available Plain Nodes

The following plain nodes are officially maintained by o1Labs:

website/docs/developers/scripts/infrastructure/plain-nodes.txt
http://mina-rust-plain-1.gcp.o1test.net/
http://mina-rust-plain-2.gcp.o1test.net/
http://mina-rust-plain-3.gcp.o1test.net/

Node Information

  • Availability: Maintained 24/7 by o1Labs
  • Purpose: API access and network queries
  • Location: Google Cloud Platform (GCP)

Using Plain Nodes

GraphQL API Access

Plain nodes provide GraphQL API endpoints for querying network state:

website/docs/developers/scripts/infrastructure/query-daemon-status.sh
#!/bin/bash
# Usage: $0 GRAPHQL_ENDPOINT
# GRAPHQL_ENDPOINT: GraphQL endpoint URL (required, must end with /graphql)
# Example: https://mina-rust-plain-2.gcp.o1test.net/graphql

if [ -z "$1" ]; then
echo "Error: GRAPHQL_ENDPOINT is required"
echo "Usage: $0 GRAPHQL_ENDPOINT"
exit 1
fi

GRAPHQL_ENDPOINT="$1"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Read the query and create JSON payload using jq for proper escaping
QUERY=$(< "$SCRIPT_DIR/queries/daemon-status.graphql")
JSON_PAYLOAD=$(echo "{}" | jq --arg query "$QUERY" '.query = $query')
curl -s -X POST "$GRAPHQL_ENDPOINT" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD"

Network Information

You can query various network information:

website/docs/developers/scripts/infrastructure/query-block-height.sh
#!/bin/bash
# Usage: $0 GRAPHQL_ENDPOINT
# GRAPHQL_ENDPOINT: GraphQL endpoint URL (required, must end with /graphql)
# Example: https://mina-rust-plain-2.gcp.o1test.net/graphql

if [ -z "$1" ]; then
echo "Error: GRAPHQL_ENDPOINT is required"
echo "Usage: $0 GRAPHQL_ENDPOINT"
exit 1
fi

GRAPHQL_ENDPOINT="$1"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Read the query and create JSON payload using jq for proper escaping
QUERY=$(< "$SCRIPT_DIR/queries/block-height.graphql")
JSON_PAYLOAD=$(echo "{}" | jq --arg query "$QUERY" '.query = $query')
curl -s -X POST "$GRAPHQL_ENDPOINT" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD"
website/docs/developers/scripts/infrastructure/query-peers.sh
#!/bin/bash
# Usage: $0 GRAPHQL_ENDPOINT
# GRAPHQL_ENDPOINT: GraphQL endpoint URL (required, must end with /graphql)
# Example: https://mina-rust-plain-2.gcp.o1test.net/graphql

if [ -z "$1" ]; then
echo "Error: GRAPHQL_ENDPOINT is required"
echo "Usage: $0 GRAPHQL_ENDPOINT"
exit 1
fi

GRAPHQL_ENDPOINT="$1"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Read the query and create JSON payload using jq for proper escaping
QUERY=$(< "$SCRIPT_DIR/queries/peers.graphql")
JSON_PAYLOAD=$(echo "{}" | jq --arg query "$QUERY" '.query = $query')
curl -s -X POST "$GRAPHQL_ENDPOINT" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD"

API Capabilities

Blockchain Queries

  • Block information: Current and historical blocks
  • Transaction data: Transaction status and history
  • Account balances: Account information and balances
  • Network state: Consensus and sync status

Network Monitoring

  • Peer connections: Current peer list and status
  • Sync progress: Blockchain synchronization state
  • Protocol information: Network protocol version and chain ID
API Documentation

For complete API documentation, see the GraphQL API documentation which provides detailed information about available queries and mutations.

Troubleshooting

Connection Issues

If you cannot connect to plain nodes:

  1. Check network connectivity: Ensure internet access and HTTP traffic is allowed
  2. Verify URLs: Confirm you're using the correct node URLs
  3. Test manually: Try accessing the URLs in a browser
  4. Check node status: Verify the node is responding to queries

API Errors

Common API issues:

GraphQL Endpoint URL Format

When using plain node endpoints, always include /graphql at the end of the URL. The endpoint will return "HTTP method not allowed" if you omit the /graphql path.

Correct: https://mina-rust-plain-2.gcp.o1test.net/graphql

Incorrect: https://mina-rust-plain-2.gcp.o1test.net/

website/docs/developers/scripts/infrastructure/test-graphql-endpoint.sh
#!/bin/bash
# Usage: $0 GRAPHQL_ENDPOINT
# GRAPHQL_ENDPOINT: GraphQL endpoint URL (required, must end with /graphql)
# Example: https://mina-rust-plain-2.gcp.o1test.net/graphql

if [ -z "$1" ]; then
echo "Error: GRAPHQL_ENDPOINT is required"
echo "Usage: $0 GRAPHQL_ENDPOINT"
exit 1
fi

GRAPHQL_ENDPOINT="$1"

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Read the query and create JSON payload using jq for proper escaping
QUERY=$(< "$SCRIPT_DIR/queries/schema-introspection.graphql")
JSON_PAYLOAD=$(echo "{}" | jq --arg query "$QUERY" '.query = $query')
curl -s -X POST "$GRAPHQL_ENDPOINT" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD"

Updates and Maintenance

Infrastructure Updates

o1Labs maintains these plain nodes with:

  • Regular updates: Nodes are kept current with latest releases
  • Monitoring: 24/7 health monitoring and alerting
  • Load balancing: Multiple nodes ensure continuous availability
  • Performance optimization: Regular performance tuning

Communication

Infrastructure maintenance and updates are communicated through:

  • GitHub release notes
  • Project documentation updates
  • Community announcements

Deployment (o1Labs Employees Only)

o1Labs Employees Only

This section is for o1Labs employees only. If you do not have access to the required repositories, contact the platform lead.

o1Labs uses ArgoCD to maintain the infrastructure through GitOps.

To update the plain nodes infrastructure:

  1. Access the private repository: https://github.com/o1-labs/gitops-infrastructure
  2. Create a new branch for your changes
  3. Edit: applications/auto-deployed/mina-rust-standard-seeds.yaml
  4. Update the MINA_RUST_TAG variable to the desired commit or release tag (must be available as a Docker image on DockerHub)
  5. Create a pull request with your changes
  6. Ask the platform lead or rust node team lead to review and merge the PR
  7. Once merged, ArgoCD will automatically deploy the update

Reference Information