{"id":13803745,"url":"https://github.com/NethermindEth/juno","last_synced_at":"2025-05-13T16:32:35.409Z","repository":{"id":37021963,"uuid":"449088368","full_name":"NethermindEth/juno","owner":"NethermindEth","description":"Starknet client implementation.","archived":false,"fork":false,"pushed_at":"2025-05-12T12:19:47.000Z","size":654632,"stargazers_count":423,"open_issues_count":117,"forks_count":199,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-05-12T12:39:56.333Z","etag":null,"topics":["cairolang","ethereum","go","golang","juno","layer2","nubia","rest-api","starknet","starks"],"latest_commit_sha":null,"homepage":"https://juno.nethermind.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NethermindEth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-01-18T00:22:14.000Z","updated_at":"2025-05-10T12:43:17.000Z","dependencies_parsed_at":"2023-09-23T04:14:09.509Z","dependency_job_id":"a9cd3446-a8cf-411c-8cb0-cb352b279094","html_url":"https://github.com/NethermindEth/juno","commit_stats":{"total_commits":1651,"total_committers":78,"mean_commits":"21.166666666666668","dds":0.7207752877044216,"last_synced_commit":"7286fe732623343feb5909473c21727ae36f76b3"},"previous_names":[],"tags_count":74,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NethermindEth%2Fjuno","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NethermindEth%2Fjuno/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NethermindEth%2Fjuno/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NethermindEth%2Fjuno/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NethermindEth","download_url":"https://codeload.github.com/NethermindEth/juno/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253981949,"owners_count":21994363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cairolang","ethereum","go","golang","juno","layer2","nubia","rest-api","starknet","starks"],"created_at":"2024-08-04T01:00:37.467Z","updated_at":"2025-05-13T16:32:30.401Z","avatar_url":"https://github.com/NethermindEth.png","language":"Go","funding_links":[],"categories":["Additional developer resources"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/NethermindEth/juno\"\u003e\n    \u003cimg alt=\"Juno Logo\" height=\"125\" src=\"./.github/Juno_Light.png\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pkg.go.dev/github.com/NethermindEth/juno\"\u003e\n    \u003cimg src=\"https://pkg.go.dev/badge/github.com/NethermindEth/juno.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/NethermindEth/juno\"\u003e\n    \u003cimg src=\"https://goreportcard.com/badge/github.com/NethermindEth/juno\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/NethermindEth/juno/actions\"\u003e\n    \u003cimg src=\"https://github.com/NethermindEth/juno/actions/workflows/juno-test.yml/badge.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/NethermindEth/juno\"\u003e\n    \u003cimg src=\"https://codecov.io/gh/NethermindEth/juno/branch/main/graph/badge.svg\"\u003e\n  \u003c/a\u003e\n\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://discord.gg/TcHbSZ9ATd\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Discord-5865F2?style=for-the-badge\u0026logo=discord\u0026logoColor=white\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://twitter.com/NethermindStark\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Twitter-1DA1F2?style=for-the-badge\u0026logo=twitter\u0026logoColor=white\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://t.me/+skAz9cUvo_AzZWM8\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Telegram-2CA5E0?style=for-the-badge\u0026logo=telegram\u0026logoColor=white\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eJuno\u003c/b\u003e is a golang \u003ca href=\"https://starknet.io/\"\u003eStarknet\u003c/a\u003e node implementation by \u003ca href=\"https://nethermind.io/\"\u003eNethermind\u003c/a\u003e with the aim of decentralising Starknet.\n\u003c/p\u003e\n\n\u003e **📌 Looking for a Starknet RPC Provider?**\n\u003e\n\u003e Access Nethermind's Starknet RPC service for free at https://data.voyager.online.\n\n## ⚙️ Installation\n\n### Prerequisites\n\n- Golang 1.22 or higher is required to build and run the project. You can find the installer on\n  the official Golang [download](https://go.dev/doc/install) page.\n- [Rust](https://www.rust-lang.org/tools/install).\n- A C compiler: `gcc` or `clang`.\n- Install `jemalloc` and `pkg-config` on your system:\n  \n  - macOS\n\n    ```bash\n    brew install jemalloc\n    brew install pkg-config\n    ```\n\n  - Ubuntu\n\n    ```bash\n    sudo apt-get install -y libjemalloc-dev\n    sudo apt-get install -y pkg-config\n    ```\n\n- To ensure a successful build, you either need to synchronize the tags from the upstream repository or create a new tag.\n\n### Build and Run\n\n```shell\nmake juno\n./build/juno\n```\nUse the `--help` flag for configuration information.\nFlags and their values can also be placed in a `.yaml` file that is passed in through `--config`.\n\n### Run with Docker\n\nTo run Juno with Docker, use the following command. Make sure to create the `$HOME/juno` directory on your local machine before running the command.\n\n```shell\ndocker run -d \\\n  --name juno \\\n  -p 6060:6060 \\\n  -v $HOME/juno:/var/lib/juno \\\n  nethermind/juno \\\n  --http \\\n  --http-port 6060 \\\n  --http-host 0.0.0.0 \\\n  --db-path /var/lib/juno \\\n  --eth-node \u003cYOUR-ETH-NODE\u003e\n```\n\nYou should replace `\u003cYOUR-ETH-NODE\u003e `with your actual Ethereum node address.\nIf you're using Infura, your Ethereum node address might look something like: `wss://mainnet.infura.io/ws/v3/your-infura-project-id`.\nMake sure you are using the websocket URL `ws`/`wss` and not the http URL `http`/`https`.\n\nTo view logs from the Docker container, use the following command:\n\n```shell\ndocker logs -f juno\n```\n\n## 📸 Snapshots\n\nUse the provided snapshots to quickly sync your Juno node with the current state of the network. \n\n#### Mainnet\n\n| Version | Download Link |\n| ------- | ------------- |\n| **\u003e=v0.9.2**  | [**juno_mainnet.tar**](https://juno-snapshots.nethermind.dev/files/mainnet/latest) |\n\n#### Sepolia\n\n| Version | Download Link |\n| ------- | ------------- |\n| **\u003e=v0.9.2** | [**juno_sepolia.tar**](https://juno-snapshots.nethermind.dev/files/sepolia/latest) |\n\n### Getting the size for each snapshot\n```console\n$date\nThu  1 Aug 2024 09:49:30 BST\n\n$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 }'\n172.47 GB\n\n$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 }'\n5.67 GB\n```\n\n### Run Juno Using Snapshot\n\n1. **Download Snapshot**\n\n   Fetch the snapshot from the provided URL:\n\n   ```bash\n   wget -O juno_mainnet.tar https://juno-snapshots.nethermind.dev/files/mainnet/latest\n   ```\n\n2. **Prepare Directory**\n\n   Ensure you have a directory at `$HOME/snapshots`. If it doesn't exist yet, create it:\n\n   ```bash\n   mkdir -p $HOME/snapshots\n   ```\n\n3. **Extract Tarball**\n\n   Extract the contents of the `.tar` file:\n\n   ```bash\n   tar -xvf juno_mainnet.tar -C $HOME/snapshots\n   ```\n\n4. **Run Juno**\n\n   Execute the Docker command to run Juno, ensuring that you're using the correct snapshot path `$HOME/snapshots/juno_mainnet`:\n\n   ```bash\n   docker run -d \\\n     --name juno \\\n     -p 6060:6060 \\\n     -v $HOME/snapshots/juno_mainnet:/var/lib/juno \\\n     nethermind/juno \\\n     --http \\\n     --http-port 6060 \\\n     --http-host 0.0.0.0 \\\n     --db-path /var/lib/juno \\\n     --eth-node \u003cYOUR-ETH-NODE\u003e\n   ```\n\nAfter following these steps, Juno should be up and running on your machine, utilizing the provided snapshot.\n\n## ✔ Supported Features\n\n- Starknet [v0.13.1](https://docs.starknet.io/starknet-versions/version-notes/) support.\n- JSON-RPC [v0.7.0](https://github.com/starkware-libs/starknet-specs/releases/tag/v0.7.0-rc2) (Available under `/v0_7` and default`/` endpoints)\n  - `starknet_chainId`\n  - `starknet_blockNumber`\n  - `starknet_blockHashAndNumber`\n  - `starknet_getBlockWithTxHashes`\n  - `starknet_getBlockWithTxs`\n  - `starknet_getBlockWithReceipts`\n  - `starknet_getTransactionByHash`\n  - `starknet_getTransactionReceipt`\n  - `starknet_getBlockTransactionCount`\n  - `starknet_getTransactionByBlockIdAndIndex`\n  - `starknet_getStateUpdate`\n  - `starknet_getNonce`\n  - `starknet_getStorageAt`\n  - `starknet_getTransactionStatus`\n  - `starknet_getClassHashAt`\n  - `starknet_getClass`\n  - `starknet_getClassAt`\n  - `starknet_syncing`\n  - `starknet_getEvents`\n  - `starknet_call`\n  - `starknet_estimateFee`\n  - `starknet_addInvokeTransaction`\n  - `starknet_addDeclareTransaction`\n  - `starknet_addDeployAccountTransaction`\n  - `starkent_estimateMessageFee`\n  - `starknet_traceTransaction`\n  - `starknet_traceBlockTransactions`\n  - `starknet_simulateTransactions`\n  - `starknet_specVersion` \n  \n- Juno's JSON-RPC:\n  - `juno_version`\n- JSON-RPC [v0.6.0](https://github.com/starkware-libs/starknet-specs/releases/tag/v0.6.0) (Available under `/v0_6` endpoint)\n- Integration of CairoVM. \n- Verification of State from L1.\n- Handle L1 and L2 Reorgs.\n- Starknet state construction and storage using a path-based Merkle Patricia trie.\n- Feeder gateway synchronisation of Blocks, Transactions, Receipts, State Updates and Classes.\n- Block and Transaction hash verification.\n\n## 🛣 Roadmap\n\n### Phase 1: Permissionless access to Starknet ✅\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003c/summary\u003e\n\n* [X] Flat DB implementation of trie\n* [X] Go implementation of crypto primitives\n  * [X] Pedersen hash\n  * [X] Starknet_Keccak\n  * [X] Felt\n* [X] Feeder gateway synchronisation\n  * [X] State Update\n  * [X] Blocks\n  * [X] Transactions\n  * [X] Class\n* [X] Implement the following core data structures, and their Hash calculations\n  * [X] Blocks\n  * [X] Transactions and Transaction Receipts\n  * [X] Contracts and Classes\n* [X] Storing blocks, transactions and State updates in a local DB\n* [X] Basic RPC (in progress)\n  * [X] `starknet_chainId`\n  * [X] `starknet_blockNumber`\n  * [X] `starknet_blockHashAndNumber`\n  * [X] `starknet_getBlockWithTxHashes`\n  * [X] `starknet_getBlockWithTxs`\n  * [X] `starknet_getTransactionByHash`\n  * [X] `starknet_getTransactionReceipt`\n  * [X] `starknet_getBlockTransactionCount`\n  * [X] `starknet_getTransactionByBlockIdAndIndex`\n  * [X] `starknet_getStateUpdate`\n\n\u003c/details\u003e\n\n### Phase 2: Full JSON RPC Support ✅\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003c/summary\u003e\n\nThe focus of Phase 2 will be to Verify the state from layer 1 and implement the remaining JSON-RPC endpoints.\n\n* [X] Starknet v0.11.0 support\n    * [X] Poseidon state trie support\n* [X] Blockchain: implement blockchain reorganization logic.\n* [X] Synchronisation: implement verification of state from layer 1.\n* [X] JSON-RPC API [v0.3.0](https://github.com/starkware-libs/starknet-specs/releases/tag/v0.3.0):\n    * [X] Implement the remaining endpoints:\n        * [X] `starknet_syncing`\n        * [X] `starknet_getNonce`\n        * [X] `starknet_getStorageAt`\n        * [X] `starknet_getClassHashAt`\n        * [X] `starknet_getClass`\n        * [X] `starknet_getClassAt`\n        * [X] `starknet_getEvents`\n* [X] Integration of CairoVM:\n  * [X] `starknet_call`\n  * [X] `starknet_estimateFee`\n* [X] JSON-RPC Write API [v0.3.0](https://github.com/starkware-libs/starknet-specs/releases/tag/v0.3.0):\n    * [X] `starknet_addInvokeTransaction`\n    * [X] `starknet_addDeclareTransaction`\n    * [X] `starknet_addDeployAccountTransaction`\n\n\u003c/details\u003e\n\n### Phase 3: Starknet decentralization begins 🚧\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003c/summary\u003e\n\nJuno can synchronize Starknet state from other full nodes with the aim of decentralizing Starknet by removing the dependency from the centralized sequencer.\n\n\nSnap sync is implemented, significantly reducing sync times.\n\n\u003c/details\u003e\n  \n### Phase 4: Juno becomes a Starknet Sequencer 🔜\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003c/summary\u003e\n\nThe decentralization of Starknet is complete! Juno becomes a sequencer and participates in L2 consensus to secure the network. Juno has multiple modes of operation:\n‍\n\n•   Light client: provides fast permissionless access to Starknet with minimal verification.\n\n•   Full Node: complete verification of Starknet state along with transaction execution.\n\n•   Sequencer: secure the network by taking part in the L2 consensus mechanism.\n\n\u003c/details\u003e\n\n\n## 👍 Contribute\n\nWe welcome PRs from external contributors and would love to help you get up to speed.\nLet us know you're interested in the [Discord server](https://discord.gg/TcHbSZ9ATd) and we can discuss good first issues.\nThere are also many other ways to contribute. Here are some ideas:\n\n* Run a node.\n* Add a [GitHub Star](https://github.com/NethermindEth/juno/stargazers) to the project.\n* [Tweet](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2FNethermindEth%2Fjuno\u0026via=nethermindeth\u0026text=Juno%20is%20Awesome%2C%20they%20are%20working%20hard%20to%20bring%20decentralization%20to%20StarkNet\u0026hashtags=StarkNet%2CJuno%2CEthereum) about Juno.\n* Add a Github issue if you find a [bug](https://github.com/NethermindEth/juno/issues/new?assignees=\u0026labels=\u0026template=bug_report.md\u0026title=), or you need or want a new [feature](https://github.com/NethermindEth/juno/issues/new?assignees=\u0026labels=\u0026template=feature_request.md\u0026title=).\n\n## 🤝 Partnerships\n\nTo establish a partnership with the Juno team, or if you have any suggestion or special request, feel free to reach us\nvia [email](mailto:juno@nethermind.io).\n\n## ⚠️ License\n\nCopyright (c) 2022-present, with the following [contributors](https://github.com/NethermindEth/juno/graphs/contributors).\n\nJuno is open-source software licensed under the [Apache-2.0 License](https://github.com/NethermindEth/juno/blob/main/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNethermindEth%2Fjuno","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNethermindEth%2Fjuno","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNethermindEth%2Fjuno/lists"}