Releases: onflow/flow-go
v0.43.1-rc.6
What's Changed
Data Availability
- Request collections immediately by @peterargue in #7926
- Allow streaming from the spork root block by @peterargue in #7913
- Fix noisy and flaky unittests by @peterargue in #7973
- Fix unsynchronized concurrent access in downloader by @peterargue in #7989
- Record the highest consecutive download height by @peterargue in #8004
- Speedup websockets keepalive test by @peterargue in #8012
- improve tx error message indexing by @peterargue in #7991
- Use forked go-ds-pebble to guarantee writes - take 2 by @peterargue in #8007
Execution
- Change system chunk logging by @janezpodhostnik in #7993
- Refactor and cleanup progress logger by @janezpodhostnik in #7889
- Update lz4 compression library by @peterargue in #7990
Immutability
- Extend InterfaceFromMessageCode, define UntrustedMessage interface. by @AndriiDiachuk in #7739
- messages.Proposal, messages.ClusterProposal: message/internal split + validation by @UlyanaAndrukhiv in #7731
- messages.CollectionGuarantee: message/internal split + validation by @UlyanaAndrukhiv in #7761
- messages.BlockResponse, messages.ClusterBlockResponse: message/internal split + validation by @UlyanaAndrukhiv in #7740
- messages.SyncRequest, messages.SyncResponse and messages.BatchRequest: message/internal split + validation by @UlyanaAndrukhiv in #7776
- messages.EntityRequest and messages.EntityResponse: message/internal split + validation by @AndriiDiachuk in #7790
- messages.ChunkDataRequest, messages.ChunkDataResponse and messages.RangeRequest: message/internal split + validation by @UlyanaAndrukhiv in #7798
- messages.ApprovalRequest and messages.ApprovalResponse : message/internal split + validation by @AndriiDiachuk in #7760
- messages.BlockVote, messages.ClusterBlockVote, messages.TransactionBody and messages.Transaction: message/internal split + validation by @AndriiDiachuk in #7801
- messages.TimeoutObject and messages.ClusterTimeoutObject: message/internal split + validation by @UlyanaAndrukhiv in #7818
- flow.ExecutionReceipt and messages.DKGMessage: message/internal split + validation by @UlyanaAndrukhiv in #7823
- messages.ResultApproval and messages.TestMessage: message/internal split + validation by @AndriiDiachuk in #7824
- Sync feature/networking-layer-immutability with Master by @AndriiDiachuk in #7900
- Network Layer by @AndriiDiachuk in #7887
Scheduled Transactions
- Update logger values by @devbugging in #7944
- Gracefully handle process execution failure by @devbugging in #7992
FlowEVM
Storage
- Fix memory caches getting out of sync with db (BadgerDB & Pebble) by @fxamacker in #7597
- Remove execution data mode by @zhangchiqing in #7880
- Deprecate pebble dir flag by @zhangchiqing in #7919
- Refactor insert chunk data pack by @zhangchiqing in #7939
- Refactor insert proposal sig by @zhangchiqing in #7963
- Refactor operations to update parent children block index by @zhangchiqing in #7930
- Refactor index cluster height by @zhangchiqing in #7954
- Refactor epoch protocol state by @zhangchiqing in #7964
- Refactor index protocol kv store by @zhangchiqing in #7967
- Suggested amendments for PR #7930 by @AlexHentschel in #7981
Cadence
- Update to Cadence v1.7.1 by @turbolent in #8001
Testing
- Fixture generation framework by @peterargue in #7687
- Refactor AcquireLock with WithLock in tests by @zhangchiqing in #7865
- Update mockery setup to use packages, cleanup mocks by @peterargue in #7904
- Refactor notifier_test to use synctest by @peterargue in #7966
Util
- improve logging for verify execution result by @zhangchiqing in #7828
- Logging - fix the log when generating key for bootstrap by @zhangchiqing in #7842
- Update storage health check to add account key validation, etc. by @fxamacker in #7917
- Support account status v4 in checkpoint-collect-stats util by @fxamacker in #7925
CI
- Add new make lint targets by @peterargue in #7777
- Fix codecov action args by @peterargue in #7948
- Prevent actions/stale from closing pull requests with "Preserve" label by @fxamacker in #7936
flow-go-sdk
- Update to [email protected] by @jribbink in #7907
Core Contracts
- Updates core-contracts deps and adds deployment for FlowTransactionSchedulerUtils by @joshuahannan in #7938
Documentation
- Refined godoc for
MessageHandler
by @durkmurder in #7937 - chore: remove redundant words by @juejinyuxitu in #7943
- Add note in tx validator about sweet onion plan by @jordanschalm in #7947
New Contributors
- @juejinyuxitu made their first contribution in #7943
Full Changelog: v0.43.0...v0.43.1-rc.6
🎺 Forte (Mainnet 27)
The Forte network upgrade will unlock the next era of Flow. This upgrade will empower developers and AI agents building on Flow, unlocking protocol composability and native automation directly on the network. Forte upgrades Flow with the tools and performance to make it a best-in-class option for building with AI, tapping into Cadence’s developer friendliness, launching new features, and introducing a reusable component library alongside core protocol improvements.
Forte advances the roadmap across all three pillars - developer experience, efficiency and scalability, and protocol autonomy.
🧑💻✨ Revolutionizing Developer Experience
🕦 🤖 Build Autonomous Apps with Scheduled Transactions
Flow adds Scheduled Transactions, the first native time scheduler that lets on-chain apps run tasks automatically, like cron job for blockchains. So applications are no longer restricted to being reactive only to user transactions.
Scheduled Transactions enable autonomous apps, for example DeFi protocols and AI-driven agents that proactively rebalance, settle, sweep on a schedule, all without external keepers. They run natively on the network, which simplifies operations, reduces off-chain dependencies, and makes behavior auditable and predictable in code. For builders, this means fewer moving parts to deploy, fewer operational scripts to maintain, and a cleaner path to automation-heavy use cases that feel instant and reliable to end users. This work implements FLIP 330: Scheduled Transaction.
🔢🔢🔢🔢 High-precision DeFi with 128-bit fixed-point types in Cadence
Cadence now supports Fix128 and UFix128, 128-bit fixed-point types enabling precision up to 24 decimal places for advanced DeFi, risk engines, interest accrual, and other finance-heavy workloads. These types expand numeric range while preserving fine fractional precision, and all existing Fix64 and UFix64 values convert losslessly to their 128-bit counterparts. In contrast, most Ethereum contracts rely on integer math with token “decimals” rather than a native fixed-point type, which means Cadence’s built-in 128-bit fixed-point support removes much of the bespoke arithmetic scaffolding and reduces rounding-related errors in application code. This work implements FLIP 341: Add 128-bit Fixed-point Types to Cadence.
📱 🔑 Native WebAuthn and Passkey Support
Flow adds native WebAuthn support to the protocol: you can now authorize transactions with passkeys and other WebAuthn credentials. The Access API and Cadence FVM have been extended to accept and validate WebAuthn signatures, enabling device-backed credentials from iOS, Android, browsers, and password managers to sign transactions. This work implements FLIP 264: WebAuthn Credential Support, bringing standard WebAuthn authentication to Flow accounts without breaking existing flows.
For users, passkeys eliminate the need for seed phrases while preserving self-custody and secure cross-device portability. Wallets and applications can take advantage of widely adopted WebAuthn implementations in browsers and operating systems, which makes integration simple. For example, with Flow’s native account abstraction model and on-chain passkey support, developers can build smart wallets on Flow without relying on additional smart contract layers like ERC-4337. Flow Wallet will soon be integrating WebAuthn in the near future.
🤖 ❤️ 🤗 Descriptive, AI- and human-friendly Cadence errors
Cadence compiler and linter errors are now designed for AI assistance, making it easier for agents and IDE copilots to fix issues automatically. Messages for common problems, including pre-1.0 keyword changes like pub, have been rewritten to explain the cause, suggest concrete fixes, and link directly to reference docs and migration notes. These enriched primary and secondary messages are also surfaced through the Cadence language server, so tools like Cursor and other agent-based editors can follow the link, apply the recommended change, and validate the result. The outcome is faster feedback, fewer round trips to documentation, and a smoother path for AI agents that refactor or migrate Cadence code, all of which advances Flow’s goal of first-class developer experience for agent-powered workflows.
⚙️ Boosting Efficiency and Scalability
🦡 ➡️ 🪨 Switching node database from BadgerDB to PebbleDB for more scalability
This release upgrades node storage to PebbleDB to deliver better uptime, smoother operations, and lower total cost for operators. PebbleDB offers higher stability under load for our workloads, eliminating memory spikes, effective automated pruning of historical data, a modest performance edge in typical node operations, and broad ecosystem adoption that supports rapid improvements and long-term runtime reliability. In practice, these strengths translate into more scalable nodes, simpler database management, and improved ROI for operators. Following the migration, measured outcomes show significant gains: depending on node type memory usage improves by up to 80%, CPU usage drops by up to 60%, and annual disk usage is reduced by up to 30%.
🗝️🗝️🗝️ ➡️ 👉 👉 🗝️ Make state storage more efficient with account key de-duplication
Public key de-duplication streamlines Flow’s state while preserving the flexibility of multi-key accounts. Many apps intentionally reuse the same key to manage multiple in-flight transactions, since each key maintains its own sequence number. With de-duplication, when a previously added key is added again the state now references a single canonical entry instead of storing another copy, and existing accounts have been de-duplicated transparently. The duplication problem is significant: over half of all keys (53%) are duplicates, and one in ten accounts (10%) contain duplicate keys. Removing duplicates cuts a large chunk of redundant data, shrinking Flow’s execution state by about 6% (21 GB out of 349 GB). Specifically, we trimmed 0.29 billion of the current 1.82 billion entries in Flow’s low-level storage trie, making state access leaner and faster. This translates to an estimated 6–18% reduction in memory used by Execution Nodes, and benefits any node or service that touches payloads by moving less data and finishing work sooner.
📈 🎚️ Overload resilience with adaptive collection rate limiting
Flow’s architecture functions like [an assembly line](https://flow.com/why-flow: transactions are first batched into blocks, then executed, and finally committed (“sealed”) only after the results have passed verification . This pipelined design enables massive scalability. However, if the collection nodes, the first stage of the pipeline, accept more transactions than subsequent stages can process, a backlog may accumulate inside the pipeline. Forte introduces adaptive rate limiting for collections so that when execution or sealing lags, collection nodes automatically ease off. The result is a steadier pipeline flow, even at transaction rates of several hundred per second.
This resilience feature is increasingly important as transaction volume continues to grow. With Flow Actions, AI agents are expected to drive additional traffic. The limiter activates only above a configurable threshold and disengages automatically once sealing catches up. Load testing at upwards of 300 TPS shows that inserting one or two blocks with empty collections is often sufficient to clear accumulated sealing lag. Consequently, the limiter engages only for a small minority of blocks. Governance and protocol transactions are prioritized, ensuring that critical operations continue even while rate limiting is active. Sealing lag is tracked continuously and exposed as a metric for observability and tuning. In this way, Flow strengthens its resilience under challenging operational conditions, remaining highly responsive even during periods of network overload.
🚧 🧱 Unlocking (near) real-time transaction results
Flow’s long-term vision for data availability is to enable clients and developers to trustlessly access Flow’s state with minimal latency. In practice, this is achieved through Access Nodes (ANs), which replicate block state and transaction results, serving them directly without relying on third-party services.
The Crescendo upgrade marked a major milestone towards this vision: ANs began locally replicating account data along with the transaction results and events for each sealed block. This allowed ANs to serve state queries directly from their own data, reducing latency and easing load on the Execution Nodes through local instead of remote data lookups. Shortly after, the next upgrade introduced streaming endpoints, further improving developer experience when building dApps that consume chain data. Today, ANs replicate account data and results for sealed blocks only, avoiding the complexity of handling forks.
With Forte’s groundwork, ANs will soon be able to ingest account data and transaction results for both Cadence and EVM prior to finalization and sealing, with the ability to replicate and serve da...
7th Aug 2025 - Height Coordinated Upgrade on Mainnet26 at Block Height 122174655
What's Changed
Full Changelog: v0.42.1...v0.42.3
17th June 2025 - Height Coordinated Upgrade on Mainnet26 at Block Height 116720200
What's Changed
Data Availability
- Fix high CPU usage related to EVM
DeltaView.AddressInAccessList
by @m-Peter in #7502 - adding access node compatibility for new version by @j1010001 in #7500
Cadence
- Update to Cadence v1.6.1 by @turbolent in #7519
Storage
- Remove double-close of pebble batch by @jordanschalm in #7488
- Ensure batch.Close is called exactly once. by @zhangchiqing in #7491
Full Changelog: v0.42.0-rc.2...v0.42.1
3rd June 2025 - Height Coordinated Upgrade on Mainnet26 at Block Height 115211511
What's Changed
Data Availability
- Implement processing pipeline state machine by @Guitarheroua in #7256
- Implement oneshot execution data requester by @illia-malachyn in #7329
- Allow small gap between streaming start and indexed height by @peterargue in #7340
- Update websockets events and account status reponses to use json-cdc encoding by @peterargue in #7339
- Add opportunity to extract data from storages by @illia-malachyn in #7394
- Fix version compatibility list by @peterargue in #7420
- Add compatibility override for v0.42.0 by @peterargue in #7445
- updating Pectra upgrade timestamps by @zhangchiqing in #7450
Cadence
- Update master to Cadence v1.4.1 by @zhangchiqing in #7440
- Update to Cadence v1.5.1 by @turbolent in #7442
- Update to Cadence v1.6.0 by @turbolent in #7446
Execution
- Fix multiple versions of msgpack being used by @fxamacker in #7399
- Fix event index for service events by @peterargue in #7426
- Disable halfway data migration from badger to pebble by @zhangchiqing in #7439
FVM
- Cache version beacon per context by @janezpodhostnik in #7438
Storage
- Refactor hotstuff Persister by @zhangchiqing in #7358
- Fix Writer.Set() & Writer.Delete() args not being safe to modify (BadgerDB) by @fxamacker in #7400
- Optimize memory cache key creation and key format for some stores by @fxamacker in #7391
- Optimize iterating and seeking with BadgerDB by @fxamacker in #7432
- Fix memory caches getting out of sync with databases (BadgerDB and Pebble) by @fxamacker in #7324
- Support Execution Fork Evidence for new databases (BadgerDB & Pebble) by @fxamacker in #7388
Bug fixes
- Fix bug where protected types appear as fields in unprotected types by @jordanschalm in #7386
Util
- Refactor the flags for reading datadir and pebble-dir by @zhangchiqing in #7380
Full Changelog: v0.41.4...v0.42.0-rc.2
23rd May 2025 - Height Coordinated Upgrade on Mainnet26 at Block Height 114045444
What's Changed
Data Availability
- Fix version compatibility list - v0.41 by @peterargue in #7421
- Remove v0.41 compatibility override by @peterargue in #7424
Cadence
- Update to Cadence v1.4.1 by @turbolent in #7434
Full Changelog: v0.41.0...v0.41.4
v0.41.3
What's Changed
- [Access] Remove v0.41 compatibility override by @peterargue in #7424
Full Changelog: v0.41.2...v0.41.3
v0.41.2
What's Changed
- [Access] Fix version compatibility list - v0.41 by @peterargue in #7421
Full Changelog: v0.41.1...v0.41.2
15th May 2025 - Height Coordinated Upgrade on Mainnet26 at Block Height 113162222
What's Changed
EVM Pectra Update
- set Pectra upgrade timestamp to Jun 3rd 2025 by @j1010001 in #7371
- Update to and enable EVM Pectra hard-fork by @m-Peter in #7328
- updating Pectra upgrade timestamps by @j1010001 in #7384
Data Availability
- update websockets cli flag by @peterargue in #7253
- Only log version control overrides once by @peterargue in #7266
- change list_subscription to list_subscriptions by @illia-malachyn in #7317
- Refactor storage collections for access node by @zhangchiqing in #7093
- Add support for multi-store reading of collections & transactions in Access Nodes by @fxamacker in #7321
- Add support for multi-store reading of events, lightTransactionResults, etc. (BadgerDB & Pebble) by @fxamacker in #7335
- Backport websockets API fixes to v0.41 by @peterargue in #7387
Storage
- Close BadgerDB before db init functions return error by @fxamacker in #7229
- Remove old code in
initBadgerDB()
by @fxamacker in #7230 - Optimize storing execution receipts in BadgerDB by @fxamacker in #7238
- Optimize speed & memory for generating db keys (BadgerDB and Pebble) by @fxamacker in #7243
- Discard BadgerDB transaction when iterator is closed by @fxamacker in #7254
- Add
Closer
to Batch interface and use it to prevent memory leak (BadgerDB & Pebble) by @fxamacker in #7257 - Add db Seeker for up to ~50x speedup & ~18x less memory seeking key in range (BadgerDB, Pebble) by @fxamacker in #7255
- Fix batch remove in ServiceEvents to use the correct batch (BadgerDB, Pebble) by @fxamacker in #7323
- Add database multiReader, multiIterator, multiSeeker (BadgerDB, Pebble) by @fxamacker in #7320
- Remove unneeded lock in storage Callbacks and document it isn't safe for concurrent use by @fxamacker in #7352
- Update DB.Reader() API to not return error by @fxamacker in #7354
- Fix deadlock in batch writes by @zhangchiqing in #7341
- Support NodeDisallowList for db migration by @fxamacker in #7361
- Refactor to rename blocklist to disallowlist for consistency by @fxamacker in #7363
Crypto
Cadence
- Update to Cadence v1.3.4 and atree v0.10.0 by @turbolent in #7261
- Update to Cadence v1.4.0 by @turbolent in #7353
CI/CD
- Modify CI to support custom linter plugin by @jordanschalm in #7322
- Create pipeline to handle image promotion from private registry to public by @sjonpaulbrown in #6826
- Update build workflow to support GitHub App by @sjonpaulbrown in #7350
- Remove workflows in favor of centralized build workflow by @sjonpaulbrown in #7362
Misc
- Disable block profiler by @zhangchiqing in #7215
- Add Execution, Cadence, and Metering parameters to the Protocol State by @jordanschalm in #7020
- Add string function to StateCommitment type, use in place of marshalJSON by @Kay-Zee in #7194
- Update build tools to support injection of cadence deploy key by @sjonpaulbrown in #6932
- Logging level adjustments by @jordanschalm in #7174
- Create in-memory transaction storage by @illia-malachyn in #7197
- In-memory storage for light tx results and tx results error messages by @illia-malachyn in #7205
- Add in-memory storage for events by @illia-malachyn in #7207
- Simple leader selection utility by @jordanschalm in #7160
- Add in-memory collection storage by @illia-malachyn in #7220
- Adds bridge to fvm bootstrapping by @joshuahannan in #7053
- PoC: Linter for constrained mutation of types by @jordanschalm in #7310
- Enable custom
structwrite
linter in CI by @jordanschalm in #7326 - Fix bug in bootstrapping duplicate node ID test by @jordanschalm in #7333
- Add in-memory registers storage by @illia-malachyn in #7233
- Improve remote debugger by @turbolent in #7001
- Remove database dependency from consensus builder by @zhangchiqing in #7347
- Remove account storage format v2 migration by @turbolent in #7344
- Update BN2 Makefile to shift repo cloning & fix pvc deletion by @sjonpaulbrown in #7349
- Improve size check in HexStringToIdentifier by @j1010001 in #7346
- Localnet hooks for TPS loader by @janezpodhostnik in #7165
- Add additional test to check for state commitment changes by @janezpodhostnik in #7377
- Reduce state extraction w/o migration by ~29 minutes (~2.5x speedup) by @fxamacker in #7373
- adding compatibility for v0.41 by @j1010001 in #7385
Full Changelog: v0.40.0...v0.41.0
v0.40.2
What's Changed
- [Access] Allow small gap between streaming start and indexed height - v0.40 by @peterargue in #7360
- [Access] Update websockets events and account status reponses to use json-cdc by @peterargue in #7359
Full Changelog: v0.40.1...v0.40.2