Home

Awesome

<p align="center"> <a href="https://github.com/NethermindEth/juno"> <img alt="Juno Logo" height="125" src="./.github/Juno_Light.png"> </a> <br> </p> <p align="center"> <a href="https://pkg.go.dev/github.com/NethermindEth/juno"> <img src="https://pkg.go.dev/badge/github.com/NethermindEth/juno.svg"> </a> <a href="https://goreportcard.com/report/github.com/NethermindEth/juno"> <img src="https://goreportcard.com/badge/github.com/NethermindEth/juno"> </a> <a href="https://github.com/NethermindEth/juno/actions"> <img src="https://github.com/NethermindEth/juno/actions/workflows/juno-test.yml/badge.svg"> </a> <a href="https://codecov.io/gh/NethermindEth/juno"> <img src="https://codecov.io/gh/NethermindEth/juno/branch/main/graph/badge.svg"> </a> </p> <p align="center"> <a href="https://discord.gg/TcHbSZ9ATd"> <img src="https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white"> </a> <a href="https://twitter.com/NethermindStark"> <img src="https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge&logo=twitter&logoColor=white"> </a> <a href="https://t.me/+skAz9cUvo_AzZWM8"> <img src="https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white"> </a> </p> <p align="center"> <b>Juno</b> is a golang <a href="https://starknet.io/">Starknet</a> node implementation by <a href="https://nethermind.io/">Nethermind</a> with the aim of decentralising Starknet. </p>

šŸ“Œ Looking for a Starknet RPC Provider?

Access Nethermind's Starknet RPC service for free at https://data.voyager.online.

āš™ļø Installation

Prerequisites

Build and Run

make juno
./build/juno

Use the --help flag for configuration information. Flags and their values can also be placed in a .yaml file that is passed in through --config.

Run with Docker

To run Juno with Docker, use the following command. Make sure to create the $HOME/juno directory on your local machine before running the command.

docker run -d \
  --name juno \
  -p 6060:6060 \
  -v $HOME/juno:/var/lib/juno \
  nethermind/juno \
  --http \
  --http-port 6060 \
  --http-host 0.0.0.0 \
  --db-path /var/lib/juno \
  --eth-node <YOUR-ETH-NODE>

You should replace <YOUR-ETH-NODE> with your actual Ethereum node address. If you're using Infura, your Ethereum node address might look something like: wss://mainnet.infura.io/ws/v3/your-infura-project-id. Make sure you are using the websocket URL ws/wss and not the http URL http/https.

To view logs from the Docker container, use the following command:

docker logs -f juno

šŸ“ø Snapshots

Use the provided snapshots to quickly sync your Juno node with the current state of the network.

Mainnet

VersionDownload Link
>=v0.9.2juno_mainnet.tar

Sepolia

VersionDownload Link
>=v0.9.2juno_sepolia.tar

Sepolia-Integration

VersionDownload Link
>=v0.9.2juno_sepolia_integration.tar

Getting the size for each snapshot

$date
Thu  1 Aug 2024 09:49:30 BST

$curl -s -I -L https://juno-snapshots.nethermind.dev/files/mainnet/latest | gawk -v IGNORECASE=1 '/^Content-Length/ { printf "%.2f GB\n", $2/1024/1024/1024 }'
172.47 GB

$curl -s -I -L https://juno-snapshots.nethermind.dev/files/sepolia/latest | gawk -v IGNORECASE=1 '/^Content-Length/ { printf "%.2f GB\n", $2/1024/1024/1024 }'
5.67 GB

$curl -s -I -L https://juno-snapshots.nethermind.dev/files/sepolia-integration/latest | gawk -v IGNORECASE=1 '/^Content-Length/ { printf "%.2f GB\n", $2/1024/1024/1024 }'
2.4 GB

Run Juno Using Snapshot

  1. Download Snapshot

    Fetch the snapshot from the provided URL:

    wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/files/mainnet/latest
    
  2. Prepare Directory

    Ensure you have a directory at $HOME/snapshots. If it doesn't exist yet, create it:

    mkdir -p $HOME/snapshots
    
  3. Extract Tarball

    Extract the contents of the .tar file:

    tar -xvf juno_mainnet.tar -C $HOME/snapshots
    
  4. Run Juno

    Execute the Docker command to run Juno, ensuring that you're using the correct snapshot path $HOME/snapshots/juno_mainnet:

    docker run -d \
      --name juno \
      -p 6060:6060 \
      -v $HOME/snapshots/juno_mainnet:/var/lib/juno \
      nethermind/juno \
      --http \
      --http-port 6060 \
      --http-host 0.0.0.0 \
      --db-path /var/lib/juno \
      --eth-node <YOUR-ETH-NODE>
    

After following these steps, Juno should be up and running on your machine, utilizing the provided snapshot.

āœ” Supported Features

šŸ›£ Roadmap

Phase 1: Permissionless access to Starknet āœ…

<details> <summary></summary> </details>

Phase 2: Full JSON RPC Support āœ…

<details> <summary></summary>

The focus of Phase 2 will be to Verify the state from layer 1 and implement the remaining JSON-RPC endpoints.

</details>

Phase 3: Starknet decentralization begins šŸš§

<details> <summary></summary>

Juno can synchronize Starknet state from other full nodes with the aim of decentralizing Starknet by removing the dependency from the centralized sequencer.

Snap sync is implemented, significantly reducing sync times.

</details>

Phase 4: Juno becomes a Starknet Sequencer šŸ”œ

<details> <summary></summary>

The decentralization of Starknet is complete! Juno becomes a sequencer and participates in L2 consensus to secure the network. Juno has multiple modes of operation: ā€

ā€¢ Light client: provides fast permissionless access to Starknet with minimal verification.

ā€¢ Full Node: complete verification of Starknet state along with transaction execution.

ā€¢ Sequencer: secure the network by taking part in the L2 consensus mechanism.

</details>

šŸ‘ Contribute

We welcome PRs from external contributors and would love to help you get up to speed. Let us know you're interested in the Discord server and we can discuss good first issues. There are also many other ways to contribute. Here are some ideas:

šŸ¤ Partnerships

To establish a partnership with the Juno team, or if you have any suggestion or special request, feel free to reach us via email.

āš ļø License

Copyright (c) 2022-present, with the following contributors.

Juno is open-source software licensed under the Apache-2.0 License.