Releases: onflow/flow-go
October 29th 2024 Height Co-orindated Upgrade on Mainnet26 at block height 91874965
What's Changed
- Marking v0.37.18 as backward compatible in terms of script execution by @vishalchangrani in #6595
- Expose version boundary to cadence interface - port by @janezpodhostnik in #6597
- Update to Cadence v1.0.2 by @turbolent in #6607
Full Changelog: v0.37.17...v0.37.20
October 8th 2024 Height Co-orindated Upgrade on Mainnet26 at block height 89610514
What's Changed
- Backport v0.37 [Bootstrap] Fix duplication detection in root block finalization by @zhangchiqing in #6485
- cherrypick commits from PR: #6513 by @vishalchangrani in #6530
- [EVM] port of #6451 - Adding commitment over state update by @ramtinms in #6476
- [EVM] port of 6456 - add state update checksum to tx executed events by @ramtinms in #6477
- [Access] Add support for ignoring version beacon events for compatible versions by @peterargue in #6536
- Update to cadence v1.0.1 by @SupunS in #6548
Full Changelog: v0.37.16...v0.37.17
Mainnet 26
What's Changed
Cadence
- Port internal 6971 by @turbolent in #6502
- Reject entitled Account.capabilities.get/borrow/publish by @turbolent in #6500
Network
- Add Libp2p Gossipsub Peer Gater - v0.37 by @peterargue in #6493
- switching off peer-scoring by default by @vishalchangrani in #6473
- Change sample size log from warn to debug by @kc1116 in #6460
EVM
- Port PR 6430 (Support EVM registers in check-storage) to v0.37 by @fxamacker in #6454
- port #6467 - patch evm tracer by @ramtinms in #6475
- backport of 6480 - handle UInt,Int types for ABI encoding/decoding by @ramtinms in #6481
- port 6486 - Add boundary checks for ABI encoding values of type UInt & Int by @ramtinms in #6492
FVM
- Fix metering invalidation - port by @janezpodhostnik in #6461
Execution
- Lower retry interval in EN requester engine by @jordanschalm in #6436
Tools
- Fix cluster assignment >2/3 internal check by @jordanschalm in #6432
- Recover validation error pretty printing panic by @turbolent in #6434
- update to transit script pull command to download file if md5 of remote file is not known by @vishalchangrani in #6453
- adding an option to boostrapcmd to pull candidate access nodes in addition to proposed nodes by @vishalchangrani in #6489
- Remove internal partners from root block creation by @zhangchiqing in #6471
Misc
- minor revision of log, to clarify the root causes of likely benign error log by @AlexHentschel in #6420
- Transaction Validator recovers from script parse panic by @jordanschalm in #6443
Full Changelog: v0.37.10...v0.37.16
🎵 Crescendo (Mainnet25)
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:
- Networking layer improvements
- Update to Jolteon consensus algorithm
- Update to the consensus follower.
- 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)
- Add cadence values migration by @SupunS in #5192
- Update to Stable Cadence preview 2 by @dsainati1 in #5246
- Update event validation logic to account for the
evm.*
events by @m-Peter in #5262 - Cadence 1.0 state migrations: Update to new static types migration by @turbolent in #5286
- Add staged contract migration by @SupunS in #5300
- Type check staged contract during migration by @SupunS in #5333
- Support emulator in migrations by @SupunS in #5345
- Improve Cadence 1.0 migration by @turbolent in #5353
- Optimize migration by adding ability to read or extract payloads from state by @fxamacker in #5386
- Improve Cadence 1.0 migration by @turbolent in #5388
- Unify system-contracts migration and staged-contracts migration by @SupunS in #5405
- Read staged contracts from CSV file by @SupunS in #5425
- Add value migration test for untyped capabilities by @SupunS in #5434
- Add version, partial state indicator, and checksum to payload file (intermediate migration file) by @fxamacker in #5438
- Add sub-command to generate addresses for a chain by @turbolent in #5453
- Optimize deployment migration by @turbolent in #5470
- Export migrator runtime constructor by @SupunS in #5475
- Update to SDK v1.0.0-M7 by @turbolent in #5478
- Improve Migration by @turbolent in #5479
- Fix data race in account grouping for account based migration by @fxamacker in #5488
- Sync with master by @turbolent in #5493
- Add migration diff util for testing and debugging migrations by @fxamacker in #5499
- Improve migrations by @turbolent in #5533
- Add missing rule for NonFungibleToken.Collection type by @turbolent in #5541
- Fix import resolving during staged contract updates by @SupunS in #5551
- Improve cadence migrations by @SupunS in #5564
- Make contract update validation thread safe by @SupunS in #5565
- Revert "Optimise merge registers for migrations" by @turbolent in #5594
- Improve error printing in contract validator by @SupunS in #5596
- Fix data races in tests by @turbolent in #5599
- Fix storage map key conversion in atree migration by @fxamacker in #5605
- Add util command to extract payload by address by @fxamacker in #5608
- Fix and improve st...
v0.34.0-crescendo-preview.16
What's Changed
- Improve migrations by @turbolent in #5657
- Clean up EVM environment setup by @turbolent in #5668
- [Execution] Add ingestion throttle by @zhangchiqing in #5337
- [EVM] Block timestamp by @sideninja in #5660
- Khalil/6959 Recover Epoch transaction args script by @kc1116 in #5576
- Log the checkpoint file when generating protocol snapshot by @zhangchiqing in #5679
- [Execution] Ingestion - add ingestion core by @zhangchiqing in #5288
- Fix EVM load test by @turbolent in #5737
- [EVM] Add bridging interface to EVM contract by @sisyphusSmiling in #5677
- [Access] Added transaction result in SendAndSubscribeTransactionStatuses response by @Guitarheroua in #5620
- fix util docker build - port to master by @j1010001 in #5751
- Fix unsafeTraverse error handling by @zhangchiqing in #5661
- Use existing storage health check by @turbolent in #5756
- Add a migration which detects and filters out unreferenced slabs by @turbolent in #5653
- Add migration to fix refs to non-existent registers by @fxamacker in #5755
- Fix block queue edge case by @zhangchiqing in #5753
- create snapshot map with multiple goroutines by @janezpodhostnik in #5646
- Updates Core Contracts dependencies by @joshuahannan in #5771
- Do not use capabilities.get as an optional by @joshuahannan in #5776
- Update to Cadence v1.0.0-preview.22 by @turbolent in #5775
- [CI] Add timeout to codecov by @peterargue in #5770
- Cleanup streaming errors for block not ready by @AndriiDiachuk in #5632
- [Access] Clean up blockID argument from deriveTransactionStatus by @AndriiDiachuk in #5619
- [EVM] Add get random source to Cadence Arch by @sideninja in #5742
- try to update to new middleware by @bjartek in #5740
- [EVM] Contract deploy change return value by @sideninja in #5606
- Update Cadence 1.0 feature branch by @turbolent in #5767
- [Access] Update ipfs libraries to the new boxo version by @peterargue in #5774
- [EVM] Batch run transactions by @sideninja in #5614
- [EVM] Add bridging interface to EVM contract - stable cadence port by @janezpodhostnik in #5716
- Unskip migration of Testnet accounts with broken data by @turbolent in #5759
- [EVM] Optimize event data by @sideninja in #5779
- Update to Cadence v1.0.0-preview.23 by @turbolent in #5793
- [EVM] Dry-run function by @sideninja in #5749
- Handle missing staged contracts by @turbolent in #5796
- Improve migration logging, reports, and export broken slabs that were fixed to a new payloads file by @fxamacker in #5803
- [CI] Add static port for observer bind address in integration tests by @peterargue in #5801
- [EVM] Remove special EVM type by @sideninja in #5791
- Update core contracts by @joshuahannan in #5808
- Sync master with stable cadence by @sideninja in #5792
New Contributors
Full Changelog: v0.34.0-crescendo-preview.13...v0.34.0-crescendo-preview.16
v0.34.0-crescendo-preview.13
What's Changed
- [Sync] Sync master to
feature/dynamic-protocol-state
by @durkmurder in #4578 - [Dynamic Protocol State] Protocol State Updater by @durkmurder in #4594
- [Dynamic Protocol State] Split
flow.Identity
inflow.IdentitySkeleton
andflow.DynamicIdentity
by @durkmurder in #4545 - Sync
feature/stable-cadence
branch withmaster
by @SupunS in #4655 - Update to stable Cadence by @SupunS in #4567
- Update cadence version to v0.41.0-stable-cadence.1 by @SupunS in #4663
- [Dynamic Protocol State] Sync
master
to feature branch by @durkmurder in #4694 - [Dynamic Protocol State] Protocol state storage by @durkmurder in #4559
- [Dynamic Protocol State] Read-only interfaces of protocol state by @durkmurder in #4579
- [Dynamic Protocol State] Protocol State Mutator by @durkmurder in #4597
- [Dynamic Protocol State] Protocol state used in
FollowerState
andParticipantState
by @durkmurder in #4613 - [Dynamic Protocol State]
badger.Snapshot
uses dynamic protocol state by @durkmurder in #4625 - Sync stable cadence branch with master by @SupunS in #4715
- Update to latest stable cadence by @SupunS in #4709
- [Dynamic Protocol State]
ProtocolStateEntry
refactoring by @durkmurder in #4721 - [Dynamic Protocol State] Sync
master
tofeature/dynamic-protocol-state
by @durkmurder in #4814 - minor suggestions for PR #4726 by @AlexHentschel in #4832
- suggestions for PR #4834 by @AlexHentschel in #4854
- [Dynamic Protocol State] Changing structure of participants in
EpochSetup
by @durkmurder in #4726 - [Dynamic Protocol State]
EpochStateContainer
stores epoch active identities by @durkmurder in #4834 - Sync with
master
to get CI improvements by @jordanschalm in #4995 - [Dynamic Protocol State] Sync
master
tofeature/dynamic-protocol-state
by @durkmurder in #5007 - [Dynamic Protocol State] Block payload contains protocol state ID by @durkmurder in #4868
- [Dynamic Protocol State] Dedicated protocol state machine for epoch fallback by @durkmurder in #4931
- FLIP 204: Add
TargetEndTime
to Epoch models and API by @jordanschalm in #4987 - FLIP 204: Add
TargetDuration
to Epoch models and API #4987 by @jordanschalm in #5038 - FLIP 204: Update
cruisectl.BlockTimeController
to useTargetEndTime
,TargetDuration
by @jordanschalm in #5023 - Sync
master
withfeature-flip-204
by @jordanschalm in #5057 - FLIP 204: Include epoch timing config in sporking/bootstrapping process by @jordanschalm in #5027
- Sync master / FLIP 204 by @jordanschalm in #5063
- [Dynamic Protocol State] Replace dynamic weight and ejection flag with 'epoch participation status' by @durkmurder in #5039
- Sync master / FLIP 204 by @jordanschalm in #5065
- Suggestions for PR #5080 by @AlexHentschel in #5116
- [Dynamic Protocol State] Sync master to
feature/dynamic-protocol-state
by @durkmurder in #5117 - [Dynamic Protocol State] TODOs and refactoring, part 2 by @durkmurder in #5080
- Update core-contracts to latest cadence 1.0 version by @joshuahannan in #5064
- [Dynamic Protocol State] Remove
EpochStatus
by @jordanschalm in #5089 - Suggestions for PR #5113 by @AlexHentschel in #5132
- Update core contracts dependencies to not use custom destructors by @joshuahannan in #5135
- [Dynamic Protocol State]
InstanceParams
refactoring by @durkmurder in #5113 - Update Cadence 1.0 branch by @turbolent in #5102
- [Dynamic Protocol State] Refactor Epoch Commitment Deadline Enforcement by @jordanschalm in #5108
- [Dynamic Protocol State] Refactor bootstrapping and update Benchnet2 automations by @jordanschalm in #5136
- Update Cadence 1.0 feature branch by @turbolent in #5171
- Minor Polishing by @AlexHentschel in #5114
- [Dynamic Protocol State] Sync
master
tofeature/dynamic-protocol-state
by @durkmurder in #5190 - Replace hash-based validation of migrated Cadence values to use
Equal()
by @fxamacker in #5204 - Remove cricket moments references from atree migration by @janezpodhostnik in #5242
- Update to Stable Cadence preview 2 by @dsainati1 in #5246
- [Execution] Remove module.Local from ingestion engine by @zhangchiqing in #5243
- [Networking] Apply GossipSub Spam Penalty to Misbehaving Peers Based on
Count
andErr
inInvCtrlMsgNotif
by @kc1116 in #4978 - [EVM] Add feature flag for deploying
EVM
contract only with ABI functionality by @m-Peter in #5230 - [Networking] Reverting 4978 by @yhassanzadeh13 in #5252
- [Util] Find block ID by state commitment by @zhangchiqing in #5240
- [EVM] Add EVM type ID by @sideninja in #5091
- [Flow EVM] Include the block hash in
evm.BlockExecuted
event payload by @m-Peter in #5245 - [EVM] Fix order of fields in the event by @sideninja in #5237
- Use correct EVM address in tests and transient networks by @janezpodhostnik in #5255
- [Flow EVM] update StateDB to store codes by code hash by @ramtinms in #5235
- [Networking] Enhance RPC Inspection with Configurable Thresholds and Granular Metrics Collection by @yhassanzadeh13 in #5234
- [Networking] Relaxes invalid message delivery penalty by @yhassanzadeh13 in #5265
- [CI] Revert change to use semver build for without-netgo images by @peterargue in #5267
- [Flow EVM] use
big.Int
for any balance related fields by @ramtinms in #5236 - Reconcile build changes in Makefile & Dockerfile by @sjonpaulbrown in #5258
- [Flow EVM] extend EVM precompiles with cadence arch by @ramtinms in #5233
- Set epoch safety threshold default in localnet by @jordanschalm in #5263
- Sync stable-cadence branch with master by @SupunS in #5260
- Atree storage migration by @janezpodhostnik in #4633
- Import new module
onflow/crypto
by @tarakby in #5121 - [Modules] Fixes map-based backend concurrent adjust-with-init test by @yhassanzadeh13 in #5275
- [Execution] Move maxCollectionHeight to metrics by @zhangchiqing in #5244
- [Flow EVM] reducing the scope of deposit to COAs only by @ramtinms in #5280
- Atree Migration cleanup by @janezpodhostnik in #5284
- UUID partition change by @bluesign in #4914
- New cd images (ADX support and ARM64) by @tarakby in #5254
- Update event validation logic to account for the
evm.*
events by @m-Peter in #5262 - Update stable cadence feature branch by @turbolent in #5290
- [Access] add config to limit script execution range - master by @peterargue in #5283
- Add cadence values migration by @SupunS in #5192
- [Flow EVM] balance type improvement by @ramtinms in #5271
- Cadence 1.0 state migrations: Update to new static types migration by @turbolent in #5286
- Updates contract dependencies and state commitments by @joshuahannan in #5301
- Add staged contract migration by @SupunS in #5300
- [Flow EVM] populate PREVRANDAO with a random value from the FVM random generator by @ramtinms in #5281
- [Networkin...
v0.34.0-crescendo-preview.7
This release details all changes that will go into Crescendo preview network upgrade since it launched on Feb 28.
What's Changed
Flow EVM Core changes
- Move
blockHash
calculation after deduction supply diff by @m-Peter in #5464 - [Flow EVM] Improving evm integration tests by @ramtinms in #5431
- [Flow EVM] Fix the evm chainID bug for mainnet by @ramtinms in #5443
- [Flow EVM] use transfer from/to a fixed native token bridge address for deposit/withdraw calls by @ramtinms in #5469
- [Flow EVM] make deposit available for all EVM addresses by @ramtinms in #5473
- bugfix: [Flow EVM] missing uuid on vault returned by the withdraw method #5514
- [EVM] Fix withdraw: set UUID of returned FlowToken.Vault by @turbolent in #5515
- [Flow EVM] improve handler by @ramtinms in #5516
Core Protocol
- Event-based test refactoring for GossipSub RPC inspection unit tests by @kc1116 in #5374
- [Networking] Reject Gossipsub RPC from unstaked peers by @kc1116 in #5449
Cadence 1.0 migration
- Export migrator runtime constructor by @SupunS in #5475
- Add logs to merge by @janezpodhostnik in #5484
- Fix data race in account grouping for account based migration by @fxamacker in #5488
- Add util command to generate payloads for bootsrapped execution state by @turbolent in #5487
- Optimize deployment migration by @turbolent in #5470
- Add migration diff util for testing and debugging migrations by @fxamacker in #5499
- [Cadence 1.0] Improve Migration by @turbolent in #5479
- [Cadence 1.0] Improve migrations by @turbolent in #5533
- Fix import resolving during staged contract updates by @SupunS in #5551
- [Cadence 1.0] Add missing rule for NonFungibleToken.Collection type by @turbolent in #5541
Cadence Execution
- Execution Data storage tracker blocks startup by @zhangchiqing in #5457
- Disable execution data pruner by @zhangchiqing in #5463
- [Execution] Shadow Execution node implementation by @zhangchiqing in #5411
- [Execution] Remove duplicated observer collection indexer by @zhangchiqing in #5521
TPS Load generator
- Add additional loads to the load generator by @janezpodhostnik in #5394
- Bootstrap with EVM by default by @janezpodhostnik in #5482
Access node
- [Access] Add implementation for usage of the local transaction result in Access API by @Guitarheroua in #5306
Util
- Add sub-command to generate addresses for a chain by @turbolent in #5453
Testing improvements & bugfixes
- bugfix: Remove db close in execution state sync tests by @zhangchiqing in #5465
- Add failfast to integration tests by @zhangchiqing in #5474
- Fix integration test by @janezpodhostnik in #5510
- Fix Flakey Networking Tests and Improve CI by @kc1116 in #5495
Dependency updates and updating from master
- [Cadence 1.0] Update to SDK v1.0.0-M7 by @turbolent in #5478
- [Cadence 1.0] Sync with master by @turbolent in #5493
- Update to Cadence v1.0.0-M9 by @turbolent in #5498
- Update to Latest versions of core contracts by @joshuahannan in #5517
- Update to Cadence v1.0.0-preview.10 by @turbolent in #5529
- Merge master into Cadence 1.0 feature branch by @turbolent in #5540
- Update to Cadence v1.0.0-preview.12 by @turbolent in #5539
- Update to Cadence v1.0.0-preview.13 by @turbolent in #5543
- Update to Cadence v1.0.0-preview.14 by @turbolent in #5546
- Update to Cadence v1.0.0-preview.15 by @SupunS in #5555
Improvements in code documentation
- minor doc update for Chunk Data Pack by @AlexHentschel in #5378
Uncategorized
- Herostore message entity nonce by @kc1116 in #5452
- Port Windows binstat fix to
master
by @jribbink in #5520 - [Access] Add support for indexing execution data on Observers by @AndriiDiachuk in #5256
Full Changelog: v0.34.0-crescendo-preview.5...v0.34.0-crescendo-preview.7
Height Coordinated Upgrade - Jan 2024
This update includes the following changes.
👨💻 Improvements for developers
The last release added the basic support for script execution on the access node. This update builds on the previous work and includes several improvements and bug fixes to get script execution on the access node close to completion.
🎵 Getting ready for Flow EVM
Flow EVM is coming soon (see: https://flow.com/upgrade/crescendo). To unlock integration with existing middleware, this update includes the Application Binary Interface (ABI) Encode and Decode methods for Flow EVM (issue).
Candence updates
The upgrade will update the supported Cadence version to v0.42.9.
🦾 Performance improvements
This upgrade includes the new cryptography module, improving the overall performance of the consensus algorithm.
Change to resource identifier generation
This release introduces an implementation change for Cadence resource identifier generation. The resource identifiers will no longer be generated sequentially and can have values greater than the max value for Uint32 and, for the foreseeable future, less than 2^56 -1 (the MAX_SAFE_INTEGER for JavaScript). If you were previously storing resource IDs in a Unit32 data type, please make sure to update it to a larger data type that can, at the very least, accommodate IDs greater than Uint32 and up to 2^56 -1 but preferably up to Max Uint64.
Commit list
Access
- Make script exec configurable by @peterargue in #5037
- Script execution coded errors by @sideninja in #4895
- Allow get blocks script calls by @sideninja in #4894
- Improve logging and validation in local script exec by @peterargue in #4920
- Add metrics for script exec failure from missing data by @peterargue in #4907
- Log script exec mismatches as error by @peterargue in #5194
- Handle script canceled and timeout errors by @peterargue in #5036
- Improve script exec compare logging by @peterargue in #4936
- Cleanup script execution comparisons by @peterargue in #4956
- Get account bugfix with tests by @sideninja in #4862
- Add wait in integration tests for index to be synced by @sideninja in #4902
- Validate addresses match network in rest api by @peterargue in #4930
- Use local event for AccessAPI get events endpoints by @peterargue in #4851
- Use local event for event streaming API by @peterargue in #5160
- Index collections from execution data by @peterargue in #5163
- Add endpoints to Execution nodes to support getting Transaction Result error messages by @AndriiDiachuk in #5042
- Cache Transaction Result error messages by @Guitarheroua in #5066
- create get register async API by @koko1123 in #4871
- Make RegisterID request size configurable by @koko1123 in #5067
- Fix GetRegisterValues input types by @peterargue in #5138
- Update websockets event streaming to return JSON-CDC encoded events by @peterargue in #5048
- Allow all origins by default on websockets connections by @peterargue in #4954
- Circuit breaker too restrictive by @Guitarheroua in #5010
- gRPC Circuit breaker causes panic by @Guitarheroua in #5012
- Get Block endpoint is missing the system collection by @AndriiDiachuk in #5049
- Handle inconsistent protocol state in access rpc engine by @UlyanaAndrukhiv in #5052
- Get protocol snapshot by block id and block height by @AndriiDiachuk in #4957
- Optimize header ID calculation in get events by @peterargue in #5214
- add config to limit script execution range - v0.33 by @peterargue in #5282
BFT
ReceiptValidator
ensuresk
receipts committing to the execution result by @durkmurder in #5050- Epoch setup random source update by @tarakby in #5088
EVM on Flow
- beyond EVM - benchmarking performance part 1 by @ramtinms in #4879
- update EVM integration test to use FVM by @ramtinms in #4878
- EVM: Refactor stdlib to use new approach by @turbolent in #4876
- minor fixes to new EVM contract branch by @ramtinms in #4903
- beyond EVM part 1 - adding types for the EVM by @ramtinms in #4859
- beyond EVM part 2.1 - adding EVM emulator database by @ramtinms in #4925
- beyond EVM part 3 - updating environment for direct event emission, and checking metering capacity by @ramtinms in #4861
- beyond EVM part 2.2 - adding EVM emulator by @ramtinms in #4927
- beyond EVM part 4 - adding EVM handler by @ramtinms in #4864
- beyond EVM part 5 - integrate EVM into FVM by @ramtinms in #4866
- beyond EVM part 6.1 - Implement EVMAddress.deposit by @turbolent in #4889
- beyond EVM part 6.2 - Implement EVM.BridgedAccount.withdraw by @turbolent in #4890
- beyond EVM part 6.3 - Implement EVM.BridgedAccount.deploy by @turbolent in #4897
- beyond EVM part 6.4 - Fix EVM contract tests by @turbolent in #4941
- beyond EVM part 6.5: Improve and test deposit and withdrawal by @turbolent in #4986
- beyond EVM part 7 - adding more evm-based contract types for testing by @ramtinms in #4872
- performant StateDB implementation - part 1 by @ramtinms in #5166
- performant StateDB implementation - part 2 by @ramtinms in #5167
- performant StateDB implementation - part 3 by @ramtinms in #5168
- performant StateDB implementation - part 4 by @ramtinms in #5169
- Updating Geth version by @ramtinms in #5196
- Updateing StateDB createAccount behaviour to match Geth's latest version by @ramtinms in #5212
- Resolve ambiguous import by @sideninja in #5006
- Fix the setup process by @sideninja in #5069
- Emit events as Cadence events by @sideninja in #5090
- Benchmark state transitions by @sideninja in #5032
- Bridged account balance function by @sideninja in #5098
- Handle EVM errors by @sideninja in #5216
- Add EVM transactions to FVM benchmark tests by @janezpodhostnik in #5061
- Setup EVM account Flow vault during bootstrap by @janezpodhostnik in #5070
- Add
EVM
methods forencodeABI
&decodeABI
by @m-Peter in #5024 - Report proper computation for
EVM.encodeABI
&EVM.decodeABI
methods by @m-Peter in #5146 - Add the
EVM.encodeABIWithSignature
andEVM.decodeABIWithSignature
functions by @m-Peter in #5189 - Update EVM test by @janezpodhostnik in #5215
- Add storage limit check exception for EVM address by @janezpodhostnik in #5106
- Add feature flag for deploying EVM contract only with ABI functionality - Port by @janezpodhostnik in #5264
- Set the correct testnet/mainnet evm state storage account - port by @janezpodhostnik in #5311
CI
- Update workflows to use setup-go@v4 by @peterargue in #4482
- Add BuildJet CI runners for unit tests, integration tests; cache Docker images by @gomisha in #4906
- Add timeout to setup go step by @peterargue in #5082
- Cleanup integration make targets by @peterargue in #5141
- Use build tag for without-netgo by @peterargue in #5157
- Modifies block rate in VN test to address sealing lagging finalization by @jordanschalm in #4975
- Updat...
Mainnet 24
This update includes the following changes.
🔒 Network security improvements
Earlier this year, the Flow Foundation published the roadmap to improve Flow network security (see: roadmap). This upgrade includes a major milestone towards attack-resilient message propagation for autonomous node operations. The first version of the application layer spamming protection has now been implemented and applies to all node types. This protection builds on the networking layer protection added in the last upgrade and provides additional protection against a wide range of attacks against a node at the application layer.
Additionally, it also includes further hardening of the networking layer to make it even more resilient to attacks.
Finally, reporting around malicious nodes has been improved as the consensus follower, which runs within all node types, will now detect and report any malicious sender.
These security updates mark a major step towards improving protocol autonomy and ensuring the network is resilient to attacks.
👨💻 Improvements for developers
Simplifying dApp architecture by making it easy to consume transaction events
This upgrade enables event streaming on the REST-based Access API served by the Access nodes. Event streaming makes dApp design simpler by allowing it to consume transaction events using a push-based model instead of a pull-based model. Event streaming is already available using gRPC.
Another enhancement to the Access API in this upgrade is the ability to optionally request the transaction events to be returned in the Cadence Compact Format (CCF) encoding instead of JSON. CCF is a far more compact format and provides better compression of the network payload.
Secure and unlimited script execution
The Access nodes will now also support script execution. This will allow dApps to use a private access node for secure script execution without being subjected to any rate limits. This will also relieve the execution nodes from executing scripts, allowing more CPU on the execution nodes to be allocated towards transaction execution instead. This feature is an alpha release as we continue to test it.
Cadence upgrade
The upgrade will update the supported Cadence version to v0.42.3.
Tamper-proof, verifiable, unpredictable and efficient on-chain random generator
Finally, the update includes partial implementation of FLIP 120: Update unsafeRandom function and FLIP 123: On-chain Random beacon history for commit-reveal schemes. The first FLIP adds a new Cadence function revertibleRandom
that uses the Flow native random beacon to provide secure random numbers for both transactions and scripts. The Flow random beacon provides non-biased, unpredictable and verifiable random numbers, that can be used in Cadence contracts by trusted parties, thanks to the latest FVM updates. The second FLIP implements a solution for reverting random results by untrusted parties. It provides commit-reveal scheme tools, based on the Flow random beacon history. The new revertibleRandom
as well as the new beacon history contract are implemented in this release.
📳 Recovery from the epoch fallback mode
On October 13th, the network went into an epoch fallback mode when it failed to complete an epoch transition. See incident. Consequently, epoch transitions have been suspended, and certain node operations, such as staking and unstaking have also been impacted.
This network upgrade will help the network recover from the epoch fallback mode and resume normal epoch transitions.
💥 There are no breaking changes in this release
Application layer spam protection
- Implements disallowlisting logic by @yhassanzadeh13 in #4441
- Adjust Node Penalty Decay Speed on Repeated Disallow-listing by @gomisha in #4485
- Synchronization Engine
SyncRequest
spam detection (Permissionless-related engine level spam detection) by @gomisha in #4590 - Synchronization Engine
RangeRequest
spam detection (Permissionless-related engine level spam detection) by @gomisha in #4665 - Synchronization Engine
BatchRequest
spam detection (Permissionless-related engine level spam detection) by @gomisha in #4704 - Synchronization Engine spam detection flag support,
config/README.md
updates by @gomisha in #4842 - Khalil/1888 network config improvements by @kc1116 in #4340
- 1891 Gossipsub RPC validation inspector false positive E2E testing by @kc1116 in #4371
- Khalil/1895 Add config package unit test by @kc1116 in #4523
- Khalil/6743 Slashing Violations Consumer ALSP misbehavior report integration by @kc1116 in #4512
- Gossipsub Tracer RPCSent tracker by @kc1116 in #4543
- 1898 slashing violations consumer alsp integration test by @kc1116 in #4549
- Verification Node documentation by @yhassanzadeh13 in #4528
- Khalil/1899 async rpc sent tracker by @kc1116 in #4553
- Khalil/6819 simplify rpc inspector validation by @kc1116 in #4642
Access node
- Do not return not found for tx result when collection not indexed by @peterargue in #4454
- Fix CCF decoding in GetTransactionResultsByBlockID by @peterargue in #4532
- Refactor converters into separate files by @peterargue in #4522
- Add grpc streaming metrics by @peterargue in #4540
- Update REST metrics to use route name for all types by @peterargue in #4571
- Refactor Access RPC engines to support a single gRPC port #4217 by @UlyanaAndrukhiv in #4411
- Connection pool evictions cause connection failures by @Guitarheroua in #4534
- Add circuit breaker for unavailable Collection/Execution nodes by @Guitarheroua in #4496
- Fix slice iteration bug in TrieUpdate protobuf conversion by @peterargue in #4593
- Update default grpc max message size to 1GiB by @peterargue in #4609
- Add endpoint to REST API for retrieving an account key by @m-Peter in #4583
- Make REST server timeouts configurable by @peterargue in #4612
- Script execution engine interface changes by @sideninja in #4668
- Add caching tx results by @nozim in #4598
- Define register index store interface by @sideninja in #4656
- Refactor rpc backend to return an error instead of crashing by @peterargue in #4688
- Add spork and node root block heights to GetNodeVersionInfo by @peterargue in #4690
- Enable Event streaming on REST API by @UlyanaAndrukhiv in #4547
- Pebble height tracking implementation by @koko1123 in #4714
- Upgrade lru cache v2 by @nozim in #4700
- Cleanup access connection management by @peterargue in #4730
- Fix panic condition in client connection cache by @peterargue in #4731
- Index Execution Data by @sideninja in #4653
- Pebble checkpoint ingestion by @koko1123 in #4727
- Index tx results and events by @peterargue in #4772
- Bootstrap register db and start indexer by @peterargue in #4780
- Adjust logging in checkpoint loading by @peterargue in #4797
- Update state stream API to return json-cdc encoded events - backport master by @peterargue in #4803
- Add metrics to execution state indexer by @peterargue in #4801
- Upgrade to grpc v1.58.3 - master by @peterargue in #4810
- Enable grpc compression by @UlyanaAndrukhiv in #4804
- Refactor checkpoint reader with WithFile by @zhangchiqing in #4815
- update execution data protobuf to new namespace by @peterargue in #4827
- Validate checkpoint root hash by @zhangchiqing in #4825
- Add script execution to Access API by @peterargue in #4791
- Validate checkpoint's root hash by @peterargue in #4830
- Remove required Chain flag from execution-state-extract by @janezpodhostnik in https://github.com/onflo...
Mainnet 23
This release includes the following major changes,
- Upgrades to Consensus follower, making it more Byzantine Fault Tolerant (BFT)
- Adding Cadence Compact Format (CCF) as an option for encoding Cadence values.
- Event Streaming API implementation as per this FLIP
- Several updates taking Flow closer to supporting parallel transaction execution
- Further improving the FVM smart cache validation introduced in the last height coordinated upgrade.
- Adding support for the service event-based height-coordinated upgrade.
- Several improvements to the networking layer to make it more resilient to routing attacks.
- Update block time controller to provide higher precision with epoch timings and block production rate.
- Update to Cadence v0.39.3
💥 No Breaking Changes
Access
- Do not copy protobuf messages by @SaveTheRbtz in #3790
- Add BlockStatus to GetBlock REST API by @lolpuddle in #3805
- Fix panic converting execution data to protobuf messages by @peterargue in #3887
- Improve Access API error reporting for results from ENs by @peterargue in #3915
- Add REST API metrics middleware by @diaswrd in #3691
- Export MessageToTrieUpdate converter method by @peterargue in #3897
- Improve api error handling by @peterargue in #3988
- Set message received limits by @peterargue in #3857
- Refactor uploader into separate module by @peterargue in #3676
- Add read leaf nodes from checkpoint file for Archive node use by @koko1123 in #4040
- fix storage by @smnzhu in #3064
- Fix printing trie hash by @zhangchiqing in #3926
- Backport event streaming, enabling exec sync by default by @peterargue in #4188
- Leo/v0.30 add archive address flag by @zhangchiqing in #4222
- Fix execution data cache in state stream - v0.30 backport by @peterargue in #4228
- Fix archive address list flag by @zhangchiqing in #4239
- Enable execution sync by default by @peterargue in #4159
- Add streaming API for BlockExecutionData by @peterargue in #3723
- Fix execution data cache in state stream api by @peterargue in #4197
- Add latest block Height and ID to api responses by @Guitarheroua in #4191
- Integration test for signer indices by @Guitarheroua in #4261
- Add API that return node information such as version, commit, spork Id and protocol version. by @Guitarheroua in #4235
- Added collection_id and block_id to GetTransactionResult arguments by @Guitarheroua in #4263
- Fixed REST API metrics by @Guitarheroua in #4288
- Add response rate limit to streaming endpoints by @peterargue in #4218
- Skip root block when streaming from execution data by @peterargue in #4271
- Update REST get events to return empty BlockEvents for blocks with no events by @peterargue in #4368
- Add metric for highest consecutive height with all collections indexed by @peterargue in #4391
- Implement conversion functions for CCF by @koko1123 in #4415
- disable access rest api metrics by @zhangchiqing in #4453
- revert Chunk structure to maintain consistent hashes by @koko1123 in #4351
- refactor logProgress by @zhangchiqing in #4168
- Fix read leaf nodes by @zhangchiqing in #4212
- add archive address flag by @zhangchiqing in #4199
- fix get tx by @koko1123 in #4458
- Fix AN event decoding in GetTransactionResultsByBlockID by @peterargue in #4462
- Include fix for system tx as well by @Kay-Zee in #4465
BFT
- Reporting basic consensus protocol violations by @durkmurder in #4174
- Compliance engine requires config by @durkmurder in #4372
BFTTesting
- Khalil/3590 libp2psig verification test by @kc1116 in #3689
- fixes CI failure on PR 3564 by @yhassanzadeh13 in #3794
- Gossipsub spam test Framework - IHAVE by @gomisha in #3564
Benchmark
- Prevent PID windup at start by @SaveTheRbtz in #3759
- Support multiple keys by @SaveTheRbtz in #3641
- Match log-level w/ production by @SaveTheRbtz in #3780
- Parameterize docker registry url by @gomisha in #3998
- Update benchnet2 automation by @haroldsphinx in #4057
- Update BN2 automation by @sjonpaulbrown in #4115
- Update BN2 creation, deletion CI workflows by @gomisha in #4177
CI/CD
- Add github action to build boot-tools on demand by @peterargue in #3787
- Remove --ssh flag from docker build for util by @peterargue in #3798
- Update
ci.yml
retry referencenick-invision
=>nick-fields
by @gomisha in #3919 - Add workflow to build individual docker images by @peterargue in #4065
- Only run jobs for selected roles by @peterargue in #4075
- Add retry mechanism to integration tests by @gomisha in #3989
- Remove unnecessary tagging from Makfile by @sjonpaulbrown in #4194
- Enable builds using private repos by @peterargue in #4223
Crypto
- KeyGen improvement by @tarakby in #3788
- Pairing edge case by @tarakby in #3977
- Update math/rand usage in crypto module and improve randomness tests by @tarakby in #4111
- New utils/rand package for non-deterministic true randomness by @tarakby in #4062
- improve usafeRandom and update math/rand in FVM by @tarakby in #4067
- Crypto: code improvement by @tarakby in #3760
- optimize CI tests by @tarakby in #4055
- Update flow go crypto version by @tarakby in #3441
- Update Relic Version by @tarakby in #4113
Randomness
- update math/rand usage in ledger by @tarakby in #4112
- update math/rand usage in /consenus and /engine by @tarakby in #4258
- update math/rand usage in /cmd/bootstrap by @tarakby in #4362
Engine
- Move weight check out of common provider engine by @peterargue in #3923
Execution
Refactoring to enable concurrent Transaction execution
- Fix/simplify value store span attribute setup by @pattyshack in #3738
- Simplify setting transaction procedure result values by @pattyshack in #3740
- Improve verification test's error message by @pattyshack in #3752
- Simplify chunk verifier api by @pattyshack in #3753
- Refactor environment.Tracer into a separate module. by @pattyshack in #3749
- Improve transaction verifier clarity by @pattyshack in #3771
- Set transaction procedure's trace span via context by @pattyshack in #3766
- Improve error code search. by @pattyshack in #3776
- Simplify Start Entity Span. by @pattyshack in #3786
- Remove RecordSpanFromParent from general tracing api by @pattyshack in #3791
- Define vm interface in fvm instead of computer by @pattyshack in #3796
- Pre-populate []transactions into collectionItem by @pattyshack in #3804
- refactor chunk object initialization into flow model by @pattyshack in #3811
- Change RegisterUpdates's r...