Release Notes
Features
- Rework block root hashing to a fixed 16-slot merkle tree #26918 by @derektriley
- (0.77) SystemContracts input size limit #26426 #26652 by @akdev
- improve BN comms coverage #26428 by @petreze
- #26310 - encapsulate virtual pipeline
- enable all wraps and cutover HapiTests in XTS #26268 by @petreze
- EIP-3860 add support for init code limit validation #26308 by @stoyanov-st
- #26258 - reuse virtual map constructor
- #26256 - add hashAsync() to VirtualHasher
- Take weights into account when checking if node has fallen behind #26218 by @abies
- Support for Ethereum Pectra Release #25309 by @gkozyryatskyy
- Remove unchecked submit #26162 by @Grigorov-Georgi
- #26164 - Extract VirtualMapSyncConfig from ReconnectConfig
- #26115 - skip WRAPS proving key download when artifacts already present #26144 by @ibankov
- #26089 - remove rate limiter on teacher reconnect
- #25318 - cleanup reconnect metrics
- add enhanced observability for block streaming #25861 by @Grigorov-Georgi
- 25739 - improve workgroup error handling
- switch block stream and TSS configs defaults for
0.77#25928 by @petreze - #26023 - file exporter for new metrics framework
- 25950 - move hashChunkHeight from VirtualMapConfig to MerkleDbConfig
- 25821: New MerkleDb LongList implementation based on memory segments mapped from a specified file #25903 by @artemananiev
- 25754 - simplify reconnect tasks termination
- Change default number of max other parents to 4 #25669 by @abies
- switch dispatcher and queries to simple fees #25888 by @aderevets
- Support Free Simple Fees #25704 by @joshmarinacci
Bug Fixes
- Block royalty payments even when receiver is exempt from in-scope fallback fee #27188 by @joshmarinacci
- ContractValidationRule order fix #27127 by @joshmarinacci
- Modify the language around folding beneficiary mappings into the root builder at staking finalization #27211 by @joshmarinacci
- don't advance beneficiary stake metadata for rewards redirected from a deleted account #27181 by @joshmarinacci
- deleting a rewardable stakee no longer freezes its indirect stakers #27180 by @joshmarinacci
- isolate scheduled-transaction failures in the expiry scan #27137 by @joshmarinacci
- replay processed inner fees when a later inner exceeds the record limit #27136 by @joshmarinacci
- guard exchange-rate fee conversion against non-positive centEquiv and overflow #27168 by @joshmarinacci
- require a node-controlled payer for NODE-category transactions #27174 by @joshmarinacci
- enforce contract trace-data limit for batch and scheduled calls #27134 by @joshmarinacci
- Cherry-pick stale createdContractIds, atomic batch rollback fixes #27162 by @joshmarinacci
- reject duplicate non-repeated fields when extracting query payment bytes #27133 by @joshmarinacci
- reject token transfers in query payments #27157 by @joshmarinacci
- validate migration-root-hash vote bodies and harden vote tallying and storage ordering #27132 by @joshmarinacci
- fold beneficiary mappings into the root builder at staking finalization #27131 by @joshmarinacci
- handle two bugs in reclaiming throttle capacity #27130 by @joshmarinacci
- make prng and exchange rate contracts stateless #27129 by @joshmarinacci
- optimise pre handle workflow #27128 by @joshmarinacci
- Cherry-Pick (77): strip DAB nodeId suffix in toSpecProperties() #27094 by @mhess-swl
- (0.77) unblock BN Comms, BN regression and cutover XTS panels #27010 by @petreze
- 77 Cherry-pick: Install WRAPS proving keys atomically and gate prover readiness on a verified key- #27008 #27009 by @mhess-swl
- 26969: (0.77) v0.77.0-rc.7: ISS reported despite 100% node agreement on state hash #26970 by @artemananiev
- cherry-pick: Throttle utilization metrics report zero #26697 by @derektriley
- Cherry-pick: libsodium rollback #26731 #26765 by @gkozyryatskyy
- (0.77) stabilize tests by increasing the staking period and give more room for wrap proof construction #26515 #26681 by @petreze
- (0.77) Refresh stale TSS controllers after reconnect #26625 #26627 by @tinker-michaelj
- (0.77) Ensure deterministic vote replay around reconnect #26564 #26567 by @tinker-michaelj
- update solo version to v0.79.1 #26707 by @andrewb1269
- (0.77) XTS fixes for BN Comms and JRS #26455 #26671 by @gkozyryatskyy, @akdev
- (0.77) Ops duration throttling for insufficient gas tx #26438 #26669 by @gkozyryatskyy, @akdev
- (0.77) Clip trace data #26434 #26651 by @tinker-michaelj, @akdev
- (0.77) Fix jumpstart migration PBJ parsing #26422 #26650 by @akdev
- (0.77) Non-deterministic gossip CA certificate validation #26424 #26649 by @akdev
- (0.77) Refactor access list encoding #26423 #26647 by @akdev
- 26655: (0.77) Increase AsyncInputStream max message size limit #26657 by @artemananiev
- improve how the connection worker loop handles pending requests #26586 by @timfn-hg
- (0.77) Resilient vote replay #26526 #26544 by @tinker-michaelj
- Clear jumpstart hash queue #26364 by @derektriley
- fail hard on an unparseable simple fee schedule at node (re)initialization #26269 by @ruslanvelkov-beep
- Use nGen for setting last self event instead of sequence number #26376 by @poulok
- Close initial state in test framework #26374 by @netopyr
- fix airdrop create and claim #26363 by @aderevets
- Optimisation to Ethereum transaction validation #26227 by @stoyanov-st
- fix airdrop create and claim #26254 by @aderevets
- clear stale createdContractIds and suppress
STATE_CHANGESsidecars forREVERTED_SUCCESSbatch transactions #26332 by @mhess-swl - Fix consensus optimization bug #26319 by @poulok
- Use shard/realm from parsed state key in EntityIdUniquenessValidator #26288 by @Grigorov-Georgi
- Revert "chore: Remove nGen #26169" #26309 by @poulok
- Refactor System Contract handling #26284 by @stoyanov-st
- StateProof adjustment to leaf to be proven and single-child SiblingNode #26225 by @derektriley
- Fix wiring type mismatch silent error #26255 by @poulok
- Fix consensus restart tests #26246 by @poulok
- Disable Code Delegation Atomic Batch tests #26251 by @stoyanov-st
- throttle metrics #26231 by @petreze
- fail fast on block-stream hashing failure instead of deadlocking #26239 by @AlexKehayov
- validate full shard.realm.num in Authorizer #26213 by @AlexKehayov
- proper bucket throttle for ethereum txn #26220 by @petreze
- Fix for speedometer stddev unit tests #26234 by @abies
- Throttle IndexOutOfBound possibility #26212 by @petreze
- reject NODE-category transactions whose payer is not node-controlled #26160 by @ruslanvelkov-beep
- pass the configured mirror-node version to solo in the XTS mirror-node regression panel #26219 by @ruslanvelkov-beep
- make translator entity watermarks per-type #26194 by @aderevets
- Optimise Token Uri system contract call #26210 by @stoyanov-st
- Refactor HSCS account screening flow #26191 by @stoyanov-st
- refine delegated NFT allowance handling and validation #26181 by @petreze
- 26067: Intermittent Blockstream Diff Testing for Previewnet Node failure #26068 by @thenswan
- correct bonneville SDIV/SMOD signed arithmetic #26161 by @aderevets
- do not embed TSS private keys in startup network export under PROD #26085 by @AlexKehayov
- require explicit opt-in to allow uncheckedSubmit #26126 by @AlexKehayov
- Flush platform status before replay #26118 by @poulok
- Fix for flaky ReconnectTest #26042 by @netopyr
- disable the pause detector #26102 by @joshmarinacci
- main branch
- Key material security posture #25946 by @tinker-michaelj
- Include all effective payers for fractional fee assessed records #25717 by @Neeharika-Sompalli
- 25937: MerkleDb state folder name should be fixed #25992 by @artemananiev
- flush blocks on catastrophic failure instead of stopping on ISS #25848 by @AlexKehayov
- tss.wrapsProvingKeyPath default conflicts with WRAPS artifacts extraction directory #26019 by @derektriley
- cherry-pick (main): signSchedule(address,bytes) signatureMap size limit #25977 by @gkozyryatskyy
- #25986 - OpenMetricsWriter to use ROOT locale
- treat empty-KeyList token keys as absent (disabled) instead of permissionless #25823 by @ibankov
- Revert "feat: Support Free Simple Fees #25704" #25932 by @joshmarinacci
- Feature/token association refactoring #25619 by @gkozyryatskyy
- resolve relative paths before WRAPS artifacts path consistency check #25907 by @ibankov
Other Changes
Build System
- bump pandaswhocode/initialize-github-job to v1.2.2 #26396 by @nathanklick
- Upgrade jackson to 2.22.1 #26365 by @poulok
- Revert build(deps): bump gradle-wrapper from 9.5.1 to 9.6.0 #26000 #26348 by @dependabot[bot], @andrewb1269
- bump slackapi/slack-github-action from 2.0.0 to 3.0.5 #20460 by @dependabot[bot]
- bump net.java.dev.jna:jna from 5.18.1 to 5.19.0 in /hiero-dependency-versions #25835 by @dependabot[bot]
- bump com.github.docker-java:docker-java-api from 3.7.0 to 3.7.1 in /hiero-dependency-versions #25837 by @dependabot[bot]
- bump gradle-wrapper from 9.5.1 to 9.6.0 #26000 by @dependabot[bot]
- bump bouncycastle from 1.83 to 1.84 in /hiero-dependency-versions #25836 by @dependabot[bot]
- remove accidentally added flaky test configuration #26243 by @jjohannes
- update 'org.hiero.gradle.build' to 0.7.11 #26193 by @jjohannes
- activate Gradle project isolation for faster build startup #25397 by @jjohannes
- bump io.netty:netty-bom from 4.2.13.Final to 4.2.15.Final in /hiero-dependency-versions #25839 by @dependabot[bot]
- bump com.github.ben-manes.caffeine:caffeine from 3.2.0 to 3.2.4 in /hiero-dependency-versions #25838 by @dependabot[bot]
- bump step-security/publish-unit-test-result-action from 2.22.0 to 2.23.0 #25843 by @dependabot[bot]
- bump step-security/auto-unapprove from 1.0.2 to 1.0.3 #25844 by @dependabot[bot]
Chores
- Atomic batch EVM tx restriction #27185 by @joshmarinacci
- streamMode=BOTH block size circuit breaker #27171 by @joshmarinacci
- Mainnet and Testnet jumpstart and disable TSS #27033 by @derektriley
- Update BN Version to v0.41.0-rc1 and MN to 0.162.0-rc1 #26948 by @derektriley
- Truncate wrapped-record-hashes.pb file and enable writing of hashes #26747 #26834 by @derektriley
- (0.77) fix BN suite on main #26459 #26680 by @petreze
- (0.77) Reduce block buffer size from 150 to 30 blocks #26425 #26648 by @akdev
- Update wrapsVoteJitterPerRank and pipelineOperationTimeout #26563 by @derektriley
- Pin container versions #26421 by @netopyr
- Stabilize ToxiProxy communication #26370 by @netopyr
- Move simple methods out of PlatformCoordinator #26393 by @netopyr
- Avoid repeating preview block stream overwrite #26394 by @tinker-michaelj
- Add thread dump functionality to Otter #26369 by @netopyr
- Cleanup tests and testFixtures in platform-core #26335 by @netopyr
- Add a main class for running the Hashgraph GUI from PCES files #26361 by @poulok
- Remove model lifecycle methods from PlatformCoordinator #26366 by @netopyr
- do not upload the proving key into log zips #26334 by @petreze
- remove duplicate codeowner team #26331 by @andrewb1269
- Improve KB freshness checker #26298 by @netopyr
- Revert "chore: Remove config.txt file #26249" #26333 by @Grigorov-Georgi, @ibankov
- migrate to hiero-cryptography Libsodium #26202 by @anthony-swirldslabs
- update codeowners for gradle files #26272 by @andrewb1269
- Fix Yahcli Subprocess test failure artifact uploading #26294 by @derektriley
- Decrease merkledb initial size for container otter tests #26279 by @poulok
- Remove config.txt file #26249 by @Grigorov-Georgi
- removing HashCompareHandshake dead code #26245 by @Jeffrey-morgan34
- Final cleanup of state module #26248 by @netopyr
- Add additional metrics for block streaming #26203 by @timfn-hg
- Merge consensus-state-management into consensus-state #26238 by @netopyr
- Remove nGen #26169 by @poulok
- Prevent possible NPE in ConsensusSubmitMessageFeeCalculator #26221 by @Grigorov-Georgi
- KB freshness #26217 by @netopyr
- bump mirror-node version to 0.158.0 for the XTS Mirror Node Regression panel #26230 by @ruslanvelkov-beep
- Update cGen to use seq num instead of nGen #26168 by @poulok
- Update consensus to use event seq num instead of ngen #26157 by @poulok
- Added benchmark for Speedometer and small improvement to speed #26146 by @abies
- Remove countOfCryptographicKeys method #26208 by @Grigorov-Georgi
- Revert healthLogThreshold to 5s #26184 by @Grigorov-Georgi
- make restartWrapsSigning consistent #26185 by @petreze
- State Management Module reviewer follow up #26190 by @poulok
- Revert "chore: replace LazySodium with Hiero Libsodium #26122" #26172 by @anthony-swirldslabs
- create state management module #26134 by @netopyr
- fix solo adhoc e2e cutover script #26080 by @petreze
- Combine handle and pre handle flushing #26137 by @poulok
- #26132- improve config usage in merkledb and vmap
- Update references to swirlds-docker #26149 by @rbarker-dev
- minor hardening fixes for block node communication #26138 by @timfn-hg
- replace LazySodium with Hiero Libsodium #26122 by @anthony-swirldslabs
- bump up the Block Node version in test infra #26124 by @petreze
- Migrate transaction handling module #26112 by @netopyr
- Update sync sorting to use sequence number instead of nGen #26110 by @poulok
- Revert feat: switch block stream and TSS configs defaults for 0.77 #26116 by @derektriley
- Keep HAPI Test (Restart) happy w/ non-recursive proofs #26051 by @tinker-michaelj
- Cleanup of ISS error log suppress #26079 by @netopyr
- fixate configs in bn suite #26101 by @petreze
- move state test fixtures into consensus-state #26097 by @netopyr
- Update BN XTS Regression Panel w MN 0.157.0+ support #26098 by @Nana-EC
- remove XTS BLOCKS override tests #26061 by @petreze
- bump PandasWhoCode/initialize-github-job to v1.1.2 in BN XTS regression panel #26064 by @Nana-EC
- Introduce ISS detection module #25988 by @netopyr
- cleanup node integration fee tests #26012 by @ruslanvelkov-beep
- Update references to jrs-legacy #26058 by @rbarker-dev
- Clean misc and cross service fee tests 25859 #25998 by @Grigorov-Georgi
- Bump helidon version to 4.5.0 #26021 by @derektriley
- Update PBJ version and add tests #25990 by @Neeharika-Sompalli
- return plaftform.wiriting.healthLogThreshold=3s to Token, Restart and MiscRecords hapi tests #26007 by @Grigorov-Georgi
- Move Platform state machine to consensus-utilities #26003 by @netopyr
- Move ScratchPad to consensus-utility #25981 by @netopyr
- Always throttle CryptoGetAccountBalance #25952 by @derektriley
- Sig map override in dispatchComputeFees #25968 by @derektriley
- Minor Version Roll to 0.77.0-SNAPSHOT
- increase TC-03 Publisher Handshake Protocol coverage #25766 by @AlexKehayov
- Remove dead code for connection handling #25941 by @abies
- Move branch detection into event intake module #25906 by @netopyr
- remove application callbacks #25879 by @netopyr
Continuous Integration
- broken TCK & JS SDK XTS tests #27154 by @joshmarinacci
- bump bouncycastle to 1.85 #26963 by @joshmarinacci
- upgrade io.netty:netty-codec-http to 4.2.17.Final #26911 #26952 by @anthony-swirldslabs, @joshmarinacci
- bump TCK and JS SDK versions #26882 by @joshmarinacci
- bump TCK and JS SDK versions
- pin redis version #26624 #26629 by @andrewb1269
- (0.77) bump TCK version to v0.12.3 for the SDK TCK Regression panel #26552 #26561 by @Fantomasa, @petreze
- fix determinism cache key bug #26491 #26492 by @andrewb1269
- Improve install #26395 by @joshmarinacci
- install deterministic-zip through checksum-verified action #26400 by @nathanklick
- use correct github.event.repository.fork #26276 by @joshmarinacci
- replace context values with env vars #26351 by @joshmarinacci
- remove xts cancelled messages from operations channel #26306 by @andrewb1269
- fix Slack message failures #26304 by @andrewb1269
- update the checkout steps #26265 by @andrewb1269
- run TCK regression against the PR build and current mirror node #26267 by @ibankov
- use snyk actions #26275 by @joshmarinacci
- make mirror-node and rpc-relay mandatory #26280 by @joshmarinacci
- set explicit version number #26260 by @joshmarinacci
- JSON-RPC Relay Test #26244 by @joshmarinacci
- delete unneeded files from pectra release #26237 by @joshmarinacci
- pin and validate grpcurl #26195 by @joshmarinacci
- use evn vars instead of direct shell injection for input vars #26200 by @joshmarinacci
- Fix broken grpcurl #26233 by @joshmarinacci
- prevent SIGPIPE from crashing XTS candidate tag lookup #26226 by @andrewb1269
- pass the BN version in XTS correctly #26229 by @andrewb1269
- update how XTS exits when no tag found #26189 by @andrewb1269
- add run attempt to slack templates #26045 by @joshmarinacci
- pin and validate binary versions #26173 by @joshmarinacci
- make bn regression mandatory in XTS #26159 by @andrewb1269
- add xts-tag-exists to the slack-cancelled-summary template #26044 by @joshmarinacci
- install semver only through initialize-github-job #26151 by @joshmarinacci
- use 'showVersion' instead of 'properties' Gradle task #26155 by @jjohannes
- consolidate manual harden runner + checkout templates + install gomplate #26048 by @joshmarinacci
- update gradle cache cleanup to default behavior #26140 by @andrewb1269
- update how release note commits are processed #26128 by @andrewb1269
- update setup-gradle action input parameter #26136 by @andrewb1269
- add commitish build handling to determinism checks #25525 by @andrewb1269
- Update 855 to provide empty strings and verify outputs #26086 by @rbarker-dev
- update solo version #26070 by @joshmarinacci
- broken slack report #26076 by @joshmarinacci
- Update access token for JRS panel #26072 by @rbarker-dev
- Fix json-rpc-relay checkout tag step #26055 by @rbarker-dev
- Add json-rpc-relay-version to hiero-consensus-node .citr-env #26050 by @rbarker-dev
- consolidate Slack payload generation code. #25647 by @joshmarinacci
- add workflow unit tests for templates #25680 by @joshmarinacci
- wire WRAPS XTS tests to a runner-mounted proving-key OCI image #25846 by @ibankov
- Update XTS panels to use locked values #25962 by @rbarker-dev
- Update names in workflow files #25958 by @rbarker-dev
- Integrate the workflow renames #25954 by @rbarker-dev
- add permissions to PR formatting check workflow #25933 by @andrewb1269
- bump mirror node version #25911 by @joshmarinacci
- move solo version check to separate workflow #25927 by @andrewb1269
- fix solo version processing check #25925 by @andrewb1269
- use setup-gomplate #25909 by @joshmarinacci
- Add 855-extract-citr-vars workflow #25908 by @rbarker-dev
- refactor error handling #25610 by @joshmarinacci
Documentation Updates
- warn that standalone TransactionExecutors perform no contract-key verification #26273 by @ruslanvelkov-beep
- Minor fixes in knowledge base #26302 by @netopyr
- Document consensus optimization in KB #26271 by @poulok
- Update consensus-layer wiring diagram #26147 by @poulok
- Add init judge explanation #26119 by @poulok
- fix readme links and update status badges #26127 by @andrewb1269
- Improve consensus-layer wiring diagram #26100 by @poulok
- Hashgraph Invariants #25966 by @netopyr
- Add CLAUDE.md for consensus layer KB #26052 by @poulok
- 25447: Clarify run configurations in swirlds-benchmarks #25450 by @thenswan
- Update knowledge base with multiple other parents change #25929 by @netopyr
- Update docs for new workflow names #25960 by @rbarker-dev
- cleanup knowledge base format #25926 by @netopyr
- Dedup knowledge base #25900 by @poulok
- Adjust the protobuf comments for BlockItem to reflect correct field item rules. #25762 by @jsync-swirlds
Refactoring
- Extract state initialization #26429 by @poulok
- Move test to hashgraph module #26391 by @poulok
- Make Consensus Layer construction eager #26291 by @poulok
- Introduce
ConsensusLayerFactory#26261 by @poulok - Remove consensus-state dependency from PCES module #26222 by @netopyr
- delete legacy fee builders, relocate to FeeConstants #26108 by @aderevets
- remove legacy fee calculator engine and SPI #26106 by @aderevets
- remove transitional createSimpleFeeSchedule flag #26082 by @aderevets
- delete simpleFeesEnabled config field #26065 by @aderevets
- stop reading simpleFeesEnabled in query and airdrop #26029 by @aderevets
- clean up schedule fee tests #25858 #25996 by @ruslanvelkov-beep
- remove legacy file fee suites #25857 #25980 by @ruslanvelkov-beep
- 25854 - clean up consensus fee tests #25965 by @ruslanvelkov-beep
- Move event stream classes out of
swirlds-platform-core#25794 by @poulok - drop dead legacy fee code from handlers #25976 by @aderevets
- drop simpleFeesEnabled from high-volume checks #25974 by @aderevets
- remove legacy fee SPI surface #25917 by @aderevets
- remove legacy fee methods from token and crypto handlers #25913 by @aderevets
- Clean up crypto fee tests 25856 #25963 by @Grigorov-Georgi
- Move two test fixture classes out of
swirlds-platform-core#25910 by @poulok - remove legacy fee methods from network admin handlers #25916 by @aderevets
- remove legacy fee methods from address book handlers #25915 by @aderevets
- remove legacy fee methods from consensus handlers #25914 by @aderevets
- remove legacy fee methods from smart contract handlers #25891 by @aderevets
- remove legacy fee methods from schedule handlers #25890 by @aderevets
- remove legacy fee methods from file handlers #25889 by @aderevets
- Move
MerkleSerializationException#25901 by @poulok
Tests
- (Release 0.77) fix stale catch-up gate in Solo block-stream cutover #26668 by @ibankov
- Cherry-pick: Replace CryptoGetAccountBalance with CryptoGetInfo in yahcli #26814 by @mhess-swl
- Fix partition experiments #26367 by @netopyr
- Stabilize Otter Communication #26336 by @netopyr
- Stabilize ToxiProxy handling for chaos tests #26297 by @netopyr
- Extend HSCS test coverage #26283 by @stoyanov-st
- Fix flaky ReconnetTest #26313 by @netopyr
- Small improvements of chaos test #26296 by @netopyr
- sync solo 076-to-077 cutover script to 075 pattern + add adhoc test scenario #25995 by @ibankov
- Add Solo adhoc block node outage test backpressure #25689 by @derektriley
- drop --upgrade-version and log real source -> target versions #26186 by @ruslanvelkov-beep
- remove legacy dual-mode fee assertion helpers #26109 by @aderevets
- drop simpleFeesEnabled branches from simple-fee suites #26028 by @aderevets
- drop legacy token fee suites, mirror cases to TSSF #25984 by @aderevets
- e2e cutover — rc.6 labels, CN self-download of WRAPS proving key, drop nginx helper #25923 by @ibankov
- adjusted baselines for CITR SDPT #25956 #25957 by @alex-kuzmin-hg