Changes since v0.16.2
⭐ Features
- Add gzip flag to JSON state exporter (#627) @turbolent
- Added double-execution prevention for blocks (#635) @m4ksio
🛠 Improvements
- [FVM] Remove fee deduction in meta-transactions (#729) @janezpodhostnik
- [Consensus] Compliance Engine to use Message Queue (#646) @zhangchiqing
- [FVM] Direct contract function call (#689) @janezpodhostnik
- [Verification] fix the logic that handles missing registers (#715) @ramtinms
- [FVM] Dynamic contract deployment authorization (#720) @ramtinms
- [Cadence version upgrade (#710) @janezpodhostnik
- [Node bootstrap] Remove unused identities parameter from GenesisFixture (#718) @jordanschalm
- [Verification] Adds metrics collector and tracer to requester and fetcher engines (#707) @yhassanzadeh13
- [Access] Added a new metric network_gossip_sealed_height to track sealed height for all nodes. (#712) @vishalchangrani
- [Verification] Add missing verification metrics (#714) @zhangchiqing
- [Access] Switching finalized block height to sealed block height in ping metric reporting (#711) @vishalchangrani
- [Access] Log long running scripts (#538) @m4ksio
- [FVM] environment refactor - part 1 - event handler (#669) @ramtinms
- [Epochs] Refactor cluster quorum certificate field in EpochCommit (#690) @jordanschalm
- [Exe Ledger] Further optimize sha3 for amd64 (#687) @tarakby
- [Exe Ledger] Switch hash slices to arrays (#514) @tarakby (with contributions of @AlexHentschel #514)
- [FVM] Disable signing without a transaction tag (#694) @janezpodhostnik
- [CMD] remove already applied data migrations (#701) @ramtinms
- [Verification] Adds happy path integration tests for new architecture (#686) @yhassanzadeh13
- [Access] Exposing GRPC server metrics for execution and collection nodes. (#684) @vishalchangrani
- [Access] Add block height to Ping info response (#696) @vishalchangrani
- [Execution] Add service account access in system chunk (#691) @m4ksio
- [Access] Adding retry logic to look for at least two execution receipts for a block when serving an access node api call that needs an upstream execution node call (#683) @vishalchangrani
- [Epochs] Define and enforce canonical ordering for DKG and protocol state (#678) @jordanschalm
- [Verification] adds exponential backoff mechanism for requesting chunk data packs (#674) @yhassanzadeh13
- [Access] Adding node software version info to Ping metrics. (#662) @vishalchangrani
- [CMD] Verify generated root state snapshot (#600) @zhangchiqing
- [Consensus] Mature Builder logic for selecting Seals for inclusion in the block (#551) @AlexHentschel
- [Consensus] Core business logic for concurrent processing of Verification Nodes' Result Approvals (#632) @durkmurder (with contributions of @AlexHentschel #670 and #675)
- [Epochs] Refactor EpochCommit service event model to include only DKG keys (#661) @jordanschalm
- [Execution] Update sequence number independent of transaction invocation result (#602) @ramtinms
🐛 Bug Fixes
- Fix non atomic cache updates (#697) @zhangchiqing
- Fixed error return for storage layer when key was not found (#700) @zhangchiqing
- Fix job consumer memory leak (#656) @zhangchiqing
- Fix inconsistent RLP encoding for Identity (#673) @jordanschalm
❓ Miscellaneous
- Skip flakey tests (#677) @zhangchiqing
- Update go version check to support 1.13-1.16 (#708) @ramtinms
Breaking changes
Proposer Key Sequence Number (#602)
When running a transaction, the proposer key sequence number would always be incremented unless any of the following conditions occur:
- invalid transaction (transaction rejected by collection nodes)
- any of the transaction signatures are not valid
- the transaction is missing the signature(s) by the proposer
- the proposal sequence number is invalid (not match with the one stored on the chain)
In other words, the new behaviour increments the sequence number even if the transaction fails at runtime or any other condition that is not mentioned above. The new behaviour protects the network against some cases of spamming attacks and protects users from double transaction submission attacks.
Transaction Domain Tags (#694)
Transaction domain tags allow signers to identify which messages are intended to represent encoded transactions, and which are not. The Flow protocol has been updated (as of May 5th 2021) to both accept signatures produced from messages prepended with a transaction domain tag, and from messages that are not. This spork will strictly require all signatures for transactions to have been produced from messages prepended with a transaction domain tag.
This breaking change requires all users of Flow Client Library, the Flow JavaScript SDK and Flow Go SDK to update their versions to a version greater than or equal to the version that supports transaction domain tags.
FlowIDTableStaking Smart Contract Breaking Change
This change refactors certain functions to eliminate excessive gas usage and is a part of preparing the contract for new protocol contracts like FlowEpoch and StakingCollection and making the contract more efficient
BREAKING CHANGE: Consolidating node and delegator metadata into a single struct to make querying staking information more straightforward.
These changes do not affect any transactions or active interactions with the Staking contract
You only need to take action if you are using any fo the following:
-
scripts to query information from the staking contract:
-
calling any of these public functions:
- FlowIDTableStaking.getNodeCommittedBalanceWithoutDelegators()
- FlowIDTableStaking.getNodeCommittedBalanceWithDelegators()
- FlowIDTableStaking.getNodeStakedBalanceWithDelegators() You will need to update to the latest versions of the scripts in the PR mentioned below, which will be merged to master when we perform the upgrade. These scripts now use the consolidated NodeInfo and DelegatorInfo objects to query staking information, as all callers should use from now on.
Cadence: Signature Algorithm Name Update (#710)
The naming of the ECDSA secp256k1 signature algorithm was not consistent across different codebases.
To main change is to replace SignatureAlgorithm.ECDSA_Secp256k1
with SignatureAlgorithm.ECDSA_secp256k1