Releases: hashgraph/hedera-mirror-node
v0.98.0
This release saw the implementation of HIP-844 Handling and externalization improvements for account nonce updates. This HIP resolve issues where the consensus nodes and the mirror nodes are account nonces are out of sync. The consensus nodes now sends the mirror node the up-to-date account nonce instead of the mirror node attempting to increment the nonce based upon its prior state.
There were two important changes to the database that helped to reduce its size substantially. The topic_message
table primary key index was dropped in favor of relying upon a similar index on the transaction
table. This simple change shaved 800 GiB off the mainnet database. The staking reward calculation performance was improved to only write accounts that elected to receive rewards. This reduces the staking reward calculation runtime from 47 minutes down to less than 2 minutes. A migration also removes the existing staking rows that did not have a staking reward election, shrinking those tables by 155 GiB. Note that to realize these disks savings mirror node operators will need to manually perform a full vacuum on the entity_stake
and entity_stake_history
tables. So in total the size of the mirror node database was reduced by almost 1 TB this release!
There was quite a bit of technical debt paid down in this release. We've removed support for the event file format from the importer. This format was never fully implemented in the mirror node, didn't support the latest version, and no user interest in this data was expressed during its 4 years of existence. The acceptance tests were refactored to use the OpenAPI generated models, ensuring we dogfood our own API specification. The brittle MockPool
tests were removed in favor of additional coverage in other, easier to maintain tests. The REST API tests now uses the correct read only user and common database setup that the other modules use. Finally, the unused RestoreClientIntegrationTest
and associated test images were removed.
Our Citus deployment saw a number of improvements. Performance was optimized for hash insertions by reducing the shard count for hash tables. Entity upserts saw improvement by increasing the number of CPU resources to the database. Finally, the transactions list and accounts by ID endpoints saw their read performance improved for Citus.
Upgrading
There is a long running migration in this release to consider when deploying. The V1.93.0__update_entity_stake.sql
is expected to take 18 minutes against mainnet database with a complete transaction history. As noted previously, it's also recommended to run a full vacuum on the entity_stake
and entity_stake_history
tables after this migration.
Enhancements
- Expose the entrypoint command using an env var named ENTRYPOINT_COMMAND (#7704) #7729
- Add the absolute path to test image entrypoint #7665
- Remove mockpool based tests #7658
- Remove event file support #7652
- Update rest test docker image to include init.sql #7651
- Drop topic message primary index #7648
- Bump hedera-evm version to 0.46 and besu evm version to 23.10.2 #7645
- Update bucket for 2024-02 testnet reset #7637
- Update V2 Deployment for Performance Improvements #7622
- Add support for HIP-844 signer nonce #7617
- Enable direct calls to precompile addresses #7616
- Remove RestoreClientIntegrationTest #7606
- Cleanup acceptance tests asynchronously #7604
- Add OpenAPI model generation for NFT allowance API #7570
- Refactor acceptance tests to use OpenAPI generated models #7565
- Improve staking reward calculation performance #7554
- Improve transaction queries in v2 #7503
Bug Fixes
- Disable failing acceptance tests (0.98) #7730
- Fix node filter in pod USE dashboard #7662
- fix: Fix concurrency issue in message call processors #7650
- Fix failing equivalence acceptance tests #7646
- Fix HCS latency regression #7611
Dependency Upgrades
- Bump github.com/cucumber/godog from 0.13.0 to 0.14.0 in /hedera-mirror-rosetta #7683
- Bump peter-evans/create-pull-request from 5 to 6 #7682
- Bump io.hypersistence:hypersistence-utils-hibernate-63 from 3.7.0 to 3.7.1 #7681
- Bump software.amazon.awssdk:bom from 2.23.12 to 2.23.17 #7680
- Bump com.github.node-gradle:gradle-node-plugin from 7.0.1 to 7.0.2 #7678
- Bump io.grpc:grpc-bom from 1.61.0 to 1.61.1 #7677
- Bump com.hedera.evm:hedera-evm from 0.46.0 to 0.46.3 #7676
- Bump
@aws-sdk
/client-s3 from 3.501.0 to 3.504.0 in /hedera-mirror-rest #7675 - Bump mathjs from 12.3.0 to 12.3.1 in /hedera-mirror-rest #7674
- Change gradle-build-action to actions/setup-gradle #7667
- Bump Gradle from 8.5 to 8.6 #7666
- Bump github.com/opencontainers/runc from 1.1.5 to 1.1.12 in /hedera-mirror-rosetta #7653
- Bump vertx version from 4.5.1 to 4.5.2 #7649
- Bump express-openapi-validator from 5.1.2 to 5.1.3 in /hedera-mirror-rest #7635
- Bump
@aws-sdk
/client-s3 from 3.496.0 to 3.501.0 in /hedera-mirror-rest #7634 - Bump gorm.io/gorm from 1.25.5 to 1.25.6 in /hedera-mirror-rosetta #7632
- Bump github.com/ethereum/go-ethereum from 1.13.10 to 1.13.11 in /hedera-mirror-rosetta #7631
- Bump com.bucket4j:bucket4j-core from 8.7.0 to 8.7.1 #7630
- Bump software.amazon.awssdk:bom from 2.23.7 to 2.23.12 #7629
- Bump io.swagger:swagger-annotations from 1.6.12 to 1.6.13 #7628
- Bump com.google.cloud:spring-cloud-gcp-dependencies from 5.0.0 to 5.0.1 #7626
- Bump com.diffplug.spotless:spotless-plugin-gradle from 6.24.0 to 6.25.0 #7625
- Bump org.testcontainers:junit-jupiter from 1.19.3 to 1.19.4 #7624
- Bump com.playtika.testcontainers:embedded-google-pubsub from 3.1.2 to 3.1.4 #7623
- Bump versions for v0.98.0-SNAPSHOT #7601
- Bump com.hedera.hashgraph:hedera-protobuf-java-api from 0.45.3 to 0.46.0 #7581
Contributors
We'd like to thank all the contributors who worked on this release!
v0.98.0-rc1
v0.98.0-rc1
v0.97.1
This release updates the default testnet bucket to hedera-testnet-streams-2024-02
in preparation for the upcoming testnet reset. Operators can safely ignore this release if they're not running a testnet node.
Enhancements
- Update testnet bucket (0.97) #7642
Contributors
We'd like to thank all the contributors who worked on this release!
v0.97.0
This release sees some incremental changes to the REST API. The REST API now supports a RFC5988 compliant Link
header in its response as an alternative to the links.next
in the response body. Either link can now be used for pagination, but the Link
header provides a standard approach that's supported by more tools. The /api/v1/accounts/{id}?timestamp
endpoint now shows historically accurate staking information in its response so that users can view their past pending rewards. The timestamp in the response of the /api/v1/tokens/{id}/balances
endpoint is now more accurate by reflecting the max balance timestamp of the tokens in its response.
The helm chart was verified to be compatible with Kubernetes 1.28 and saw its dependencies all bumped to the latest release. The new rest-java module was converted from WebFlux to servlets with virtual threads. This should increase its scalability once we implement HIP-857 NFT allowance REST API in a future relase. Some internal refactoring of BatchEntityListener
to BatchPublisher
will enable future improvements to historical syncing and batch processing.
The /api/v1/contracts/call
endpoint saw a lot of important bug fixes this release. Support for historical blocks should be complete with some remaining bugs ironed out. The supported operations documentation was updated to reflect this increased level of compatibility.
Upgrading
If you use the hedera-mirror-common
chart then the prometheus operator CRDs need to be updated before upgrading:
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagerconfigs.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_alertmanagers.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_probes.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusagents.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheuses.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_prometheusrules.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_scrapeconfigs.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml
kubectl apply --force-conflicts --server-side -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.70.0/example/prometheus-operator-crd/monitoring.coreos.com_thanosrulers.yaml
Enhancements
- Replace responseContentType with responseHeaders in REST specs #7599
- Fix failing selfdestruct estimate gas test #7593
- Support RFC5988 next link #7569
- Support Kubernetes 1.28 #7567
- Increase importer cpu resources #7559
- Add a simplified Rosetta CI workflow #7555
- More spotless copyright fixes #7549
- Refactor BatchEntityListener to BatchPublisher #7545
- Historically accurate stake info
/api/v1/accounts/{id}?timestamp
#7544 - Improve REST API SQL query logging #7526
- HIP-584: Update web3 docs to cover historical support #7525
- Bump copyright year to 2024 #7522
- Remove transaction_hash_old table #7520
- Apply Spotless format to all files #7519
- Add test module to Gradle workflow #7506
- Convert rest-java to servlet with virtual threads #7488
- Improve temp schema script #7485
- fix: Use balance timestamp in /tokens/{id}/balances #7483
- Optimize list topic messages of specific topic id for v2 #7481
Bug Fixes
- Fix HCS latency regression (0.97) #7612
- Fix
NullPointerException
forestimate_gas
when passing non-existent sender address #7594 - Change error handling for invalid redirect ERC function cases #7591
- Fix incorrect selfdestruct eth_call response for system accounts #7558
- Fix database initialization error in rosetta image #7553
- Ignore temp schema repeatable migration for rest test #7551
- Fix
eth_call
withextcodehash
on system account #7546 - HIP-584 Historical: Set temp contract address on estimate contract create #7523
- Fix null pointer error on create fungible token with inherit account key #7515
- Increase default web3 rate limit #7513
- Fix Spotless license update #7511
- Fix incorrect string in k6 performance test report #7510
- HIP-584 Historical: Fix historical total supply #7505
- Replace TimePartitionService Cacheable annotation with caches #7501
- Fix Rest API cache-control response header #7487
- HIP-584 Historical: Fix historical NFT/Fungible token balance #7430
Documentation
- Add a HAPI compatibility matrix #7575
Dependency Upgrades
- Bump jsonpath from 2.8.0 to 2.9.0 #7597
- Bump nodemon from 3.0.2 to 3.0.3 in /hedera-mirror-rest #7585
- Bump
@testcontainers
/postgresql from 10.5.0 to 10.6.0 in /hedera-mirror-rest #7584 - Bump
@aws-sdk
/client-s3 from 3.490.0 to 3.496.0 in /hedera-mirror-rest #7583 - Bump org.msgpack:jackson-dataformat-msgpack from 0.9.7 to 0.9.8 #7580
- Bump software.amazon.awssdk:bom from 2.23.3 to 2.23.7 #7579
- Bump com.playtika.testcontainers:embedded-google-pubsub from 3.1.1 to 3.1.2 #7578
- Bump org.springframework.boot:spring-boot-gradle-plugin from 3.2.1 to 3.2.2 #7577
- Bump actions/cache from 3 to 4 #7576
- Bump io.projectreactor:reactor-core-micrometer from 1.1.1 to 1.1.2 #7542
- Bump org.msgpack:jackson-dataformat-msgpack from 0.9.6 to 0.9.7 #7541
- Bump uk.org.webcompere:system-stubs-jupiter from 2.1.5 to 2.1.6 #7540
- Bump io.grpc:grpc-bom from 1.60.1 to 1.61.0 #7539
- Bump com.diffplug.spotless:spotless-plugin-gradle from 6.23.3 to 6.24.0 #7538
- Bump software.amazon.awssdk:bom from 2.22.12 to 2.23.3 [#7537](#7537...
v0.97.0-rc2
v0.97.0-rc2
v0.97.0-rc1
v0.97.0-rc1
v0.96.0
With a lot of the developers taking some time off for the holiday season, this release is a bit smaller than normal but still contains some important changes. The previewnet and testnet bootstrap address books were updated to reflect the current state of the network. The default volume size for Loki was increased from 100 GB to 250 GB to account for increasing amounts of log activity. The processing of EthereumTransaction
was made more resilient so that the importer does not halt if encounters a badly encoded transaction. Finally, a memory leak in the REST API should greatly reduce out of memory errors and improve request throughput.
To improve ingest performance of entity tables when used with a distributed SQL database we introduced a new temporary
database schema. This schema is used to hold the temporary data inserted when processing entities from a record file. Previously this information was added to temporary tables created within the transaction scope, but these temporary tables could not be made distributed in Citus. With the temporary schema, this information can now be distributed appropriately to ensure optimal ingest performance. This change does require manual DDL statements be ran before the next upgrade (see next section).
Breaking Changes
As previously mentioned, a new database schema was introduced to handle the processing of upsertable entities. This change doesn't require any manual steps for new operators that use one of our initialization scripts or helm charts to configure the database. However, existing operators upgrading to 0.96.0 or later are required to create the schema by configuring and executing a script before the upgrade.
PGHOST=127.0.0.1 ./init-temp-schema.sh
Another breaking change concerns operators using our hedera-mirror-common
chart. The aforementioned Loki volume size increase was made to the embedded PersistentVolumeClaim
on the Loki StatefulSet
. Kubernetes does not allow changes to this immutable field so to workaround the StatefulSet
will need to be manually deleted for the upgrade of the common chart.
Enhancements
- Increase default Loki volume size #7469
- Make Ethereum transaction handling more resilient #7468
- Remove temporary workarounds #7440
- Updated address-book protobuf binaries for testnet & previewnet #7398
- HIP-584: Add tests for nested functions for call and estimate gas #7383
Bug Fixes
- Fix historical network supply #7473
- Fix REST pod running out of memory #7467
- revert owasp check dependency bump #7458
- Fix acceptance test regression #7439
- Upgrade Rosetta image to Java 21 #7437
- Suppress cancelled actuator logs #7427
- HIP-584 Historical: Fix historical crypto balance #7419
- HIP-584 Historical: Fix slot parameter in
MirrorEntityAccess
#7415 - Re-implement temp table parser logic to be v2 compatible #7382
Dependency Upgrades
- Bump Spring Boot from 3.2.0 to 3.2.1 #7466
- Bump
@aws-sdk
/client-s3 from 3.478.0 to 3.484.0 in /hedera-mirror-rest #7464 - Bump github.com/prometheus/client_golang from 1.17.0 to 1.18.0 in /hedera-mirror-rosetta #7463
- Bump software.amazon.awssdk:bom from 2.22.5 to 2.22.9 #7462
- Bump com.graphql-java-generator:graphql-java-client-runtime from 2.3.2 to 2.4 #7460
- Bump crazy-max/ghaction-import-gpg from 6.0.0 to 6.1.0 #7459
- Bump com.google.guava:guava from 32.1.3-jre to 33.0.0-jre #7457
- Bump software.amazon.awssdk:bom from 2.22.0 to 2.22.5 #7456
- Bump io.grpc:grpc-bom from 1.60.0 to 1.60.1 #7454
- Bump com.hedera.evm:hedera-evm from 0.44.3 to 0.45.1 #7453
- Bump org.owasp:dependency-check-gradle from 8.4.3 to 9.0.7 #7452
- Bump github.com/spf13/viper from 1.18.1 to 1.18.2 in /hedera-mirror-rosetta #7448
- Bump github.com/ethereum/go-ethereum from 1.13.5 to 1.13.8 in /hedera-mirror-rosetta #7447
- Bump mathjs from 12.2.0 to 12.2.1 in /hedera-mirror-rest #7446
- Bump
@aws-sdk
/client-s3 from 3.474.0 to 3.478.0 in /hedera-mirror-rest #7445 - Bump versions for v0.96.0-SNAPSHOT #7423
- Bump com.hedera.hashgraph:hedera-protobuf-java-api from 0.43.0 to 0.45.3 #7403
Contributors
We'd like to thank all the contributors who worked on this release!
v0.96.0-rc1
v0.96.0-rc1
v0.95.0
This release saw the Java components upgraded to use Java 21. In a future release, we will explore the new language features in 21 like virtual threads to unlock additional scalability. Some technical debt items were tackled including removing redundant test configuration by creating a common test hierarchy. Explicit @Autowired
annotations on test constructors were removed, reducing boilerplate. Finally, various classes were renamed to align to our naming standards including the removal of the Mirror
prefix from classes that were not used across modules.
HIP-584 EVM archive node for historical blocks saw some major additions including initial support for historical blocks. EVM Configuration is now loaded based upon block number instead of always utilizing the latest EVM. This ensures that /api/v1/contracts/call
simulates the execution as it would've been on consensus nodes at that point in time. Database queries were adapted to work with timestamp filters to allow for returning historical block information.
Our distributed database effort saw some notable improvements including upgrading the version of Citus to 12.1. PostgreSQL 16 support was tested confirming compatibility with both regular PostgreSQL and Citus. Both /api/v1/topics/{id}/messages/{sequenceNumber}
and /api/v1/topics/{id}/messages
saw optimizations implemented when used with Citus.
Upgrading
If you're compiling locally, ensure you have upgraded to Java 21 in your terminal and IDE. For MacOS, we recommend using SDKMAN! to manage Java versions so that upgrading is as simple as sdk install java 21-tem
. If you're using a custom Dockerfile
ensure it is also updated to Java 21. We recommend Eclipse Temurin as the base image for our Java components.
Enhancements
- Increase parser transaction timeout to 120s #7421
- Fix integration test console warning about Stream of unknown length #7392
- HIP-584 Historical: Sync evm configurations with hedera-services #7385
- Rename
MirrorProperties
toImporterProperties
#7381 - Rename Mirror prefixed classes #7380
- Remove
@Autowired
from test constructors #7376 - Rename IntegrationTest to ImporterIntegrationTest #7375
- Optimize balance timestamp range when a closed range is provided in the request #7366
- Add a common integration test hierarchy #7350
- Update to Citus 12.1 and PostgreSQL 16 #7347
- Add topic message lookup to topic and sequence requests #7344
- HIP-584 Historical: Load EVM Configuration based on block number #7314
- Upgrade to Java 21 #7294
- HIP-584 Historical: Extend historical DB queries #7269
- HIP-584 Historical: Adapt DB Accessors to work with timestamp filters #7242
- HIP-584 Historical: DB queries for historical crypto and token allowances #7209
- Topic message optimization #7206
Bug Fixes
- Upgrade Rosetta image to Java 21 (0.95) #7438
- Fix monitor retry logic #7420
- Fix acceptance test main-class #7395
- Remove entityStakeQuery from accounts REST API #7391
- Disable entity history tracking during errata migration #7390
- Fix incorrect pending reward calculation #7388
- Update config limit max test #7373
- update migration to exclude entries with null hash #7372
- Fix REST API closing db connections on SIGTERM #7370
- Fix flaky acceptance tests #7367
- Topic messages list query - Bug fix V2 #7349
- Update contract state endpoint to support slot parameter in any order #7346
- Fix multiple bean definition errors in web3 #7340
- Fix flaky NotifyingTopicListenerTest #7338
Dependency Upgrades
- Bump golang.org/x/crypto from 0.16.0 to 0.17.0 in /hedera-mirror-rosetta #7417
- Bump eslint-plugin-security from 1.7.1 to 2.1.0 in /hedera-mirror-rest #7413
- Bump
@aws-sdk
/client-s3 from 3.470.0 to 3.474.0 in /hedera-mirror-rest #7412 - Bump
@testcontainers
/postgresql from 10.3.2 to 10.4.0 in /hedera-mirror-rest #7410 - Bump com.playtika.testcontainers:embedded-google-pubsub from 3.1.0 to 3.1.1 #7409
- Bump io.projectreactor:reactor-core-micrometer from 1.1.0 to 1.1.1 #7408
- Bump io.cucumber:cucumber-bom from 7.14.1 to 7.15.0 #7407
- Bump software.amazon.awssdk:bom from 2.21.42 to 2.22.0 #7406
- Bump com.esaulpaugh:headlong from 10.0.1 to 10.0.2 #7404
- Bump vertxVersion from 4.5.0 to 4.5.1 #7402
- Bump com.google.cloud:spring-cloud-gcp-dependencies from 4.8.4 to 5.0.0 #7401
- Bump actions/upload-artifact from 3 to 4 #7400
- Bump actions/setup-python from 4 to 5 #7364
- Bump google-github-actions/setup-gcloud from 1 to 2 #7363
- Bump github.com/spf13/viper from 1.17.0 to 1.18.1 in /hedera-mirror-rosetta #7362
- Bump github.com/hashgraph/hedera-sdk-go/v2 from 2.32.0 to 2.33.0 in /hedera-mirror-rosetta #7361
- Bump mathjs from 12.1.0 to 12.2.0 in /hedera-mirror-rest #7360
- Bump
@aws-sdk
/client-s3 from 3.465.0 to 3.470.0 in /hedera-mirror-rest #7359 - Bump extensionless from 1.8.5 to 1.9.6 in /hedera-mirror-rest/check-state-proof #7358
- Bump io.grpc:grpc-bom from 1.59.1 to 1.60.0 #7356
- Bump org.springframework.cloud:spring-cloud-dependencies from 2023.0.0-RC1 to 2023.0.0 #7355
- Bump software.amazon.awssdk:bom from 2.21.37 to 2.21.42 #7354
- Bump org.gradle:test-retry-gradle-plugin from 1.5.7 to 1.5.8 #7352
- Bump net.java.dev.jna:jna from 5.13.0 to 5.14.0 #7351
- Bump versions for v0.95.0-SNAPSHOT #7335
Contributors
We'd like to thank all the contributors who worked on this release!
v0.95.0-rc1
v0.95.0-rc1