Skip to content

🎵 Crescendo (Mainnet25)

Compare
Choose a tag to compare
@vishalchangrani vishalchangrani released this 27 Jul 18:55
· 814 commits to master since this release
feabd3a

Video walkthrough

Crescendo is the most significant upgrade to the Flow network since genesis that both supercharges Cadence and brings Flow closer to the rest of the web3 ecosystem. Crescendo includes the following major changes:

Full EVM Equivalence

This upgrade makes Flow fully EVM equivalent. Full EVM equivalence means any smart contract, protocol, or tooling that works on Ethereum Mainnet will work out of the box on Flow, without requiring any additional configuration - similar to an EVM L2. With Flow, developers can unlock massive value atop their existing solidity contracts by using Cadence to access Flow-native features and benefit from a game-changing user experience with improved performance. This includes creating gasless experiences in apps through sponsored transactions for mainstream onboarding, accessing protocol-level verified random functions for games, and making multicall transactions requiring a single approval for complex DeFi strategies. More on this here.

Upgrade to Cadence 1.0

Cadence 1.0 represents the most significant upgrade to the language yet, introducing numerous UX, security and functional enhancements that bring Cadence to a new level of maturity. Attachments which allow developers to permisisonlessly extend another author’s contracts will also be shipped with the upgrade, allowing for exciting opportunities to turn products into platforms with use cases from moddable games to nestled NFTs with intelligent interactions. More on this here.

Improving data availability

Flow's long-term vision for data availability is to enable clients and developers to reliably and trustlessly query and replicate the specific portions of the global state that are relevant to them. This upgrade marks a significant first step toward realizing that vision by making all chain data accessible on edge nodes, also known as access nodes. This enhancement allows self-hosted and managed services to provide unrestricted, non-rate-limited access to chain data, including script execution.

Enhancing Network Security with Dynamic Protocol State

This network upgrade introduces the 'Dynamic Protocol State,' a foundational framework for enabling all node types to operate permissionlessly. In the short term, Dynamic Protocol State allows for the immediate ejection of misbehaving nodes within an epoch. Additionally, it lays the groundwork for implementing automatic countermeasures, such as algorithmically slashing misbehaving nodes or entirely revoking their authorization to participate. You can learn more about this feature here.

Improving network scalability with Atree inlining

One of Flow's goals is to support more than a Petabyte on-chain state storage. This upgrade includes a major step towards that goal by vastly improving the memory usage of execution nodes, reducing the current usage by 50% and making future growth far more efficient by revamping how state data is stored in memory on the Execution node using the new Atree register inlining. More on this here.

Faster time to finality for transactions

Over the past year, the Flow Foundation and Flow's community at large have made significant enhancements to the node software, improving performance across most key metrics. Some highlights include:

  1. Networking layer improvements
  2. Update to Jolteon consensus algorithm
  3. Update to the consensus follower.
  4. A recent major improvement was to streamline Flow’s cryptography stack and switch the low-level library from ‘relic’ to BLST (see change).

Collectively, these changes have significantly reduced block time — the time required for consensus nodes to decide on the next block. As part of the Crescendo upgrade, optimized timing dynamics will improve Flow's central consensus, reducing Time to Finality by 18% and notably enhancing the responsiveness of applications built on Flow. Additionally, the impact of offline nodes and the risk of timing attacks will be reduced by half.

Building blocks for further improving network availability

Flow has made substantial progress in enhancing network availability by reducing the frequency of planned network upgrades that require downtime from four or more per year in the past to just one this year. The amount of unplanned downtime (incidents) has also decreased significantly, with only one incident year-to-date [YTD] in 2024. Flow's current YTD uptime is well above 99.9%.

As part of this ongoing effort, the Crescendo upgrade will introduce key building blocks that enable the network to recover from a failed epoch transition without requiring a coordinated manual override by all node operators, which previously led to downtime. If the automatic setup of a new epoch fails, the network will enter a dedicated state called Epoch Fallback Mode [EFM], where transactions continue to be processed normally, but further epoch progression (ability for staked nodes to join and leave the network) is suspended. Normal operations can be fully restored with a simple governance transaction. More details can be found here.

Breaking changes

While there are no breaking changes as far as the node software and the access API are concerned, the upgrade to Cadence 1.0 introduces a breaking change for ALL contracts currently deployed on testnet and mainnet. Developers must ensure they are ready for Crescendo ahead of time and can find full details on how to stage, upgrade, and verify contracts on the Flow Migration Hub.

Commit list

Cadence 1.0 (update and migration)

Atree inlining (implementation and migration)

Dynamic Protocol State

Data Availability

Core Contracts

Admin Server

Database

FLIP 204: Add TargetDuration to Epoch models and API

  • Smart-contract Defines target duration and end time for epochs by @jordanschalm in #5071

Collection

EFM Recovery

FVM

Flow EVM

Execution

Observability and Logging

Networking

Observer

Testing

Support for Previewnet

CI/CD

Utils

Code clarity and extendability

Misc

  • cruisectl delay implementation bias (fix for deployment branch v0.37) by @AlexHentschel in #6379

New Contributors

Full Changelog: v0.33.37...v0.37.1