Programs Calls
credits.aleo
puzzle_arcade_coin_v002.aleo
token_registry.aleo
puzzle_arcade_ticket_v002.aleo
pondo_protocol.aleo
Validators
Coinbase
aleo185v9k487zd22gd5fddy05yhwch7ecw0ex6w7gwq95qalwl2trsxqqup5zc
Everstake
Aleo Network Foundation
DeFi TVL
Use the Provable SDK to build secure, private applications on Aleo. Empowering digital privacy.
refetching data...
Provable is pleased to announce the launch of Shield, a privacy-focused crypto wallet built for the next phase of digital asset adoption. As the industry confronts the limits of transparent-by-design blockchains, Shield delivers the first complete infrastructure for fully private transactions on Aleo: a private vault for storing and moving wealth without exposure. Shield arrives at a critical moment. Stablecoins processed nearly $9 trillion in adjusted transaction volume over the past year, yet most of that activity still runs on public blockchains where balances, counterparties, and transaction histories remain permanently exposed. For individuals seeking to protect their wealth and enterprises managing payroll, treasury operations, and cross-border settlement, full onchain visibility is not just impractical. It is untenable. This tension between transparency and privacy has reached the highest levels of the industry. The U.S. Securities and Exchange Commission recently convened a public roundtable on financial surveillance and privacy, signaling growing recognition that crypto cannot scale into mainstream finance without stronger confidentiality guarantees. Shield is Provable's direct response to this moment. The Definitive Wallet for Private Finance Shield is a fully self-custodial wallet engineered by the architects of the Aleo blockchain. It is purpose-built for private stablecoins and confidential digital asset management at any scale, offering users a secure vault where wealth remains invisible to outside observers. By leveraging zero-knowledge technology, Shield encrypts balances, transaction amounts, sender and receiver details, and fees by default. Users do not opt into privacy. Privacy is the starting point. This architecture delivers the strongest privacy experience available from any wallet, ensuring that financial activity remains confidential without sacrificing the verifiability that blockchain technology provides. Shield is designed for users who refuse to compromise. Individuals gain a private vault for their wealth, with the financial privacy that traditional banking has always provided but that public blockchains have failed to deliver. Institutions gain the confidentiality required for payroll, vendor payments, and treasury operations without exposing sensitive business data onchain. Both can transact knowing their assets are protected by the same zero-knowledge cryptography that powers the Aleo network. The wallet's self-custodial design means users maintain full control of their funds and private keys at all times. Provable cannot access user assets, freeze accounts, or view transaction history. This is private finance with no intermediaries and no compromises. Built on 18 Months of Infrastructure Shield is the final piece of an intensive strategic initiative. While much of the industry has continued to discuss the theory of privacy, Provable has been building the reality: a fully operational, privacy-first wallet backed by the Aleo ecosystem's maturing infrastructure. Shield launches with integrations already in place. Users can access private stablecoins from Circle and Paxos Labs, with built-in risk mitigation and analytics from TRM Labs providing compliance infrastructure from day one. Fiat on-ramps and off-ramps through Coinbase, Binance Alpha, Kraken, and Revolut connect Shield to traditional finance. Cross-chain bridges from Near Intents, Hyperlane and HoudiniSwap enable interoperability. The network itself is secured by validators including Google Cloud, Blockdaemon, and NTT Digital. This is not a beta or a testnet preview. Shield launches with the full stack operational. Private stablecoin payments are a present capability, not a future goal. Key Takeaways Shield is now live. The first privacy-focused wallet purpose-built for private stablecoins on Aleo. Privacy by default. Zero-knowledge technology encrypts balances, transaction amounts, sender and receiver details, and transaction fees. Self-custodial. Users maintain full control of their funds and private keys. Provable cannot access, or view user assets. Ecosystem ready. Integrations with leading stablecoin issuers, exchanges, bridges, and compliance providers are already in place. Download now. Private and simple stablecoin payments are available today. Download Shield: shield.app About Provable Provable is the Labs company within the Aleo ecosystem, focused on developing products for compliant, confidential payments and creating tools for developers to deploy and manage applications on the Aleo blockchain. As the core research and development lab, Provable drives the technical evolution of the Aleo network through cutting-edge cryptographic research, protocol engineering, and the creation of advanced development tools. Shield™ is a trademark of Provable Inc. Nothing herein is intended as investment or any other advice.
Our team is happy to announce a new version of the Aleo Stack! This update includes changes to the node implementation snarkOS and the high-level programming language Leo - as well as their supporting libraries. This release unlocks fast and reliable end-to-end (E2E) testing of Leo programs, streamlines operations for validators, and introduces a limit on the total supply of Aleo credits. If you want to try it out, you can build from source today or download the mainnet release from Github February 13th. Find the current release schedule at: https://aleo.org/roadmap . Please report any issues you might come across! Consensus Upgrade: V13 The release schedule is as follows: Canary (validator test network) Release: January 12th Hard fork: ~January 15th (exact block heights) Testnet (developer test network) Release: March 2nd Hard fork: March 7th (block height 14,905,675) Mainnet Release: March 9th Hard fork: March 14th (block height 16,847,884) 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. Cap on Total Supply of Aleo Credits With the approval of ARC-0047, the Aleo network has now established a hard cap on the total supply of Aleo Credits at 5,000,000,000 ALEO. The cap will be enforced by halting block rewards and proving rewards at a predetermined block height (based on theoretical maximum issuance). Note that the emission rates of these rewards are not being modified. Instead, both reward streams will terminate at a predetermined block height in the far future. With the current average block rate, we expect this to occur at the conclusion of Q4 2049. Improvements for Developers leo devnode One of the most important points of software engineering is testing. While Leo recently added support for unit tests, a good E2E test suite was missing. Existing solutions require running a small development network with multiple validators and clients - slow, expensive, and clunky. leo devnode is a new tool that creates a local lightweight development client to enable developers to rapidly test and iterate through Aleo program design. leo devnode has two commands: leo devnode start will initiate the development client at localhost:3030 leo devnode advance creates a single block and adds it to the ledger. Optionally, this command takes a value n, which advances the ledger by n blocks. By default, broadcasting a transaction to the devnode will automatically produce a block and advance the ledger. However, passing the --manual-block-create flag at startup will allow users to broadcast multiple transactions to a queue without creating a block. In order to advance the ledger in this scenario, users will need to use the leo devnode advance command. Additionally, a --skip-execution-proof flag has been added for the for leo execute command. This flag will create transactions without generating the corresponding ZK proof, further accelerating the testing process. We have provided some examples of how to use the devnode feature alongside the Javascript/Typescript SDK. Program Edition Handling in Leo Leo now handles editions for local and remote programs in a more robust way. As local programs haven't been deployed yet, they do not possess a real onchain edition. We default to edition 1 for certain commands that don’t interact onchain to avoid the check in snarkVM that rejects edition 0 programs without constructors. This keeps local development frictionless. Command Local Programs Network Dependencies leo run Default to edition 1 Fetch edition from network leo execute Default to edition 1 Fetch edition from network leo synthesize Default to edition 1 Fetch edition from network leo deploy N/A Fetch edition from network + V8 constructor check leo upgrade N/A Fetch edition from network + V8 constructor check Additionally if a network dependency is at edition 0 without a constructor, a more verbose error will now be produced with a clear message explaining the program needs to be upgraded onchain. External Structs in Leo This release also introduces an important change to how external structs are handled in Leo. In previous versions of Leo, external structs did not need to be qualified with the program they came from. All imported structs effectively lived in a global namespace. Now, external structs must now be explicitly qualified with the program that defines them. Struct names are no longer globally scoped across imports. For example, given the following program foo.aleo: program foo.aleo; struct Foo { x: u32 } transition main(f: Foo) { .. } Another program (bar.aleo) must qualify struct Foo with foo.aleo in order to use it: import foo.aleo; program bar.aleo; transition main() -> foo.aleo/Foo { return foo.aleo/Foo { x: 42 }; } New --json-output flag in the Leo CLI The Leo CLI now supports a new --json-output flag that writes structured, machine-readable JSON output to disk. This makes it easier to integrate Leo commands into scripts, tooling, and automated workflows. The --json-output flag is available for the following commands: deploy upgrade run execute test query synthesize Save JSON output to the default location: leo deploy --json-output Save JSON output to a custom file path: leo execute main --json-output=my-results.json By default, JSON output files are written to the build/json-outputs/ directory, with one file per command. For example: build/json-outputs/deploy.json build/json-outputs/execute.json build/json-outputs/run.json Changes to snarkos developer execute By default, snarkos developer execute commands will now use the V2 endpoints for api.explorer.provable.com. However, backwards compatibility is still supported for the V1 endpoints. Attempting to use an account with an insufficient balance of credits now produces clearer error messaging. A bug was fixed which prohibited fetching and utilizing the right editions of imported programs. Miscellaneous Updates The size of the compiled program (in kB) will be output by the CLI when calling leo build, leo deploy, and leo upgrade. A --disable-update-check flag has been added to the Leo CLI. This allows for disabling the Leo’s automatic update check, allowing for more consistently reproducible output from the CLI. Various performance improvements have made their way into AleoVM, such as better block caching and better database deserialization. SDK Upgrades to Proving Speed & Proving Key Management 10-20% speedup local wasm-based proving via wasm optimizations made through applying wasm-opt Adds a new KeyStore interface for storing proving and verifying keys on disk for node JS and storing them in IndexedDB for web and wallet applications. This helps developers cache proving keys for later re-use improving wasm proving times a further 30% Miscellaneous Upgrades: Adds support for getting the address of a program from the Program object Improvements for Node Operators Improved Database Organization A new node-data directory has been introduced that contains all node-specific data (essentially everything but the ledger). This is located at ~/.aleo/storage/node-data-{network_id} for production or ./node-data-{network_id}-{dev} for development nodes. Alternatively, users can also pass a value to --node-data and store the data at a custom path. Previously, these files lived in the similarly-named ledger-* folder. At startup, a node will check for any files that indicate that the old storage format is used. In that case, a message is printed on how to migrate, and the node will not start. Alternatively, nodes can also be started with --auto-migrate-node-data to move the appropriate files automatically from the ledger-* folder to the node-data-* folder. Miscellaneous Updates To enhance security, validators will no longer be able to connect to unknown/untrusted peers. This may cause issues for validators who have some managed nodes which frequently rotate. For now, make sure that you pass in peers explicitly via the --peers flag. A discussion is present here for those interested to pass in hostnames. A general UnknownReason type has been added for handling connections between peers. This will now be the default DisconnectReason when encountering an unknown value. This is useful for future compatibility, as adding a new disconnect reason should not require a message version bump or a synchronous update. Nodes will no longer print debug logs when set to the lowest verbosity setting. The amount of stake of unconnected validators is logged and available via the new snarkos_bft_connected_stake_as_percentage metric The latest observed height of other validators is logged to aid debugging. Node restarts are now ~10x faster by cleverly caching the block tree. Good old flamegraphs came to the rescue. Various stability improvements have made their way to make snarkOS nodes ever more robust and to be able to handle a variety of adversarial and benign edge cases in the network, reducing the impact of race conditions in syncing and consensus logic. Closing Notes The work for this release encompassed changes across 500 source code files and touched 20.000+ lines over 350+ commits by the amazing contributors listed below. The full changelogs for the referenced releases can be found here: https://github.com/ProvableHQ/snarkVM/compare/v4.4.0...testnet-v4.5.1 https://github.com/ProvableHQ/snarkOS/compare/v4.4.0…testnet-v4.5.1 https://github.com/ProvableHQ/leo/compare/v3.4.0…testnet-v3.5.0 If you want to try it out, you can build from source today or download the mainnet release from Github February 13th. Find the current release schedule at:https://aleo.org/roadmap. Please report any issues you might come across! Contributors A big thank you to all the contributors on Github to this snarkOS, Leo, SDK and snarkVM release! @AleoAlexander @antonio95 @copilot @d0cd @kaimast @iamalwaysuncomfortable @IGI-111 @ljedrz @meddle0x53 @mohammadfawaz @niklaslong @tenequm @raychu86 @Roee-87 @vicsn
Why we've implemented comprehensive fuzzing for the Aleo VM using two complementary approaches.
Our team is happy to announce a new version of the Aleo Stack, which includes the node implementation snarkOS and the programming language Leo. These applications are built on top of the developer-friendly snarkVM and Aleo SDK libraries. Aleo is an open source cryptocurrency through which developers can deploy cryptographically secure dApps. Most notably, this release unlocks using block timestamps in Aleo smart contracts. A number of stability improvements have made their way into the nodes. Costs can now be estimated using Authorizations instead of Executions, making it easier for wallets to determine fees. If you want to try it out, you can build from source today or download the mainnet release from Github November 24th. Find the current release schedule at: https://provablehq.github.io/. Please report any issues you might come across! What's new in snarkOS v4.4.0 Consensus change: ConsensusVersion V12 A consensus change will occur at the following times: Canary - ~9AM PT November 14th, 2025 Testnet - ~9AM PT November 21st, 2025 Mainnet - ~9AM PT December 2nd, 2025 The exact block heights will be encoded in the snarkVM library at release. 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. New operand: block.timestamp This PR added a new block.timestamp operand that can be used in finalize. This adds to the existing block.height operand for accessing block state, and allows for richer smart contract logic on the Aleo chain. Improvements for node operators Further improvements worth mentioning include: Logging has been improved to allow for better debugging of potential consensus or operational issues. Bootstrap validator peering has been stabilized, lowering the risk of DoS attacks A new BLOCK_LAG histogram metric to track the validator's system time with the block timestamp of the latest processed block. This is tracked in milliseconds.. This PR introduces a `--trusted_peers_only` flag, while deprecating `--allow_external_peers` and `--rotate_external_peers`. The new flag can be used by a node to sync with just the peers passed explicitly via --validators and --peers. Reduced erroneous reporting of stale transmissions What’s new in Leo v3.4.0 Empty arrays and empty loop Arrays of size 0 and loops over empty ranges are now supported in Leo. While these constructs do not produce any instructions in the compiled Aleo bytecode, they enable more generic or pattern-based programming styles in Leo, especially when writing code that abstracts over sizes, iterates conditionally, or uses compile-time parameters. For example: inline build_default::[N: u32]() -> [u8; N] { let xs: [u8; N] = [0u8; N]; // When N = 0 this loop is simply skipped for i:u32 in 0..N { xs[i] = 1u8; } return xs; } let xs = build_default::[0](); // yields [] Stability improvements Improved identifier validation in Leo, resulting in clearer and more precise error messages, especially when Leo identifiers conflict with reserved Aleo identifiers. Fixed an issue where local const values failed to compile correctly when used in loop ranges. Resolved a crash in the common subexpression elimination optimization pass that occurred for certain patterns of function calls. Library and tooling updates snarkVM v4.4.0 snarkVM is a zkVM library. It powers the Aleo network and most of the software used to interact with it. The following contains some of the most relevant changes which were introduced: Support was added to compute a fee based on an Authorization instead of an Execution: execution_cost_for_authorization execution_cost_v* functions have been made private and are no longer accessible, use execution_cost instead The tracing feature has been removed from snarkvm-ledger-store Closing notes The full changelogs for the referenced releases can be found here: https://github.com/ProvableHQ/snarkVM/compare/v4.3.0...testnet-v4.4.0 https://github.com/ProvableHQ/snarkOS/compare/v4.3.0…testnet-v4.4.0 If you want to try it out, you can build from source today or download the mainnet release from Github November 25th. Find the current release schedule at: https://provablehq.github.io/. Contributors A big thank you to all the contributors on Github to this snarkOS, Leo, SDK and snarkVM release! @antonio95 @copilot @d0cd @kaimast @iamalwaysuncomfortable @IGI-111 @ljedrz @meddle0x53 @mohammadfawaz @mikebenfield @niklaslong @tenequm @raychu86 @Roee-87 @vicsn
We’re excited to announce that Provable and Demox Labs have entered into an agreement for Provable to acquire the Leo Wallet, a leading privacy-preserving crypto wallet for the Aleo Network and community.
We're excited to announce the launch of Provable Explorer V2, the default block explorer for the Aleo blockchain.
Introduction Our team is happy to announce a new version of the Aleo Stack, which includes the node implementation snarkOS and the programming language Leo. These applications are built on top of the developer-friendly snarkVM and Aleo SDK libraries. Aleo is an open source cryptocurrency through which developers can deploy cryptographically secure dApps. Most notably, this release unlocks native Keccak+ECDSA-based signature verification, allowing for messages from other popular cryptocurrency ecosystems like Ethereum to be verified in Aleo’s public smart contract scope - while still having access to native zero knowledge proofs verification too. Moreover, maximum array sizes have increased, node syncing is 5x faster, and both transaction and solution broadcasting has been greatly stabilized. If you want to try it out, you can build from source today or download the mainnet release from github October 28th. Find the current release schedule at: https://provablehq.github.io/. Please report any issues you might come across! What's new in snarkOS v4.3.0 Consensus change: ConsensusVersion V11 A consensus change will occur at the following times: Canary - ~9AM PT October 17th, 2025 Testnet - ~9AM PT October 24th, 2025 Mainnet - ~9AM PT November 4th, 2025 The exact block heights will be encoded in the snarkVM library at release. 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. Keccak+ECDSA signature verification opcodes Aleo added native ECDSA signature verification to on-chain (finalize) execution to improve interoperability and broaden supported signature formats. With on-chain verification, programs can trust externally signed messages and approvals without off-chain helpers, enabling cross-chain messaging, asset flows, multisig/governance, etc. The initial scope focuses on verification with a simple canonical representation and deterministic, consensus-safe behavior, while leaving room to add other schemes and encodings over time. The core design revolves around the new `ecdsa.verify.*` instructions that will be available to new programs. In order to support this, we require a lot of supporting features that enable the use of the new signature verification algorithm. ECDSA This PR introduces native ECDSA signature verification to on-chain (finalize) execution to improve interoperability and broaden supported signature formats. With on-chain verification, programs can trust externally signed messages and approvals without off-chain helpers, enabling cross-chain messaging, asset flows, multisig/governance, etc. The initial scope focuses on verification with a simple canonical representation and deterministic, consensus-safe behavior, while leaving room to add other schemes and encodings over time. The list of new ecdsa.verify.<variant> instructions are as follows: ecdsa.verify.keccak256 ecdsa.verify.keccak256.raw ecdsa.verify.keccak256.eth ecdsa.verify.keccak384 ecdsa.verify.keccak384.raw ecdsa.verify.keccak384.eth ecdsa.verify.keccak512 ecdsa.verify.keccak512.raw ecdsa.verify.keccak512.eth ecdsa.verify.sha3_256 ecdsa.verify.sha3_256.raw ecdsa.verify.sha3_256.eth ecdsa.verify.sha3_384 ecdsa.verify.sha3_384.raw ecdsa.verify.sha3_384.eth ecdsa.verify.sha3_512 ecdsa.verify.sha3_512.raw ecdsa.verify.sha3_512.eth The variant types allow the users to select the underlying hash function used, the serialization type (with .raw), and if the address being verified is a 20-byte Ethereum address. The .raw variants indicate if the message should be serialized in it's raw bit form or with Aleo specific variant bits; this is necessary to ensure compatibility with external signing libraries. By default the .eth variants will serialize the message in it's raw form, so there is no need for an additional .eth.raw suffixed variant. Both .raw and .eth variant messages must be "byte-aligned", meaning that the length of it's bit representation must be a multiple of 8. Hash Functions To further interoperability of AVM programs between EVM programs, this PR introduces .native variants of the hash.keccak* and hash.sha3* opcodes that allow the user to output the hash as a bit array. These opcodes do not implicitly perform the BHP hash on the result. The PR also introduces .raw variants use the raw serialization of the pre-image that does not contain any Aleo specific variant bits. The list of new instructions are as follows: hash.keccak256.native hash.keccak384.native hash.keccak512.native hash.sha3_256.native hash.sha3_384.native hash.sha3_512.native hash.keccak256.native.raw hash.keccak384.native.raw hash.keccak512.native.raw hash.sha3_256.native.raw hash.sha3_384.native.raw hash.sha3_512.native.raw hash.keccak256.raw hash.keccak384.raw hash.keccak512.raw hash.sha3_256.raw hash.sha3_384.raw hash.sha3_512.raw Note that all .raw variant inputs must be byte-aligned. Serialization Operations This PR also introduces serialize.* and deserialize.* opcodes which allow encoding and decoding AVM values to and from bits respectively. The list of new instructions are as follows: serialize.bits serialize.bits.raw deserialize.bits deserialize.bits.raw Increase Array Size Limit to 512 `N::MAX_ARRAY_ELEMENTS` is updated from 32 to 512. This provides more general flexibility for handling inputs to hash and signature verification functions without having to construct custom structs to get around the existing limitation. Faster syncing for Aleo nodes By combining faster deserialization and better pipelined fetching of blocks, syncing was sped up by up to 5 times! Syncing speed is continuously monitored in CI to prevent regressions. Benchmark suite Current: 50aa002 Previous: 83805f6 Ratio rest-get-block 2.68524245510956 ops/s 0.65 ops/s 0.24 rest-block-height 7863.4395405039495 ops/s 185.18 ops/s 0.023549491166830062 p2p-sync 1.3 blocks/s 0.25 blocks/s 0.19 p2p-sync-speed-variance 1.240252 blocks^2/s^2 0.202773 blocks^2/s^2 0.16 bft-sync 1.16 blocks/s 0.2 blocks/s 0.17 cdn-sync 1.23 blocks/s 0.43 blocks/s 0.35 More stable transaction and solution broadcast Both transaction and solution broadcast now offer the same broadcast strategy to ensure even when clients are out of sync they may still propagate transactions and solutions. Moreover, transactions which hit a "global state root not found" errors are still propagated. In all likelihood, these are caused by nodes temporarily being behind. This PR improves the network's UX by letting those transactions propagate anyway. Improvements for node operators Further improvements worth mentioning include: A local peer cache was introduced for client, prover and validator nodes. The cache is stored in the ledger folder, and allows a node to be able to find its previous (high quality) peers again. Ultimately this paves the way for clients not having to manually specify other clients anymore, as after an initial connection via bootstrap peers, they will always be able to find each other again directly. Connections to new nodes are partially guided by whether they are ahead or not. Nodes will now shut down when a panic occurs and log a clean error. This PR implements snarkos account import to allow derivation of view key and address from a given private key, allowing easier testing without the use of the leo binary. Logs were improved (PR) This PR introduces a special bootstrap client, which can be enabled by running snarkos start with --bootstrap-client. This client is specialized in facilitating peer list gossip, and doesn’t participate in block syncing. This PR documents a native backup utility. Node operators should be able to create fast local backups either: using a JWT, which they can read from a file instead of stdout explicitly passing in --nojwt, not having to authenticate if they already have a solid firewall and don't want to deal with the complexity of JWT creation and backup Colored logging is currently disabled to protect against vulnerabilities. What’s new in Leo v3.3.0 Optional Types (T?) Leo now supports first-class optional types using the T? syntax (e.g., u8?, Foo?, [u64?; 2]). Optional values can be compared with none, assigned, passed into inline functions, and stored in arrays and structs. program optionals.aleo { struct Point { x: u32, y: u32 } transition main() { // Optional integers let x: u8? = 42u8; let y = x.unwrap(); // Returns 42u8 let z: u8? = none; let a = z.unwrap_or(99u8); // Returns 99u8 // Array of optionals let arr: [u16?; 2] = [1u16, none]; let first_val = arr[0].unwrap(); // Returns 1u16 let second_val = arr[1].unwrap_or(0u16); // Returns 0u16 // Optional struct let p: Point? = none; let p_val = p.unwrap_or(Point { x: 0u32, y: 0u32 }); // Returns default Point } } Type coercion from T to T? is supported in variable definitions, inline function calls, and intermediate expressions. Explicit unwrapping is required to go from T? → T. New Storage System Leo now supports persistent storage variables and storage vectors using the storage keyword. Storage variables and vectors are declared at program scope, similar to mappings. program storage_ops.aleo { struct Point { x: field, y: field } storage counter: u32; // singleton storage variable storage points: [Point]; // storage vector of `Point`s transition main() -> Future { return async { counter = 5u32; let old = counter.unwrap_or(0u32); // returns optional points.push(Point { x: 1field, y: 2field }); let first = points.get(0u32).unwrap(); points.set(0u32, Point { x: 3field, y: 4field }); counter = none; // unset } } } Storage vectors supported core operations: vec.push(10u32); // Push 10u32 at the end of vector `vec` let x = vec.pop(); // Pop and return the last element of `vec` let y = vec.get(5); // Get element at index 5 vec.set(3, 5u32); // Set element at index 3 to `5u32` let y = vec.len(); // Return the number of elements in `vec` vec.swap_remove(3); // Remove element at index `3` from `vec` and returns // it. The removed element is replaced by the last // element of the vector. Internally, the compiler rewrites these high-level constructs into mappings and mapping operations. ECDSA Signature Verification ECDSA signature verification is now supported with 20 variants covering different hash algorithms and address formats: // Verify with digest (pre-hashed message) let valid: bool = ECDSA::verify_digest(sig, addr, digest); let valid: bool = ECDSA::verify_digest_eth(sig, eth_addr, digest); // Verify with Keccak256 hashing let valid: bool = ECDSA::verify_keccak256(sig, addr, msg); let valid: bool = ECDSA::verify_keccak256_raw(sig, addr, msg); let valid: bool = ECDSA::verify_keccak256_eth(sig, eth_addr, msg); // Also available: keccak384, keccak512, sha3_256, sha3_384, sha3_512 Parameters: sig: [u8; 65] - ECDSA signature (r, s, v) addr: [u8; 33] - Public key for standard variants, [u8; 20] for *_eth variants digest: [u8; 32] - Pre-hashed message for digest variants msg: Any byte-aligned type - Message to hash and verify Raw Hash Operations Leo now supports “raw” hash variants: raw hash variants omit metadata of a variable and directly hash the input bits. They are useful for interoperability with external, particularly EVM, systems. Note: inputs for raw variants of Keccak* and Sha3* must by byte-aligned (meaning the number of bits must be a multiple of 8). // Raw hash functions return the same types as standard variants let h: field = Keccak256::hash_to_field_raw(input); let h: group = BHP256::hash_to_group_raw(input); let h: address = Pedersen64::hash_to_address_raw(input); // Native variants return bit arrays instead of field elements let bits: [bool; 256] = Keccak256::hash_native(input); let bits: [bool; 256] = Keccak256::hash_native_raw(input); // Available for: BHP256, BHP512, BHP768, BHP1024, Pedersen64, Pedersen128, Poseidon2, Poseidon4, Poseidon8, Keccak256, Keccak384, Keccak512, SHA3_256, SHA3_384, SHA3_512 Serialization/Deserialization Operation Leo now supports “serialize” and “deserialize” data operations to and from bits. This supports both metadata-inclusive and raw variants. Note: the compiler will check that the bit sizes actually match. // Standard serialization (includes type metadata) let bits: [bool; 58] = Serialize::to_bits(value); let value: u32 = Deserialize::from_bits::[u32](bits); // Raw serialization (no metadata, just raw bits) let bits: [bool; 32] = Serialize::to_bits_raw(value); let value: u32 = Deserialize::from_bits_raw::[u32](bits); // Works with arrays too let bits: [bool; 128] = Serialize::to_bits_raw([1u32, 2u32, 3u32, 4u32]); let arr: [u32; 4] = Deserialize::from_bits_raw::[[u32; 4]](bits); Bit Lengths Raw: Exact type width u32 = 32 field = 253 scalar = 251 address = 253 Non-raw: Type width + metadata overhead leo synthesize Command Generate proving and verifying keys for all transitions in a local or remote Leo program, along with circuit metadata: leo synthesize credits.aleo --save keys --endpoint https://api.explorer.provable.com/v1 --network mainnet Output includes: Public inputs Variables Constraints Non-zero entries in matrices Circuit ID Proving and verifying keys saved to disk This enables better understanding of program size and key management. Lossless Syntax Tree Parser A new lossless syntax tree parser has been added. While this does not directly impact users yet, it lays the foundation for a future code formatter. Common Subexpression Elimination (CSE) New optimization pass reduces bytecode size by eliminating redundant expressions. Enhanced Error Messages Error messages now support displaying multiple related source locations, starting with duplicate struct and record member detection: struct Person { name: field, age: u8, name: field, } Before, only the duplicate location was shown. Now both the original and duplicate locations are displayed: Error [ETYC0372017]: the name `name` is defined multiple times in struct `Person` --> src/main.leo:3:9 | 3 | name: field, | ^^^^^^^^^^^ previous definition here ... 5 | name: field, | ^^^^^^^^^^^ redefined here Remaining stability improvements Various fixes to the interpreter related to hashing correctness Fixed broken leo query committee endpoint Validates program names in leo new against reserved SnarkVM keywords Library and tooling updates snarkVM v4.3.0 snarkVM is a zkVM library. It powers the Aleo network and most of the software used to interact with it. The following contains some of the most relevant changes which were introduced: The snarkVM CLI was removed - instead we encourage users to make use of the snarkos developer or leo cli tools. Several fixes for WASM-based builds were introduced, e.g. to allow loading the inclusion proving key from memory and supporting custom consensus heights for testing. Closing notes The full changelogs for the referenced releases can be found here: https://github.com/ProvableHQ/snarkVM/compare/mainnet...testnet https://github.com/ProvableHQ/snarkOS/compare/mainnet...testnet https://github.com/ProvableHQ/snarkVM/compare/v4.2.2...testnet-v4.3.0 https://github.com/ProvableHQ/snarkOS/compare/v4.2.2…testnet-v4.3.0 If you want to try it out, you can build from source today or download the mainnet release from github October 28th. Find the current release schedule at: https://provablehq.github.io/. Contributors A big thank you to all the contributors on Github to this snarkOS, Leo, SDK and snarkVM release! @antonio95 @copilot @d0cd @eranrund @Forostovec @henrikkv @iamalwaysuncomfortable @kaimast @ljedrz @meddle0x53 @mohammadfawaz @mikebenfield @niklaslong @tenequm @tetektoza @raychu86 @Roee-87 @usagi32 @vicsn
Our team is happy to announce a new version of the Aleo Stack, which includes the node implementation snarkOS and the programming language Leo. These applications are built on top of the developer-friendly snarkVM and Aleo SDK libraries. Aleo is an open source cryptocurrency through which developers can deploy cryptographically secure dApps. Most notably, this release unlocks a reduction of base fees by 90%, as well as the introduction of priority fees. This effectively creates a fee market, allowing users to bid in order to get a higher priority in the mempool. The release also introduces various quality of life improvements such as new /v2/ snarkOS endpoints with more informative responses, performance improvements, as well as a `Leo update` command. If you want to try it out, you can build from source today or download the mainnet release from github September 9th. Find the current release schedule at: https://provablehq.github.io/. Please report any issues you might come across! What's new in snarkOS v4.2.0 Consensus change: ConsensusVersion V10 A consensus change will occur at the following times: Canary - ~9AM PT August 29th, 2025 Testnet - ~9AM PT September 5th, 2025 Mainnet - ~9AM PT September 16th, 2025 The exact block heights will be encoded in the snarkVM library at release. 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. Reduced Fees + Priority Fees The use of zero knowledge cryptography in Aleo enables a highly scalable blockchain network. However, those scalability benefits have not translated into low fees on the Aleo network - yet. Because of a large focus on security, high fees have served as an additional layer of defense against Denial of Service attacks. The time has come to deliver on the promise of zero-knowledge proofs, and to make transactions cheap. Technically, this will soon be possible because of the spend limits which are introduced, acting as another layer of defense against high compute. As such, this ARC proposes to reduce compute-related costs by a factor of 25x, which will significantly bring down average transaction costs by up to 92%. Note that private transfers are not impacted, because they did not incur any compute costs, which was the aspect which has been discounted. Example deployment cost reduction Program Price before [microcredits] Price after [microcredits] Reduction [%] credits.aleo 134,619,400 115,123,243 14.4 grant_disbursement_arcane.aleo 13,805,525 8,953,181 35.1 Example execution cost reduction Function Price before [microcredits] Price after [microcredits] Reduction [%] credits.aleo transfer_public execution 34,060 2,725 91.9 credits.aleo transfer_private execution 2,242 2,242 0 Priority fees This release also introduces priority fees which effectively create a fee market, allowing users to bid in order to get a higher priority in the mempool. In more technical detail, this PR introduces a priority queue for transactions containing a nonzero priority fee. This is drained before the pre-existing transactions queue when sending transactions to the BFT. A few notes on the current design: Priority fees for transactions already in the mempool cannot be updated. There is no protection against starvation: if the priority pool stays full enough, transmissions from the standard queue will not be sent to the BFT. Batch building is not atomic w.r.t. the memory pool. New endpoints Check transaction on broadcast Submitting transactions to blockchains and developing on them can be difficult. In order to verify transactions, you need the latest state, and it is ultimately up to consensus to include a transaction into a block, which is a multi-stage opaque process. To improve the quality of life for users and developers, this PR introduces a new feature for nodes allowing them to perform an early optional check on the transaction, and to return the result synchronously to the user: // POST /<network>/transaction/broadcast?check_transaction={true} The reason this is optional, is that for many applications, performance is critical, so the default behaviour is the same as before: the user gets a response just confirming receival, not approval. Fetching a batch of statePaths This PR adds a new REST endpoint that allows users to fetch multiple state paths at once. This will help mitigate the global state root to be the same across iterations issues seen when users/provers are querying for state. GET /<network>/statePaths?commitments=cm1,cm2,... The commitments in the query string are comma separated. At most 16 commitments can be fetched at a time. Informative snarkOS JSON-RPC responses snarkOS now supports versioned API endpoints. This change is backwards compatible, meaning by not indicating any version, or by using the /v1/ prefix, the original responses will be used. New /v2/ snarkOS endpoints have been introduced which return more informative error messages. Instead of only returning a 500 or 429, the REST API now returns the error chain as JSON It will (try to) set the HTTP status code correctly: /// 400 Bad Request - Invalid input, malformed parameters, validation errors /// 404 Not Found - Resource not found /// 422 Unprocessable Entity - Business logic validation errors /// 429 Too Many Requests - Rate limiting /// 503 Service Unavailable - Temporary service issues (node syncing, feature unavailable) /// 500 Internal Server Error - Actual server errors, unexpected failures These new return codes may become available via updated explorer APIs as well. Improvements for node operators Some further improvements worth mentioning include: Networking code has been significantly cleaned up, leading to fewer spurious connection issues. (#3754) Syncing has been further sped up and stabilized (#2745) Running a network with the `test_network` feature now prints more low level debugging information. Peers can now be specified both by IPs and hostnames. (#3768) ./snarkos start --peers "validator0:4130,client0:4130" The "Overview" page in the terminal UI (display) is usable again. It now shows the currently connected peers and information about the latest block. (#3767) What’s new in Leo 3.2.0 Leo Modules Leo 3.2.0 comes with a module system. Given a file other_module.leo containing struct, const, and inline definitions like this: const X: u32 = 2u32; struct S { a: field } inline increment(x: field) -> field { return 1field; { You may refer to contents of the module as other_module::X, other_module::S, and other_module::increment. 📁 Example Directory Structure src ├── common.leo ├── main.leo ├── outer.leo ├── outer │ ├── inner.leo 📦 Module Access Paths Given the structure above, the following modules are defined: common.leo defines module common, accessible from main.leo via: common::<item> outer.leo defines module outer, accessible from main.leo via: outer::<item> outer/inner.leo defines submodule outer::inner, accessible from: main.leo: outer::inner::<item> outer.leo: inner::<item> 📏 Module Layout Rules This PR also enforces new rules to prevent ambiguity and ensure consistency: Leaf modules (i.e. modules without submodules) must be defined in a single file: foo.leo Modules with submodules must be defined by an optional top-level foo.leo file and a foo/ directory containing the submodules: foo.leo # defines module `foo` - this is optional foo/ ├── bar.leo # defines submodule `foo::bar` Only relative paths are implemented so far. That means that items in outer.leo cannot be accessed from items in inner.leo, for example. This is limiting for now but will no longer be an issue when we add absolute paths. Leo Update leo update now allows you to select a particular version to install: leo update --name v3.0.0 Remaining stability improvements leo now allows you to decrypt records via the CLI. You may also pass in record ciphertexts as inputs to leo execute directly. Bug fix in outputting code regarding parenthesizing operands of the ternary conditional. Bug fix: eliminate redundant type errors in async function calls. Bug fix: correctly handle shorthand struct initializers which are consts. Bug fix: leo clean doesn’t produce errors when outputs or build directory isn’t present. Bug fix: correctly type check return statement in a constructor. Bug fix: check snarkos installation location. Bug fix: const evaluate const args before monomorphizing. Improved error messages for unresolved generics. Library and tooling updates What’s new in SDK v0.10.0 Updates to the KeyProvider interface with methods that enable local storage + implementations of the KeyProvider interface that store Proving and Verifying keys in local storage in Node.js and browser storage in browser contexts. This allows function executions to use locally stored keys to speed up execution. Update to the RecordProvider interface to enable metadata to be included with found records + implementations of the RecordProvider interface that allow users of the SDK to efficiently search for their own records. ProgramManager methods now accept object parameters instead of individual parameters. This enables developers to supply only required parameters to ProgramManager functions. Developers upgrading to v1.0.0 will need to make slight changes to their invocations of ProgramManager methods. Fixes that allow private transactions involving records to succeed consistently via a custom implementation of the QueryTrait. snarkVM v4.2.0 snarkVM is a zkVM library. It powers the Aleo network and most of the software used to interact with it. The following contains some of the most relevant changes which were introduced: fn deployment_cost was renamed to fn deployment_cost_v1 fn deployment_cost and fn execution_cost were introduced to allow for switching on the cost function based on ConsensusVersion fn find_records now filters records by ownership before decryption in #2691 This PR implements get_state_paths_for_commitments to retrieve a batch of state paths rather than one at a time in the query. This will help mitigate the global state root to be the same across iterations issues seen when users/provers are querying for state. A floating‑point sqrt and type conversion was replaced by isqrt to support WASM-based platforms which don’t support floating point operations, in #2835 Support building snarkVM on SGX in #2791, enabled by the introduction of a filesystem feature, without which, the parameters crate won’t require a filesystem anymore to store parameters. fn authorize_request was introduced, which allows offline hardware wallets to sign a Request without importing the entire VM object. This is possible only for individual functions with public inputs and outputs, such as credits.aleo::transfer_public. The total amount of TestRNG call counts are now printed at the end of test runs to help facilitate debugging. This PR changes the Query type to use http::Uri internally for enhanced debugging. Closing notes The full changelogs for the referenced releases can be found here: https://github.com/ProvableHQ/snarkVM/compare/v4.1.0...testnet-v4.2.0 https://github.com/ProvableHQ/snarkOS/compare/v4.1.0...testnet-v4.2.0 If you want to try it out, you can build from source today or download the mainnet release from github September 9th. Find the current release schedule at: https://provablehq.github.io/. Contributors A big thank you to all the contributors on Github to this snarkOS, Leo, SDK and snarkVM release! @acoglio @anstylian @antonio95 @christianwwwwwwww @damons @d0cd @kaimast @iamalwaysuncomfortable @ljedrz @meddle0x53 @mohammadfawaz @mikebenfield @niklaslong @raychu86 @rejected-l @Roee-87 @trevor-crypto @vicsn
Our team is happy to announce a new version of the Aleo node implementation, snarkOS, alongside developer tooling updates to snarkVM, Leo and the Aleo SDK. Aleo is a cryptocurrency through which developers can deploy cryptographically secure dApps. Most notably, this release unlocks program upgradability. This feature, proposed in ARC-6, offers a method for program upgrades that seeks to be timely and cost-effective, while preventing fragmentation of application state. The release also introduces various quality of life improvements for node operators, such as exposing HTTP endpoints for creating backups and retrieving version information. If you want to try it out, you can build from source today or download the mainnet release from github August 12th. Find the current release schedule at: https://provablehq.github.io/. Please report any issues you might come across! What's new in v4.1.0 Consensus change: ConsensusVersion V9 A consensus change will occur at the following times: Canary - ~9AM PT July 29th, 2025 Testnet - ~9AM PT August 5th, 2025 Mainnet - ~9AM PT August 12th, 2025 The exact block heights will be encoded in the snarkVM library at release. 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. Maximum validator set increase to 40 The maximum number of validators securing the Aleo network will increase to 40. The gradual increase of validators on the Aleo network assures a continuous increase in decentralization without sacrificing security and stability of the network. Program upgradability With this release, Aleo will facilitate a system for program upgrades with the following highlighted properties: Upgrades preserve the interface of a program. An upgrade can: change logic in a function or finalize define new structs, records, or mappings but cannot modify or remove existing ones add new functions and closures An upgrade cannot: change a function’s input and output interface change a finalize’s input interface change logic in a closure. This is because a change in a closure would invalidate all dependent proving and verifying keys. change existing structs, records, or mappings Program Component Delete Modify Add import ❌ ❌ ✅ struct ❌ ❌ ✅ record ❌ ❌ ✅ mapping ❌ ❌ ✅ closure ❌ ❌ ✅ function ❌ ✅ (logic) ✅ finalize ❌ ✅ (logic) ✅ constructor ❌ ❌ ❌ Upgrades can be rejected by dependent applications. While we require that upgrades are atomic and take effect immediately, dependents may want fine-grained control. There should be a way for an application to detect whether a dependent is changed, after which the dependent application will need to be upgraded to the desired logic to be callable again. Developers must be able to ossify their programs. Immutable application logic gives users sovereignty. This is desirable in many blockchain ecosystems. At a high-level, our proposed design introduces immutable constructors, where you can define your upgrade logic, and new finalize scope operands checksum, edition and program_owner so that users can programmatically define upgrades with the above design goals in mind. Newly deployed programs must contain a constructor, and start at edition 0. As they upgrade, their edition increments by 1. Only the highest edition of the program can be executed. For more information about program upgradability, check out: The ARC specification The Leo examples Improvements for node operators Better peering logging Peering code has been cleaned up significantly, reducing the amount of spurious ProtocolViolation and Unable to resolve false positive messages. Rocksdb checkpoints Native rocksdb checkpoints can now be made with a simple JSON Web Token guarded HTTP call. When you start your node without passing in custom JWT flags, your JWT credentials are printed to stdout at startup. Creating a checkpoint at location /home/aleo_ledger_checkpoints/1 can be done as follows: curl -X POST -H "Authorization: Bearer ${TOKEN}" http://localhost:3030/{network}/db_backup?path=/home/aleo_ledger_checkpoints/1 Rolling back to (or, more precisely, switching to) the aforementioned checkpoint, is as easy as pointing --storage to the particular folder: snarkos --storage=/home/aleo_ledger_checkpoints/1 Alternatively, the original ledger can be removed, and manually substituted with the checkpoint. Retrieving program information Due to program upgradability, programs can now be upgraded, and therefore have higher editions. In order to surface this information, snarkOS now supports the following endpoints: curl http://localhost:3030/{network}/program/{programID} curl http://localhost:3030/{network}/program/{programID}?metadata={true} curl http://localhost:3030/{network}/program/{programID}/edition curl http://localhost:3030/{network}/program/{programID}/edition?metadata={true} The new metadata query parameter returns a JSON object with the following fields: { "program": "", "edition": 0, "transaction_id": "", "program_owner": "", } Build information A node’s build information can be surfaced via: curl http://localhost:3030/mainnet/program/version Which returns a JSON object with the following fields: { "version": "3.8.0", "git_commit": "9359abd0546c39e05b22112c768c90738577e212", "git_branch": "refs/heads/feat-add-version-endpoint" } Library and tooling updates snarkVM v4.1.0 snarkVM is a zkVM library. It powers the Aleo network and most of the software used to interact with it. The following contains some of the most relevant changes which were introduced: snarkVM has been upgraded to Rust 1.88 Process now exposes pub fn add_programs_with_editions, which allows wallets, provers and other applications to initialize a Process with the latest Program editions. Request’s pub fn verify now takes in an optional program_checksum, required for signing execution requests to upgradable programs pub fn deployment_cost now accounts for the finalize cost of constructor logic. Deployments now contain an optional program_checksum and program_owner, populated from ConsensusVersion::V9 onwards Programs now contain an optional constructor, populated from ConsensusVersion::V9 onwards Leo 3.1.0 Async blocks allow you to elide defining separate async functions, and write your on-chain code in the same location as the rest of the transition: async transition main(public a: u32, b: u32) -> Future { let f1: Future = other.aleo/main_inner(0u32, 0u32); let f:Future = async { f1.await(); }; return f; } You can use a .aleo file as a local dependency (previously dependencies were programs already deployed to the network, or local Leo projects): leo add --local this_dependency.aleo SDK 0.9.4 SDK Version 0.9.4 includes the following enhancements and fixes. Fixes: Enables the SDK to build fully offline transactions. To use this functionality, set your SDK dependency to 0.9.4-offline-rc Fixes SDK docstrings and completion of underspecified docstrings. Enhancements: Addition of a buildAuthorizationUnchecked method which allows building authorizations without building a circuit, allowing for build fast requests to trusted external provers. Addition of a ProvingRequest object that can be sent to trusted provers for remote proving Closing notes The full changelogs for the referenced releases can be found here: https://github.com/ProvableHQ/snarkVM/compare/mainnet...canary-v4.1.0 https://github.com/ProvableHQ/snarkOS/compare/mainnet…canary-v4.1.0 If you want to try it out, you can build from source today or download the mainnet release from github August 12th. Find the current release schedule at: https://provablehq.github.io/. Contributors A big thank you to all the contributors on Github to this snarkVM, snarkOS, Leo and SDK release! @d0cd @hritique @kaimast @iamalwaysuncomfortable @ljedrz @meddle0x53 @mohammadfawaz @mikebenfield @niklaslong @raychu86 @vicsn
ARC-0046 is a novel protocol enhancement designed to fundamentally strengthen the Aleo Network’s security and economic model. This proposal introduces a new staking requirement for provers, creating a more robust and sustainable ecosystem for all Aleo participants.