Juno release notes

juno banner

Juno is a golang Starknet node implementation by Nethermind with the aim of decentralizing Starknet.

See the official Juno GitHub repository for more details.

v0.7.3

Support for upcoming Starknet v0.12.3, improved RPC performance with a new global class cache, allowing for higher request throughput and optimized resource usage. We’ve updated blockifier, which includes an important wallet integration fix. On top of that, expect new metrics and ongoing enhancements to the P2P layer, among other improvements. Here’s what’s new:

Added

  • Support for Starknet v0.12.3

  • A global class cache to the VM that enhances overall RPC throughput.
    PR by @omerfirmak in 1401

  • A new flag, max-vms, to control the maximum number of VM instances for concurrent RPC calls, optimizing resource usage
    PR by @omerfirmak in #1378.

Changed

  • The blockifier library has been updated, now supporting the query bit in the version field for transactions.
    PR by @joshklop in #1401.

  • Subscription handling has been moved to the synchronizer for improved efficiency.
    PR by @joshklop in #1373.

  • Ongoing enhancements to the P2P layer, including the implementation of a Receipt Handler and Adapter and a new GetBlockBodies feature.
    PRs by @IronGauntlets in #1352 and by @kirugan in #1359.

  • Prometheus metrics have been expanded to include version information, latency on Transaction.Commit(), and read metrics on blockchain operations.
    PRs by @omerfirmak in #1394, #1396, and #1395.

  • Kubernetes pods now have a correctly set GOMAXPROCS setting, aligning performance with CPU resources.
    PR by @omerfirmak in #1397.

  • Fallback to feeder traces for blocks ⇐ 0.12.2.
    PR by @omerfirmak in #1405.

Fixed

  • Resolved an issue with event emission on sync step failure for more reliable synchronization.
    PR by @aminsato in #1387.

  • Refactored websocket error conditions for improved stability and error handling.
    PR by @joshklop in #1400.

Docker Image

You can pull the Docker image for this release with the following command:

docker pull nethermind/juno:v0.7.3

v0.7.0

The primary goal of this release is to introduce support for Starknet JSON-RPC v0.5.0. Juno now supports multiple versions via /v0_5 and /v0_4 endpoints. The default version at the root / endpoint has been updated from 0.4.0 to 0.5.0.

🌟 Added

  • Starknet v0.5.0 Compatibility:

    • Implemented starknet_specVersion @omerfirmak

    • Renamed juno_getTransactionStatus to starknet_getTransactionStatus. @omerfirmak

    • Removed pendingTransactions endpoint for cleanup. @omerfirmak

    • Added new fields like execution resources and message hash to RPC receipt. @omerfirmak

    • Building and calculating state diffs. @omerfirmak

    • Make starknet_traceBlockTransactions get a block id @kirugan

    • Add txn type to traces

    • Add message_hash field for L1_HANDLER_TXN_RECEIPT

    • Add starknet_getTransactionStatus and remove starknet_pendingTransactions

  • Support multiple RPC versions: v0.4.0 and v0.5.0 @omerfirmak

  • Performance Metrics: Moved metric counting out of various components for cleaner code. @omerfirmak

  • Websocket Enhancements: Full-duplex comms and fixes related to over-reading websocket requests. @joshklop

πŸ”„ Changed

  • RPC Optimization: Reduced allocations in RPC requests for better performance. @joshklop

  • Refactored Error Handling: Improved global error usage and better error handling in various components. @omerfirmak

πŸ›  Fixed

  • Websocket Reading: Fixed over-reading issues in Websocket requests.@joshklop

  • Error Handling: Resolved potential nil pointer dereferences and panic issues. @omerfirmak

πŸš€ Deployment and CI/CD

  • Various CI/CD pipeline improvements for better automation. @wojciechos and @ToluwalopeAyo

βš™οΈ Docker Image

You can pull the Docker image for this release with:

docker pull nethermind/juno:v0.7.0

v0.6.0

🌟 Added

  • New Trace RPC Methods:

    • starknet_traceTransaction

    • starknet_traceBlockTransactions

    • starknet_simulateTransactions

  • Juno RPC Schema: A dedicated schema to streamline RPC interactions for Juno’s method.

  • Juno Console Enhancement: Pretty printing of Juno console logs for an enriched user experience.

  • Comprehensive Documentation: Official documentation now hosted on GitHub Pages.

πŸ›  Fixed

  • RPC Schema Consistency: Revised to ensure our RPC schema is consistent with the Starknet specification.

βš™οΈ Command-line Switches Update

Command-line switches have been restructured to provide clearer access control:

docker run -d
--name juno
-p $httpPort:$httpPort
-p $metricsPort:$metricsPort
-v /root/juno:/var/lib/juno
nethermind/juno:v0.6.0
--db-path /var/lib/juno
--http
--http-port $httpPort
--metrics
--metrics-port $metricsPort
--eth-node <YOUR-ETH-NODE>

(Note: Ensure to adjust the variables like $httpPort, $metricsPort and others as per your configuration.)

πŸ” Migration Notes

  • Database Migration: This version introduces database changes due to our work focus on peer-to-peer (p2p) communication. These changes may result in extended migration times. For faster sync, we recommend users to utilize snapshots.

v0.5.1

This release adds support for the Starknet v0.12.2.

Added

  • Support for Starknet v0.12.2

v0.5.0

This release adds support for the upcoming Starknet v0.12.1 upgrade and includes compatibility with v0.4.0 of the RPC specification.

Added

  • Support for Starknet v0.12.1

  • Compatibility with v0.4.0 of the RPC specification

  • New RPC method: starknet_estimateMessageFee

  • Health Check Endpoint: A GET request to the / endpoint will now return a 200 status code for a healthy Juno node

  • Added Prometheus metrics support: Use --metrics and --metrics-port to enable this feature

Changed

  • Adjusted worker number for sync process, improving performance

  • Updated blockifier for starknet v0.12.1

Fixed

  • Resolved issues causing context canceled errors in writing RPC methods

  • Mapped gateway errors to write API RPC errors, improving error handling

Added

Changed

Fixed

v0.4.0

This release has breaking changes and database is not compatible with the previous version.

Added

  • New RPC Methods:

    • starknet_call

    • starknet_estimateFee

    • starknet_addDeclareTransaction

    • starknet_addDeployAccountTransaction

    • starknet_addInvokeTransaction

    • juno_getTransactionStatus

    • juno_version

  • L1 Verifier: Verification of state from Layer 1 has been implemented.

  • Block Reorg Detection and Handling: A feature to detect and handle block reorganizations has been implemented.

  • gRPC Service: To accommodate users requiring direct access to the database, a gRPC service has been exposed.

  • Database Migration: The system has been improved to handle database changes more gracefully. It’s no longer necessary to sync from the start when some database changes occur.

  • Starknet v0.12.0 support: includes integration with the Rust VM.

Changed

  • Performance Enhancements: Several adjustments and improvements have been made to increase the performance. These changes have resulted in ~30% reduction in sync time.

v0.3.1

Added

  • Fetch and store compiled classes for each Sierra class.

Changed

  • Updated the behavior of synced nodes, which will now return false to starknet_syncing.

Fixed

  • Resolved issue with NumAsHex(0) being omitted in RPC.

  • Fixed a Goerli sync issue by relaxing decoder max array elements limit.

Full Changelog: [v0.3.0…​v0.3.1]

v0.3.0

Added

  • Starknet v0.11.2 support

  • History for contracts, nonce, and class hash.

  • Implemented StateSnapshot.

  • New RPC endpoints:

    • starknet_syncing

    • starknet_getNonce

    • starknet_getStorageAt

    • starknet_getClassHashAt

    • starknet_getClass

    • starknet_getClassAt

    • starknet_getEvents

For new RPC endpoints to fully work with data before the new version, the node needs to be resynced.

Changed

  • Optimized TransactionStorage encoding and refactored memStorage.

  • Refactored RPC implementation for better organization and maintainability.

  • Parallelized and refactored sync tests for faster execution, improved readability, and maintainability.

Fixed

  • Updated handling of non-existent keys to return a zero value.

Full Changelog: v0.3.0…​v0.3.1

v0.2.2

This patch release fixes handling of block versioning and ensures compatibility with non-sem-ver compliant Starknet.

Fixed

  • Ignore or add digits to block version string as necessary.

Full Changelog: v0.2.1…​v0.2.2

v0.2.1

This minor release introduces an important optimization that enhances sync performance.

  • Update gnark-crypto version:

    • Implement precomputed point multiplication results for Pedersen hash operations.

Full Changelog: v0.2.0…​v0.2.1

v0.2.0

This release adds support for Staknet v0.11.0.

This release has breaking changes and database is not compatible with the previous version.

Added

  • Starknet v0.11.0 support:

    • Add Poseidon hash for new state commitment.

    • Add DeclareTransaction version 2.

    • Add and Store Cairo 1/Sierra class definition and hash calculations.

  • pprof option is added for profiling and monitoring.

  • Verify Class Hashes.

Changed

  • Starknet v0.11.0 support:

  • Rename the verbosity option to log-level and log-level accepts string instead of uint8. See help for details.

  • network option accepts string instead of uint8. See help for details.

  • Database table is updated to account for Starknet v0.11.0 changes.

Removed

  • Remove metrics and eth-node options since they are not used.

Fixed

  • Graceful shutdown: ensure all services have returned before exiting.

Full Changelog: v0.1.0…​v0.2.0

v0.1.0

This is Juno’s first release (compatible with Starknet v0.10.3) with the following features:

  • Starknet state construction and storage using a path-based Merkle Patricia trie.

  • Pedersen and starknet_keccak hash implementation over starknet field.

  • Feeder gateway synchronization of Blocks, Transactions, Receipts, State Updates and Classes.

  • Block and Transaction hash verification.

  • JSON-RPC Endpoints:

    • starknet_chainId

    • starknet_blockNumber

    • starknet_blockHashAndNumber

    • starknet_getBlockWithTxHashes

    • starknet_getBlockWithTxs

    • starknet_getTransactionByHash

    • starknet_getTransactionReceipt

    • starknet_getBlockTransactionCount

    • starknet_getTransactionByBlockIdAndIndex

    • starknet_getStateUpdate