Juno is a golang Starknet node implementation by Nethermind with the aim of decentralising Starknet.
- Golang 1.20 or higher is required to build and run the project. You can find the installer on the official Golang download page.
- A C compiler:
gccorclang.
make juno
./build/junoUse the --help flag for configuration information.
Flags and their values can also be placed in a .yaml file that is passed in through --config.
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 \
--rpc-port 6060 \
--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.
To view logs from the Docker container, use the following command:
docker logs -f juno- Starknet state construction and storage using a path-based Merkle Patricia trie.
- Pedersen and
starknet_keccakhash implementation over starknet field. - Feeder gateway synchronisation of Blocks, Transactions, Receipts, State Updates and Classes.
- Block and Transaction hash verification.
- JSON-RPC Endpoints:
starknet_chainIdstarknet_blockNumberstarknet_blockHashAndNumberstarknet_getBlockWithTxHashesstarknet_getBlockWithTxsstarknet_getTransactionByHashstarknet_getTransactionReceiptstarknet_getBlockTransactionCountstarknet_getTransactionByBlockIdAndIndexstarknet_getStateUpdatestarknet_getNoncestarknet_getStorageAtstarknet_getClassHashAtstarknet_getClassstarknet_getClassAtstarknet_syncingstarknet_getEvents
- Flat DB implementation of trie
- Go implementation of crypto primitives
- Pedersen hash
- Starknet_Keccak
- Felt
- Feeder gateway synchronisation
- State Update
- Blocks
- Transactions
- Class
- Implement the following core data structures, and their Hash calculations
- Blocks
- Transactions and Transaction Receipts
- Contracts and Classes
- Storing blocks, transactions and State updates in a local DB
- Basic RPC (in progress)
-
starknet_chainId -
starknet_blockNumber -
starknet_blockHashAndNumber -
starknet_getBlockWithTxHashes -
starknet_getBlockWithTxs -
starknet_getTransactionByHash -
starknet_getTransactionReceipt -
starknet_getBlockTransactionCount -
starknet_getTransactionByBlockIdAndIndex -
starknet_getStateUpdate
-
The focus of Phase 2 will be to Verify the state from layer 1 and implement the remaining JSON-RPC endpoints.
- Starknet v0.11.0 support
- Poseidon state trie support
- Blockchain: implement blockchain reorganization logic.
- Synchronisation: implement verification of state from layer 1.
- JSON-RPC API v0.3.0:
- Implement the remaining endpoints:
-
starknet_syncing -
starknet_getNonce -
starknet_getStorageAt -
starknet_getClassHashAt -
starknet_getClass -
starknet_getClassAt -
starknet_getEvents
-
- Implement the remaining endpoints:
- Integration of Starknet in Rust:
-
starknet_call -
starknet_estimateFee
-
- JSON-RPC Write API v0.3.0:
-
starknet_addInvokeTransaction -
starknet_addDeclareTransaction -
starknet_addDeployAccountTransaction
-
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:
- Run a node.
- Add a GitHub Star to the project.
- Tweet about Juno.
- Add a Github issue if you find a bug, or you need or want a new feature.
To establish a partnership with the Juno team, or if you have any suggestion or special request, feel free to reach us via email.
Copyright (c) 2022-present, with the following contributors.
Juno is open-source software licensed under the Apache-2.0 License.