Git Product home page Git Product logo

The Open Mina Node

Openmina Daily Changelog release-badge Apache licensed

The Open Mina Node is a Mina node written completely in Rust and capable of verifying blocks of transactions, producing blocks and generating SNARKs.

In the design of the Open Mina node, we are utilizing much of the same logic as in the Mina Web Node. The key difference is that unlike the Web Node, which is an in-browser node with limited resources, the Open Mina node is able to perform resource-intensive tasks such as SNARK proof generation.

Overview of the Node’s current functionalities

Currently, with the Open Mina node, you can:

  • Connect to the network and sync up to the best tip block
  • Validate and apply new blocks and transactions to update consensus and ledger state.
  • Produce SNARKs to complete SNARK work.
  • Broadcast messages: blocks, SNARK pool

We are working on the following:

  • Produce SNARKs in Rust (currently we use OCaml subprocess for that)

In the future, we plan to implement:

  • Direct transfer of MINA funds
  • Block production
  • SNARK proof generation for transactions
  • SnarkyJS support for Rust node, thanks to which you will be able to directly inject simple transactions, such as transferring Mina funds from one account to another.
  • The ability to record/replay all blocks

How to launch (with docker compose):

Run:

docker compose up

Then visit http://localhost:8070 in your browser.

By default, docker compose up will use the latest node and frontend images available (tagged with latest), but specific versions can be selected by using the OPENMINA_TAG and OPENMINA_FRONTEND_TAG variables.

How to launch (without docker compose):

This installation guide has been tested on Debian and Ubuntu and should work on most distributions of Linux.

Pre-requisites:

Ubuntu or Debian-based Linux distribution with the following packages installed:

  • curl
  • git
  • libssl-dev
  • pkg-config

Example:

# Either using "sudo" or as the "root" user
sudo apt install curl git libssl-dev pkg-config

Steps (for Debian-based Linux distros):

Open up the command line and enter the following:

And then:

# Install rustup and set the default Rust toolchain to 1.77 (newer versions work too)
curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain 1.77
# Setup the current shell with rustup
source "$HOME/.cargo/env"
# Clone the openmina repository
git clone https://github.com/openmina/openmina.git
cd openmina/
# Build and run the node
cargo run --release -p cli node

How to launch the UI:

Prerequisites

1. Node.js v20.11.1

MacOS

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install [email protected]

Linux

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
source ~/.bashrc
nvm install 20.11.1

Windows

Download Node.js v20.11.1 from the official website, open the installer and follow the prompts to complete the installation.

2. Angular CLI v16.2.0

npm install -g @angular/[email protected]

3. Installation

Open a terminal and navigate to this project's root directory

cd PROJECT_LOCATION/openmina/frontend

Install the dependencies

npm install

Run the application

npm start

Repository Structure

  • core/ - Provides basic types needed to be shared across different components of the node.
  • ledger/ - Mina ledger implementation in Rust.
  • snark/ - Snark/Proof verification.
  • p2p/ - P2p implementation for OpenMina node.
  • node/ - Combines all the business logic of the node.
    • native/ - OS specific pieces of the node, which is used to run the node natively (Linux/Mac/Windows).
    • testing/ - Testing framework for OpenMina node.
  • cli/ - OpenMina cli.
  • frontend/ - OpenMina frontend.

Details regarding architecture

The Open Mina Documentation

OpenMina's Projects

algebra icon algebra

Libraries for finite field, elliptic curve, and polynomial arithmetic

docs icon docs

Mina documentation website

fuzzcheck-rs icon fuzzcheck-rs

Structure-aware, coverage-guided fuzzing engine for Rust functions.

go-libp2p-noise icon go-libp2p-noise

a secure channel for go-libp2p based on the Noise protocol framework

kata-containers icon kata-containers

Kata Containers is an open source project and community working to build a standard implementation of lightweight Virtual Machines (VMs) that feel and perform like containers, but provide the workload isolation and security advantages of VMs. https://katacontainers.io/

mina icon mina

Mina is a new cryptocurrency with a constant size blockchain, improving scaling while maintaining decentralization and security.

mina-frontend icon mina-frontend

mina-frontend is an Angular web application that is showing node's progress, logs and statistics.

mina-rs icon mina-rs

Rust implementation of the Mina protocol, targeting Wasm and ARM architectures.

noise icon noise

Go implementation of the Noise Protocol Framework

ocaml-gen icon ocaml-gen

This crate provides automatic generation of OCaml bindings. Refer to the rustdoc for more information.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.