This release comes with a number of improvements to support the JSON-RPC Relay. We now support alias and EVM address lookups for the account.id
parameter on the balances endpoint. We optimized the transaction nonce filtering in /api/v1/contracts/{id}/results
by denormalizing the data. Finally, an issue with empty function_parameters
in /api/v1/contracts/results/{id}
response was addressed.
The other big item we worked on was support for volume level compression with Citus. We know that the type of time series data the mirror node stores would be highly compressible and we wanted to use that to our advantage to both reduce increasing storage costs and improve read/write performance. PostgreSQL supports a basic form of compression at the column level called TOAST, but it only takes effect for very large columns. Citus has compression when using their columnar storage access method, but we found it to be too slow for our needs. Since with Citus we knew we wouldn't be using a SaaS service we had more control over the database deployment, so we decided to experiment with Kubernetes volume compression. By creating custom Kubernetes node pools exclusively for Citus, we could install ZFS via the zfs-localpv and enable Zstandard compression on the database's underlying volume. The results were a 3.6x compression ratio with zero loss in performance. To put into perspective, that means the current mainnet database size of 17TB could be reduced to 4.7TB.
Other areas of improvement include improving documentation around disaster recovery efforts. This includes a runbook on restoring a mirror node from backup. There's also a runbook on how to perform local stream file verification. Acceptance tests have been previously integrated into the automated deployment process but suffered from a long execution time mainly due to using Gradle to download dependencies at runtime. We containerized the acceptance tests so the dependencies are downloaded at build time reducing runtime by 3-4x.
Upgrading
In this release, there is one long running migration to be aware of as it may impact deployments. When the importer component starts up after being upgraded, it will execute the V1.79.0__add_transaction_nonce_to_contract_result.sql
migration. Against a fully populated mainnet database it will take approximately one hour to complete. As always, it's recommended upgrades be completed on a staging environment first to allow for deployment verification and reduce downtime before being opened up to customer traffic.
Enhancements
- Citus volume compression #5989
- Fixing "No such account or token" issue for estimate gas #5988
- HIP-584: Contract create flow with estimateGas fix #5987
- Fix circular health check issue #5985
- HIP-584: Implement contract creation #5984
- HIP-584: Implement contract creation #5983
- Eliminate the need for a boolean "ethereum" parameter from… #5980
- Add support for EVM address to balances endpoint #5979
- Containerize acceptance tests #5978
- HIP-584: Create Account Database Accessor #5976
- HIP-584: Create Account Database Accessor #5975
- Add transaction_nonce to contract_result table #5964
- HIP-584: Validate nested contract state changes work correctly #5960
- HIP-584: Copy precompile pricing logic without gasFeeInTinybars - Part 3 #5956
- HIP-584: Copy precompile pricing logic without gasFeeInTinybars - Part 2 #5945
- Citus optimize transaction nonce filtering in
/api/v1/contracts/{id}/results
#5934 - Containerize acceptance tests #5932
- HIP-584: Make all parameters in request body for estimate gas optional #5908
- HIP-584: Make all parameters in request body for
eth_estimateGas
optional #5900 - Add support for evmAddress to Balances endpoint #5863
- HIP-584: Copy
TokenRelationship
model from services #5814 - HIP-584: Copy
TokenRelationship
store model intohedera-mirror-web3
#5758 - Citus volume compression #5751
- boolean 'ethereum' parameter not needed in assertContractLogs/assertContractResults methods of ContractResultServiceImplIntegrationTest.java #5471
Bug Fixes
- Fix contract call middlware errors (0.81) #6070
- Circular dependency between Traefik readiness gate and monitor health check #5981
- Fix empty function_parameters in
/contracts/results/{id}
response #5958 - Fix Synthetic Token Allowance Owner Migration #5950
- SyntheticTokenAllowanceOwnerMigration fails on testnet #5944
- HIP-584: Disable precompiles for eth_estimateGas #5941
- Function parameters returned as 0x in /contracts/results/{txHash} #5279
Documentation
- Add Runbook Restore Document #5962
- HIP-584: Document supported contract call functionality #5949
- Update Open API Spec to clarify contracts/call support #5948
- Create a runbook to document disaster recovery steps #4805
Dependency Upgrades
- Bump com.github.node-gradle:gradle-node-plugin from 4.0.0 to 5.0.0 #6004
- Bump org.testcontainers:junit-jupiter from 1.18.0 to 1.18.1 #6003
- Bump protobufVersion from 3.22.4 to 3.23.0 #6002
- Bump com.hedera.hashgraph:hedera-protobuf-java-api from 0.37.0 to 0.38.9 #6001
- Bump vertxVersion from 4.4.1 to 4.4.2 #6000
- Bump io.grpc:grpc-bom from 1.54.1 to 1.55.1 #5999
- Bump software.amazon.awssdk:bom from 2.20.61 to 2.20.65 #5998
- Bump org.openapitools:openapi-generator-gradle-plugin from 6.5.0 to 6.6.0 #5997
- Bump testcontainers from 9.6.0 to 9.8.0 in /hedera-mirror-rest #5996
- Bump github.com/Code-Hex/go-generics-cache from 1.3.0 to 1.3.1 in /hedera-mirror-rosetta #5995
- Bump gorm.io/gorm from 1.25.0 to 1.25.1 in /hedera-mirror-rosetta #5994
- Bump
@aws-sdk
/client-s3 from 3.328.0 to 3.332.0 in /hedera-mirror-rest #5993 - Bump glob from 10.2.2 to 10.2.3 in /hedera-mirror-rest/check-state-proof #5992
- Bump software.amazon.awssdk:bom from 2.20.56 to 2.20.61 #5972
- Bump com.google.cloud:spring-cloud-gcp-dependencies from 3.4.9 to 3.5.0 #5971
- Bump protobufVersion from 3.22.3 to 3.22.4 #5970
- Bump com.hedera.hashgraph:sdk from 2.24.0 to 2.24.1 #5969
- Bump
@aws-sdk
/client-s3 from 3.321.1 to 3.328.0 in /hedera-mirror-rest #5968 - Bump github.com/prometheus/client_golang from 1.15.0 to 1.15.1 in /hedera-mirror-rosetta #5967
- Bump boxen from 7.0.2 to 7.1.0 in /hedera-mirror-rest/check-state-proof #5966
- Bump swagger-ui-express from 4.6.2 to 4.6.3 in /hedera-mirror-rest #5965
- Bump Java and Node.js versions #5963
- Bump versions for v0.81.0-SNAPSHOT #5942
Contributors
We'd like to thank all the contributors who worked on this release!