github ProvableHQ/snarkOS v4.0.0

latest releases: testnet-v4.2.1, testnet-v4.2.0, canary-v4.2.3...
one month ago

This is the most significant release yet since Aleo’s mainnet launched in September 2024. Most notably, it contains an upgrade to Aleo’s record model, allowing the recipient to decrypt the sender address using their account view key, which we expect will lead to an increased interest from financial institutions to accept private transactions. The release also introduces staking requirements for miners (ARC-46), transaction confirmation time improvements, and many more performance improvements.

If you want to try it out, you can build from source today or download the mainnet release from github July 22nd. Find the current release schedule at: https://provablehq.github.io/.

Please report any issues you might come across!

What's new in v4.0.0

snarkVM Consensus change

A consensus change solidifying consensus logic will occur at the following block height:
Canary - Block 7,565,000 (~July 8th, 2025 at the current block times)
Testnet - Block 9,173,000 (~July 15th, 2025 at the current block times)
Mainnet - Block 9,425,000 (~July 22th, 2025 at the current block times)

ATTENTION: Validators that do not upgrade in time will be at risk of forking and require manual intervention. Clients that do not upgrade will be at risk of halting until an upgrade occurs.

An upgrade to Aleo’s record model

At the heart of Aleo lies a revolutionary cryptographic protocol known as ZEXE, or Zero-Knowledge EXecution, which was first introduced in 2018. ZEXE was designed to enhance privacy and security in decentralized systems and was the first to introduce the record model. This model extends the UTXO model from Zcash and enables storing and encrypting arbitrary data such as user assets and application states, rather than just values of specific assets or tokens.
In the record model, the application state, along with its owner are encrypted and stored on the blockchain. Records are a fundamental data structure that can contain any arbitrary payload and are used for encoding user assets or application states. Records represent a fragment of the global state kept on chain. For example, the balance of your credits in a given account is composed by the multiple credit records that have your address as the owner.
We are introducing a couple changes. Most notably, records will now by default include a sender_ciphertext which allows the recipient to decrypt the sender address using their account view key. This opens up the avenue for financial institutions to accept private transfers, significantly improving user privacy and helping to increase the adoption of privacy-preserving technologies - in crypto and beyond.

The encryption scheme is as follows (where vk is the recipient's account view key, and G^r is the record nonce):
record_view_key := (G^vk) * r == (G^r) * vk
randomizer := Hash_PSD4( ENCRYPTION_DOMAIN || record_view_key || 1field )
sender_ciphertext := ToXCoordinate(signer_address) + randomizer

To perform decryption of the sender ciphertext, call Output::decrypt_sender_ciphertext with your account_view_key. If the given account view key does not belong to the given output record's owner, the function will return an error.
To support potential future upgrades, we also added versioning to the Record object. From ConsensusVersion::V8 onwards, old V0 credits.aleo records cannot be spent anymore - they can only be upgraded to V1 by calling a new upgrade function in credits.aleo. In other words, all records will need to be upgraded. In the process of upgrading, additional integrity checks will automatically take place with regards to correctness of the record contents. Aleo’s 4 major wallets (Puzzle, Leo, Fox and Soter) all support the new record upgrade process in their wallet applications. Moreover, a CLI tool will be made available for anyone who wishes to upgrade their records without the use of a wallet.
For more background about Aleo’s record model, check out: https://aleo.org/post/aleo-record-model-secure-efficient-blockchain/

ARC-46: Staking for Puzzle Solution Submissions

This PR implements the new features highlighted in the ARC-0046 Proposal. This ARC proposes a mechanism requiring provers on the Aleo Network to stake a specific amount of Aleo credits to be eligible to submit a specific number of solutions per epoch. This feature is programmatic, with a stepwise increase in the required amount of stake over a two-year period following the activation of this ARC.

For more information about how to stake, see: https://developer.aleo.org/concepts/network/staking

Faster transaction confirmation times

Currently, it can take half a minute for a well-connected client to detect that its transaction was confirmed, because block propagation is sometimes slow. We now ensure that when a new block is received or created, nodes send new ping messages. This should reduce block propagation time, as the old approach introduces up to 20 seconds of delay for each network hop.

Further improvements and speedups to both syncing speed and transaction confirmation times are in the works!

Doubled constraint limit

We doubled the constraint limit one can use in deploying programs, a long-time awaited feature. This is made possible due to various recent improvements in deployment verification performance. Note that the upgraded record handling does require more constraints in the proof system. Transactions involving private state will therefore require more fees. Deployments involving private state will require more fees and constraints than before. Still, the increased limit will ensure developers can write more expressive programs than before. We will continue to push deployment verification performance in order to increase this limit more in the future.

Further improvements for developers

Parallelized proving workloads can experience up to 90% proving time speedups due to a glorious one-line change. Wallets and end-users can experience up to 400% authorization speedups.

We introduced the dev-print feature. This is to give user developers more control of snarkvm's output - currently some print statements are compiled in when debug-assertions is on, but we want to elide those print statements even with debug-assertions.

We fixed the snarkos developer scan endpoint, which was previously broken.

Improvements for node operators

Cases of massive duplicated logs about staking_rewards has been fixed.
JWT-guarded RPC endpoints are now functioning for clients.

We added a --log-filter flag, that can be set instead of --verbosity. The log filter flag, essentially, works like setting RUST_LOG. If you, for example, only want to all show logs related to the BFT crate but nothing else, you can start a node like this snarkos start --log-filter=off,snarkos_node_bft=trace.

We added a /sync_status endpoint to the REST API. A call to it will return something like the following:

~> curl http://localhost:3030/mainnet/sync_status
{
"is_synced": false,
"ledger_height": 2443,
"sync_mode": "p2p",
"cdn_height": 8167950,
}
sync_mode will switch to p2p once the initial sync is done.
If the node is not connected to a CDN, the cdn_height field is omitted.

~> curl http://localhost:3030/mainnet/sync_status
{
"is_synced": false,
"ledger_height": 2795,
"sync_mode": "p2p",
"p2p_height": 8638987
}

P2p height is only added to the response once a peer is connected

Don't miss a new snarkOS release

NewReleases is sending notifications on new releases.