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%.
As a result, the recommended hardware specifications for all node roles except Execution have been revised and lowered to reflect the improved resource efficiency. Updated hardware recommendations can be found here.
๐๏ธ๐๏ธ๐๏ธ โก๏ธ ๐ ๐ ๐๏ธ 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 - 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 data across potential forks before they are subsequently resolved. Such low-latency access will enable high-frequency DeFi apps to read state early (soft finality) and to gracefully handle rare rollbacks by simply retrying or revalidating once blocks are sealed.
๐ Advancing Protocol Autonomy with Data Integrity
A major milestone on the protocol autonomy roadmap has now been completed by hardening data integrity across the network. For every data structure exchanged between nodes, a canonical, verifiable identity can be computed locally (via a collision-resistant hash) and checked against the value prescribed by protocol rules. This ensures that if a message arrives, any modification to any field is immediately detected by the recipient. In other words, an honest sender can be assured that its message, once delivered, is received by other honest nodes exactly as it was sent, regardless of potentially Byzantine intermediaries relaying it.
The update closes gaps where earlier commitments did not cover every field and left room for tampering. All data types that travel over the wire were thoroughly audited and their identities were redefined to be derived from complete content. At the same time, we reinforced the validation logic to detect message corruption whenever the reconstructed data fails to match the expected hash commitment.
Beyond Byzantine threats, accidental storage bugs could corrupt committed data and cause honest nodes to be slashed. To prevent such cases, we developed a custom linter that flags illegal mutations of protected data structures already during development.
This also gives developers and AI agents a simpler mental model: network messages can be treated as immutable objects with stable identities. Read more about this here.
Breaking Change
Event field values in dictionaries may now appear in a different iteration order. This can affect execution results, since event ordering contributes to per-chunk event hashes. Please ensure your code does not depend on the order of fields within an event.
Commit list
Scheduled Transactions
- Add ScheduleCallbacksEnabled option to FVM context by @devbugging in #7492
- Blueprints and transaction scripts by @devbugging in #7493
- Integrate into block execution workflow by @devbugging in #7494
- Integrate callback scheduler contract by @devbugging in #7579
- E2E Tests by @devbugging in #7672
- Verification by @devbugging in #7673
- API inclussion of scheduled callbacks by @devbugging in #7805
- Update to newest version of the FlowTransactionScheduler contract by @janezpodhostnik in #7891
- Update to tagged version of Scheduled Transactions by @joshuahannan in #7896
- Enable scheduled transactions by default by @peterargue in #7899
- Add scheduled transaction metrics by @devbugging in #7901
- Add scheduled transactions default cli parameters by @janezpodhostnik in #7902
- Update logger values by @devbugging in #7944
- Gracefully handle process execution failure by @devbugging in #7992
- Remove redundant metric and add bucket to histogram by @j1010001 in #8045
Add WebAuthn Commits
- Fvm passkeys implementation by @Kay-Zee in #7246
- Kan/7345 access node changes passkeys implementation by @Kay-Zee in #7466
- Tarak/7246 suggestions by @tarakby in #7487
- Access validator checks by @tarakby in #7549
- Feature/passkeys by @Kay-Zee in #7769
- remove URL base 64 padding from webauthn challenge encoding by @Kay-Zee in #7906
Cadence
- Update FVM benchmarks to Cadence 1.0 by @turbolent in #7509
- Update to Cadence v1.6.2 by @turbolent in #7518
- Update to Cadence v1.6.3 by @turbolent in #7550
- Update to cadence 1.6.5 by @SupunS in #7681
- Update to Cadence v1.7.0-preview.1 by @turbolent in #7735
- Update to Cadence v1.7.0-preview.2 by @janezpodhostnik in #7780
- Update to Cadence v1.7.0-preview.3 by @turbolent in #7822
- Update to Cadence v1.7.0 by @turbolent in #7853
- Update to Cadence v1.7.1 by @turbolent in #8001
- Update to Cadence v1.7.2 by @turbolent in #8068
Badger to PebbleDB
- Add block view index by @zhangchiqing in #6933
- Storage Refactor to use Pebble DB as backend by @zhangchiqing in #7262
- Pebble Lock Manager PoC by @jordanschalm in #7364
- Add lock context to storage cache by @zhangchiqing in #7393
- Add storage data migration functions by @zhangchiqing in #7396
- Use lockctx to store approvals by @zhangchiqing in #7406
- Collection Cluster State by @zhangchiqing in #7452
- Upgrade to Pebble 2 by @zhangchiqing in #7471
- Remove double-close of pebble batch by @jordanschalm in #7489
- Ensure batch.Close is called exactly once. by @zhangchiqing in #7490
- execution node support pebble based execution data store by @zhangchiqing in #7506
- Optimize the IterFunction by @zhangchiqing in #7582
- Refactor mutator.Extend with DeferredDBOps by @zhangchiqing in #7609
- Replace with lockctx Manager by @zhangchiqing in #7628
- Reverting portions of
mutable_protocol_state_test.goto avoid weakening the tests by @AlexHentschel in #7724 - Refactor Storing Collections by @zhangchiqing in #7736
- Adding more consistency check in storage operation by @zhangchiqing in #7741
- Pebble merge into master by @zhangchiqing in #7794
- Minor refactor by @zhangchiqing in #7799
- Enable the ByView methods by @zhangchiqing in #7806
- Revert remove efm backward compatibility for feature pebble branch by @zhangchiqing in #7808
- Replace badger with pebble in tests by @zhangchiqing in #7814
- Follower use protocol db by @zhangchiqing in #7833
- Change Default DB to be Pebble for the upcoming spork by @zhangchiqing in #7840
- 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
- Refactor safety data operations by @zhangchiqing in #8018
- Refactor execution fork evidence by @zhangchiqing in #8017
- Refactor indexing transaction error message by @zhangchiqing in #8021
- Refactor stored chunk data pack by @zhangchiqing in #7983
Account Key Deduplication
- Remove unused migration flags in execution-state-extract by @fxamacker in #7641
- Add empty-migration flag to execution-state-extract to measure minimum spork migration time by @fxamacker in #7643
- Rename publicKey related variables and functions in FVM by @fxamacker in #7693
- Add account public key deduplication migration by @fxamacker in #7738
- Sync feature/account-public-key-deduplication with master by @fxamacker in #7778
- Sync master branch into feature/account-public-key-deduplication by @fxamacker in #7820
- Add runtime public key duplicate detection and storage with support for account status v4 format by @fxamacker in #7829
- Fix the RegisterSize() function by @fxamacker in #7834
- Change report format for storage used migration from JSON to CSV by @fxamacker in #7835
- Reduce register reads by using Accounts.GetRuntimeAccountPublicKey by @fxamacker in #7841
- Merge feature account public key deduplication to master by @fxamacker in #7869
- Create diff-keys utility to compare account public keys before and after migration by @fxamacker in #7875
- Add option to validate account public key migration by @fxamacker in #7878
Overload Resilience
- Collection throttling by @durkmurder in #7683
- Metrics for prioritized transactions by @durkmurder in #8030
Data Integrity - Hash Commitment Coverage
- MissingCollection type ID method malleable. by @AndriiDiachuk in #6979
- Refactor BlockDigest and ChannelList types by @UlyanaAndrukhiv in #6980
- Refactor pendingBlock type by @AndriiDiachuk in #6990
- Refactor EventIDs, IdentifierList and GenericIdentityList types by @UlyanaAndrukhiv in #6996
- Simplify Seal by @tim-barry in #7003
- MinEpochStateEntry, EpochStateContainer, Locator, Modelv0 and Modelv1 by @UlyanaAndrukhiv in #7028
- QuorumCertificate, TimeoutCertificate, LightCollection, ExecutionResult and Attestation malleability tests. by @AndriiDiachuk in #7029
- Identity by @UlyanaAndrukhiv in #7051
- Sync
feature/efm-recoverytofeature/malleabilityby @durkmurder in #7056 - Event by @UlyanaAndrukhiv in #7068
- Automatic malleability checker by @durkmurder in #7069
- Separate BackData interface into immutable and mutable variants by @UlyanaAndrukhiv in #7088
- Update BackData to use generic arguments instead of flow.Identifier and flow.Entity by @AndriiDiachuk in #7089
- Update mapBackData to use generics and implement BackData by @UlyanaAndrukhiv in #7098
- test for Vote, ResultApprovalBody by @tim-barry in #7099
- Header by @tim-barry in #7100
- Update Backend to work with generic BackData. by @AndriiDiachuk in #7110
- Collection Malleability by @jordanschalm in #7114
- Revert "[Malleability] Update Backend to work with generic BackData." by @AndriiDiachuk in #7119
- Fix root interfaces implementations under stdmap package by @UlyanaAndrukhiv in #7121
- Update Backend to work with generic BackData. by @AndriiDiachuk in #7123
- Malleability checker follow up by @durkmurder in #7124
- Remove unused entities by @durkmurder in #7129
flow.CertifiedBlockandmodel.CertifiedBlockby @durkmurder in #7130flow.TransactionResultby @durkmurder in #7150- Update herocache to use generics and implement BackData. by @AndriiDiachuk in #7151
- Follow up for fixing root interface implementations in the stdmap package by @UlyanaAndrukhiv in #7167
- Remove unused ApprovalMapEntity, Queue by @UlyanaAndrukhiv in #7170
- Fix remaining usages of the mempool/herocache structures by @UlyanaAndrukhiv in #7172
- ResultApproval by @AndriiDiachuk in #7173
- Fix ID misuse in ExecutableBlock type by @UlyanaAndrukhiv in #7189
- Sync
mastertofeature/malleabilityby @durkmurder in #7190 - Add separate proposer signature storage by @tim-barry in #7191
- Fix ID misuse in IncorporatedResultSeal type by @UlyanaAndrukhiv in #7196
- Fixed misuse of ID for IncorporatedResult and MockEntity by @AndriiDiachuk in #7206
- ExecutionReceipt and ExecutionReceiptMeta by @tim-barry in #7208
- Chunk by @UlyanaAndrukhiv in #7213
- Fix ID implementation of IncorporatedResult type by @AndriiDiachuk in #7219
- Mempool package refactoring by @UlyanaAndrukhiv in #7228
- ChunkDataPack by @UlyanaAndrukhiv in #7235
- Extend Malleability Checker to non-Entity types by @jordanschalm in #7237
- TimeoutObject by @UlyanaAndrukhiv in #7247
- CollectionGuarantee by @AndriiDiachuk in #7248
- equals implementation for Quorum Certificate and Timeout Certificate by @AlexHentschel in #7314
- Review structs with stub ID implementation by @UlyanaAndrukhiv in #7316
- Convert Header.Timestamp to Unix Milliseconds (uint64) by @tim-barry in #7325
- cluster.Block by @UlyanaAndrukhiv in #7334
- Review implementation of Adjust in the heropool cache. by @AndriiDiachuk in #7342
- UntrustedClusterProposal, BlockProposal refactoring by @UlyanaAndrukhiv in #7357
- flow.Block by @UlyanaAndrukhiv in #7390
- flow.Block: SetPayload method removal by @UlyanaAndrukhiv in #7392
- flow.BlockProposal and UntrustedProposal refactoring by @UlyanaAndrukhiv in #7402
- Merge master into feature/malleability by @tim-barry in #7409
- Remove now-obsolete Checksum functions from flow.Entity by @tim-barry in #7416
- refactored
TestRepopulateAssignmentCollectorTree_RootSealingSegmentfor clarity by @AlexHentschel in #7436 - BlockFixture refactoring by @UlyanaAndrukhiv in #7454
- Malleability-master sync by @tim-barry in #7496
- Remove non-constructor mutations of LightCollection by @jordanschalm in #7522
- Update cache key definition for linter binary by @jordanschalm in #7528
- Events generator refactoring by @UlyanaAndrukhiv in #7531
- Remaining TODOs and Cleanup (Medium priority) by @UlyanaAndrukhiv in #7566
- Removing PayloadHash from HotStuff model.Block by @UlyanaAndrukhiv in #7576
- Sync feature/malleability with master by @tim-barry in #7586
- Changed buffer backend to support generic payload by @durkmurder in #7594
- Refactoring usages where flow.Slashable is used with UntrustedProposal by @UlyanaAndrukhiv in #7595
- Refactoring usages where flow.Slashable is used with UntrustedClusterProposal by @UlyanaAndrukhiv in #7602
- Refactor: embed HeaderBody in flow.Block by @UlyanaAndrukhiv in #7607
- Refactor: embed HeaderBody in cluster.Block by @UlyanaAndrukhiv in #7608
- Make Block.Payload generic to unify flow.Block and cluster.Block by @UlyanaAndrukhiv in #7621
- Sync feature/malleability with master by @tim-barry in #7639
- Update CollectionGuarantee in Access API by @tim-barry in #7640
- Spork root block view extends previous spork by @UlyanaAndrukhiv in #7666
- fix CollectionGuarantee ID indexing by @tim-barry in #7669
- rename CollectionGuarantee.ChainID to ClusterChainID by @tim-barry in #7670
- Update bootstrapping to support transferring KVStore from old network to new by @UlyanaAndrukhiv in #7675
- Sync master to feature/malleability by @UlyanaAndrukhiv in #7685
- Block JSON Encoding by @jordanschalm in #7742
- Feature: Malleability by @jordanschalm in #7748
- Sync master to Malleability branch by @jordanschalm in #7750
- Sync master to malleability branch by @tim-barry in #7766
- Fix malleability issues in system collection for scheduled callbacks by @tim-barry in #7781
Data Integrity - Immutability
- Removed non-constructor mutations for EpochRecover, EpochSetup and EpochCommit by @UlyanaAndrukhiv in #7407
- Removed non-constructor mutations for MissingCollection, Vote and IncorporatedResult structs by @AndriiDiachuk in #7412
- Removed non-constructor mutations for Attestation, ResultApprovalBody and ResultApproval structs by @AndriiDiachuk in #7417
- Removed non-constructor mutations for MinEpochStateEntry, EpochStateEntry and RichEpochStateEntry by @UlyanaAndrukhiv in #7418
- Removed non-constructor mutations for EpochProtocolStateAdapter and EpochStateContainer by @UlyanaAndrukhiv in #7427
- Removed non-constructor mutations for TimeoutObject and TimeoutCertificate by @UlyanaAndrukhiv in #7433
- Removed non-constructor mutations for ChunkDataPackRequest and ChunkDataPackResponse by @UlyanaAndrukhiv in #7437
- Removed non-constructor mutations for Locator by @UlyanaAndrukhiv in #7478
- Removed non-constructor mutations for Collection and CollectionGuarantee structs by @AndriiDiachuk in #7486
- ComputationResult refactoring by @UlyanaAndrukhiv in #7511
- Removed non-constructor mutations for Event by @UlyanaAndrukhiv in #7512
- Removed non-constructor mutations for Seal by @UlyanaAndrukhiv in #7516
- Removed non-constructor mutations for Chunk, ChunkDataPack and ExecutionResult structs. by @AndriiDiachuk in #7525
- Removed non-constructor mutations for ExecutionReceipt, UnsignedExecutionReceipt by @UlyanaAndrukhiv in #7527
- Removed non-constructor mutations for ExecutionReceiptStub, UnsignedExecutionReceiptStub by @UlyanaAndrukhiv in #7535
- Removed non-constructor mutations for QuorumCertificate struct. by @AndriiDiachuk in #7542
- Add ExecutionResult validation to UnsignedExecutionReceipt constructor by @UlyanaAndrukhiv in #7548
- Enforce immutability for Block (cluster) by @UlyanaAndrukhiv in #7553
- Removed non-constructor mutations for
Headerstruct. by @AndriiDiachuk in #7557 - Enforce immutability for Block (flow) by @UlyanaAndrukhiv in #7560
- Removed non-constructor mutations for
TransactionandTransactionBodystructs. by @AndriiDiachuk in #7583 - Avoid unittest.BlockFixture to create invalid blocks when option WithParent is given by @UlyanaAndrukhiv in #7845
- InstanceParams no longer reads anything from the database; hence remove database field by @UlyanaAndrukhiv in #7849
- Consolidate InstanceParams into one storage object by @UlyanaAndrukhiv in #7857
- 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
Data Availability
- Implement Index step logic by @Guitarheroua in #7367
- Implement Persist step logic by @Guitarheroua in #7415
- Extract collection syncing logic from ingestion engine by @illia-malachyn in #7455
- Add LatestPersistedSealedResult module by @peterargue in #7460
- Integrate pipeline processing steps into Core by @Guitarheroua in #7470
- Add new error message requester by @illia-malachyn in #7484
- Add new ingestion engine package by @illia-malachyn in #7504
- Improve error handling in new indexer module and storage by @peterargue in #7513
- Refactor processing pipeline for results forest by @peterargue in #7514
- Add functional tests for processing pipeline by @Guitarheroua in #7526
- Refactored persisters(WIP) by @Guitarheroua in #7532
- Improve ingestion engine error handling by @illia-malachyn in #7552
- refactor accounts and events backends by @illia-malachyn in #7558
- Suggestions for updated state machine by @durkmurder in #7562
- Create module to get ExecutionResult for request criteria by @Guitarheroua in #7565
- refactor backend transactions module by @illia-malachyn in #7575
- refactor scripts backend by @illia-malachyn in #7578
- Suggestions for updates to ExecutionResultQueryProvider by @peterargue in #7596
- Define storage layer API interface by @Guitarheroua in #7638
- rename backend data retrievers by @illia-malachyn in #7661
- Move tx stream backend tests to appropriate folder by @illia-malachyn in #7662
- move script executor for accounts, scripts, tx validator to backend by @illia-malachyn in #7665
- Improve API request/response limit config by @peterargue in #7815
- Update Access API endpoints to support schedule callbacks MVP by @peterargue in #7890
- 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
- Refactor pipeline core logic storage by @peterargue in #8010
- Add schedule transaction indexing by @peterargue in #8025
- Call ready when ping engine started by @peterargue in #8041
- Add compatibility override for testnet HCU v0.43.1 by @peterargue in #8044
Flow Core Contract Update
- Update flow-core-contracts version by @joshuahannan in #7533
- Updates flow-core-contracts dependency to 1.7.2 by @joshuahannan in #7581
- Update to core contracts 1.8.1 by @joshuahannan in #7905
- Updates core-contracts deps and adds deployment for FlowTransactionSchedulerUtils by @joshuahannan in #7938
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
- Fix chunk data pack store by @zhangchiqing in #8046
- added suggestions for Chunk Data Pack ID computation by @AlexHentschel in #8033
- Suggested documentation extensions for Chunk Data Pack PR #7983 by @AlexHentschel in #8038
- Remove legacy migration used in Crescendo by @fxamacker in #8036
FVM
- Refactor and cleanup FVM metering by @janezpodhostnik in #7810
- Disable FVM metering inside EVM transactions by @janezpodhostnik in #7825
- Clean up test runtime by @turbolent in #8003
- Collect EVM-related events during VM bridge bootstrapping by @m-Peter in #7999
- Parallelize tests in FVM and execution by @turbolent in #8027
EVM
- Fix high CPU usage related to EVM
DeltaView.AddressInAccessListby @m-Peter in #7405 - Improve organization, comments, and error messages in the EVM contract by @joshuahannan in #7458
- Handle non-existing accounts in all of state overrides methods by @m-Peter in #7737
- Add a test case utilizing a read-write heavy EVM tx by @m-Peter in #7745
- Add the
MaxGasConsumedfield in EVMResulttype by @m-Peter in #7951 - Fix bug on
ChainRules()as we are already onMergeby @m-Peter in #8047
Collection Node
- Change default hotstuff-min-timeout for collection nodes to 1s by @devin-ai-integration[bot] in #7598
Networking
- Add priority message queue implementation by @peterargue in #7554
AI Tooling
- Ignore .cursor/ by @peterargue in #7498
- Add cursor rule for godocs by @peterargue in #7515
- Refined / extended Cursor rules by @AlexHentschel in #7540
- Reorganize docs for agents by @peterargue in #7770
BFT
General improvements
- adding access node compatibility for new version by @j1010001 in #7499
- Enable Admin Endpoints and Selective Profiling for Flow Nodes by @manny-yes in #7501
- Remove replace directive to fix downstream build issue by @fxamacker in #7505
- fix: remove duplicate engine label in collection provider logging by @devin-ai-integration[bot] in #7563
- Migrate from golang-lru v1 to v2 by @devin-ai-integration[bot] in #7584
- Fix incorrect block status reporting in Access API by @devin-ai-integration[bot] in #7601
- Adjust cruise control configuration by @jordanschalm in #7604
- Remove EFM backward compatibility logic for
DGKIndexMapby @devin-ai-integration[bot] in #7631 - Remove EFM backward compatibility logic for
ChunkBodyby @devin-ai-integration[bot] in #7635 - Remove remaining person-specific special case from CODEOWNERS by @jordanschalm in #7646
- Bump
onflow/go-ethereumdependency tov1.16.2by @m-Peter in #7660 - Replace Geth fork with original Geth by @m-Peter in #7676
- Update to Flow Go SDK v1.7.0 by @turbolent in #7746
- Bump
ethereum/go-ethereumdependency tov1.16.3by @m-Peter in #7817 - Update go to 1.25 by @peterargue in #7821
- moving coding conventions back into root folder. by @AlexHentschel in #7839
- Metric for emergency seals by @jordanschalm in #7871
- remove
flow.Transactionas it is no longer used by our business logic (and fix flakey integration test) by @AlexHentschel in #7881 - Add .dockerignore for .git/ by @peterargue in #7892
- Remove cmd/testclient directory by @devin-ai-integration[bot] in #7895
- Update to flow-go-sdk@v1.8.2 by @jribbink in #7907
- Remove
procedurepackage by @jordanschalm in #7958 - chore: fix inconsistent function name in comment by @cargoedit in #7961
Testing Tools
- Add startup option to disable transaction fees by @janezpodhostnik in #7517
- Fix localnet startup by @janezpodhostnik in #7779
- Fix localnet bootstrapping by @janezpodhostnik in #7788
- 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
Utils
- Modify sealing segment result population logic by @jordanschalm in #5181
- Storage data migration with SSTables (~10x migration speed improvement) by @zhangchiqing in #7467
- Add pebble checkpoint util by @zhangchiqing in #7468
- Update Util to support both badger and pebble based database by @zhangchiqing in #7469
- Add warning note for
NodeInfoby @tarakby in #7480 - Add support for promoting images to partner registry by @sjonpaulbrown in #7580
- Add support for overriding default flow-genesis-bootstrap bucket by @sjonpaulbrown in #7667
- Update prepare command to support key generation without bootstrap dir by @sjonpaulbrown in #7668
- Update Docker Login to conditionally run on internal PRs by @sjonpaulbrown in #7733
- Update transit commands to support output folders by @sjonpaulbrown in #7734
- logging failure to download random beacon key as fatal instead of infโฆ by @vishalchangrani in #7757
- Address bugs in transit tooling by @sjonpaulbrown in #7762
- Fix hang during admin server shutdown by @peterargue in #7771
- Refactor testing lock manager usage by @zhangchiqing in #7773
- Add support for tracing to debug-tx command by @turbolent in #7793
- Use pebble datastore by @zhangchiqing in #7861
- updating transit script to not attempt to upload root block vote if the vote file does not exist locally by @vishalchangrani in #7874
- 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
Documentation
- Documentation for
mutatorwrt concurrent additions of blocks by @AlexHentschel in #7101 - Fixed incorrect link in README by @roysti10 in #7606
- casting clarification by @tarakby in #7791
- AI friendly documentation guideline for low-level storage functions in package
storage/operationby @AlexHentschel in #7797 - Refined godoc for
MessageHandlerby @durkmurder in #7937 - chore: remove redundant words by @juejinyuxitu in #7943
- Add note in tx validator about sweet onion plan by @jordanschalm in #7947
- Add README for storage packages by @jordanschalm in #7980
CI
- Add dockerhub login by @peterargue in #7688
- Add support for specifying lint path by @peterargue in #7727
- Update CI workflow to leverage environments by @sjonpaulbrown in #7728
- Update CI workflow to remove unneeded environment check by @sjonpaulbrown in #7747
- 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
New Contributors
- @manny-yes made their first contribution in #7501
- @roysti10 made their first contribution in #7606
- @juejinyuxitu made their first contribution in #7943
- @cargoedit made their first contribution in #7961
Full Changelog: v0.42.3...v0.43.3