Skip to content

Releases: hashgraph/hedera-mirror-node

v0.38.0-rc3

09 Aug 21:22
v0.38.0-rc3
6abe4c0
Compare
Choose a tag to compare
v0.38.0-rc3 Pre-release
Pre-release
v0.38.0-rc3

v0.38.0-rc2

09 Aug 18:06
v0.38.0-rc2
0acc32b
Compare
Choose a tag to compare
v0.38.0-rc2 Pre-release
Pre-release
v0.38.0-rc2

v0.37.2

04 Aug 18:21
v0.37.2
717410c
Compare
Choose a tag to compare

A small bug fix release that addresses some issues with our HIP-18 support.

Bug Fixes

  • Port fix incorrect fixed fee denominating token id to release/0.37 #2359

Contributors

We'd like to thank all the contributors who worked on this release!

v0.37.2-rc1

04 Aug 01:55
v0.37.2-rc1
3226b15
Compare
Choose a tag to compare
v0.37.2-rc1 Pre-release
Pre-release
v0.37.2-rc1

v0.38.0-rc1

02 Aug 18:47
v0.38.0-rc1
b8202fd
Compare
Choose a tag to compare
v0.38.0-rc1 Pre-release
Pre-release
v0.38.0-rc1

v0.38.0-beta1

27 Jul 21:00
v0.38.0-beta1
f94ecde
Compare
Choose a tag to compare
v0.38.0-beta1 Pre-release
Pre-release
v0.38.0-beta1

v0.37.1

19 Jul 15:03
v0.37.1
429a8ff
Compare
Choose a tag to compare

A small bug fix release that addresses some minor issues with our NFT support. It also disables the stream file health indicator until we can improve how it works for some corner cases. This release will also form the basis for our new Google Marketplace version.

Bug Fixes

  • Disable stream file health indicator for 0.37 release #2288
  • Port fix StreamFileHealthIndicator issue to release/0.37 #2286
  • Bump Java SDK v2 to 2.0.9-beta.2 #2283
  • Fix issue with nft info REST API on deleted nfts (0.37) #2278
  • GCP marketplace solution upgrade to v0.37 (0.37) #2277

Contributors

We'd like to thank all the contributors who worked on this release!

v0.37.0

14 Jul 16:27
v0.37.0
0de7978
Compare
Choose a tag to compare

This release broadens our support for non-fungible tokens (NFTs) with new NFT-specific REST APIs. A new API was added to return a list of NFTs for a particular token ID. We also added a new API to return a single NFT by its token ID and serial number. Finally, we added an API to see the transaction history for a particular NFT. In an effort to have more manageable REST API code, we now adopt a more object-oriented approach by utilizing models, view-models and services. Below is an example of the three new APIs:

GET /api/v1/tokens/0.0.1500/nfts

{
  "nfts": [{
    "account_id": "0.0.1002",
    "created_timestamp": "1234567890.000000010",
    "deleted": false,
    "metadata": "ahf=",
    "modified_timestamp": "1234567890.000000010",
    "serial_number": 2,
    "token_id": "0.0.1500"
  },{
    "account_id": "0.0.1001",
    "created_timestamp": "1234567890.000000009",
    "deleted": false,
    "metadata": "bTM=",
    "modified_timestamp": "1234567890.000000008",
    "serial_number": 1,
    "token_id": "0.0.1500"
  }],
  "links": {
    "next": null
  }
}

GET /api/v1/tokens/0.0.1500/nfts/1

{
  "account_id": "0.0.1001",
  "created_timestamp": "1234567890.000000008",
  "deleted": false,
  "metadata": "bTM=",
  "modified_timestamp": "1234567890.000000009",
  "serial_number": 1,
  "token_id": "0.0.1500"
}

GET /api/v1/tokens/0.0.1500/nfts/1/transactions

{
  "transactions": [{
    "consensus_timestamp": "1234567890.000000009",
    "transaction_id": "0.0.8-1234567890-000000009",
    "receiver_account_id": "0.0.1001",
    "sender_account_id": "0.0.2001",
    "type": "CRYPTOTRANSFER"
  }, {
    "consensus_timestamp": "1234567890.000000008",
    "transaction_id": "0.0.8-1234567890-000000008",
    "receiver_account_id": "0.0.2001",
    "sender_account_id": null,
    "type": "TOKENMINT"
  }],
  "links": {
    "next": null
  }
}

This release also adds support for custom fees for HTS as defined in HIP-18. After the mirror node design was completed, the necessary custom fee tables were added and the importer modified to ingest the transactions. A list of assessed custom fees was added to the /api/v1/transactions/{transactionId} endpoint. The ability to find a token's custom fee schedule at a point in time was added to the /api/v1/tokens/{tokenId} endpoint.

We optimized the balance file parsing performance to be able to process files with a large numbers of accounts. We previously loaded every account balance into memory before persisting. When testing files with tens of millions account this would cause the importer process to slow down and run out of memory. This has now been optimized to load the items one by one into memory then batch persist them to the database.

Breaking Changes

If you're using our monitor tool to verify or performance test the network, you should be aware of some breaking changes to its configuration format. In order to make it easier to override the default behavior without having to duplicate its configuration, we changed the scenario properties from a list to a map where the key is the scenario name. Specifically we changed hedera.mirror.monitor.publish.scenarios, hedera.mirror.monitor.subscribe.grpc, and hedera.mirror.monitor.subscribe.rest. Also, the content of the elapsed duration in the monitor REST API changed slightly to a format like 1h2m57s.

Enhancements

  • Add ReceiptStatusException retry and account checksum support to acceptance tests #2253
  • Custom fees REST api #2247
  • Run GitHub actions on main #2241
  • Support NFT treasury account updates #2239
  • Custom fees importer #2236
  • Add an alert for missing balance file #2219
  • Add Upsert support to NFTs #2218
  • Support NFT treasury account updates #2215
  • Adding config to swagger stats #2204
  • Add custom fees to existing REST APIs #2199
  • Remove nft transferlist from transactions list endpoint #2181
  • NFT transaction history REST API #2177
  • Update README with min versions for tools #2175
  • Add IP metrics to REST #2174
  • Custom fees support design #2173
  • NFTs list and get REST API #2171
  • Custom Fee Support Importer #2166
  • Improve acceptance accountId and retry logic #2162
  • Change monitor scenario properties from list to map #2160
  • Rename master to main #2158
  • Bump versions for v0.37.0-SNAPSHOT #2151
  • Rename master branch to main #2137
  • REST API get NFT transaction history #2136
  • REST API list/get NFTs #2135
  • Refactor importer NFT logic to use upsert #2133
  • REST API metrics by client IP #2130

Bug Fixes

  • Fix monitor transaction publisher not recording error metrics #2240
  • Retry monitor entity creation #2216
  • Fix RedisEntityListenerTest.onSlowPublish #2214
  • Remove broken AccountBalanceFileParserTest.keepFiles test #2213
  • Fix "New Issue" only showing "Ask a Question" #2211
  • Fix helm test failing during retry #2200
  • Stream account balances to the database #2182
  • Mitigate the impact of pgcopy timeout #2176
  • Deduplicate NFT transfers #2164
  • Fix Grafana & adjust alerts #2163
  • Fix rosetta db integration test failure #2161
  • Set entity createdTimestamp and modifiedTimestamp in transaction handlers #2159
  • Add multi batch support to upsert pgcopy flow #2153
  • Increase RedisEntityListenerTest.onSlowPublish timeout #2152
  • Entity created and modify timestamps are null #2131
  • AccountBalanceFileParserTest & RecordFileParserIntegrationTest failing in CI #1947
  • Slow account balance file processing at high number of accounts #1927

Documentation

  • Remove GitHub docs in favor of organization level configuration #2210
  • Add example values to docker compose application.yml #2208

Dependency Upgrades

  • [Cherry-pick 0.37.0] Bump protobuf to 0.16.0-alpha.4 and add new response codes #2271
  • Update to hedera-protobuf-java-api 0.16.0-alpha.3 #2254
  • Bump husky from 6.0.0 to 7.0.1 in /hedera-mirror-rest #2238
  • Bump aws-sdk from 2.935.0 to 2.939.0 in /hedera-mirror-rest #2237
  • Bump github.com/hashgraph/hedera-sdk-go/v2 from 2.1.7 to 2.1.10 in /hedera-mirror-rosetta #2235
  • Bump google.golang.org/protobuf from 1.27.0 to 1.27.1 in /hedera-mirror-rosetta #2234
  • Bump @hashgraph/proto from 1.0.25 to 1.1.4 in /hedera-mirror-rest/check-state-proof #2233
  • Bump husky from 6.0.0 to 7.0.0 in /hedera-mirror-rest #2232
    -...
Read more

v0.37.0-rc1

09 Jul 17:08
v0.37.0-rc1
719a1f0
Compare
Choose a tag to compare
v0.37.0-rc1 Pre-release
Pre-release
v0.37.0-rc1

v0.36.0

07 Jul 16:42
v0.36.0
5931731
Compare
Choose a tag to compare

We are happy to announce the availability of a publicly accessible, free-to-use, mainnet Mirror Node operated by the Hedera team. As part of this, we put a large amount of effort into fine tuning our Kubernetes deployment. We migrated to Flux 2, a GitOps-based deployment tool that allows us to declaratively specify the expected state of the Mirror Node in git and manage our rollouts. You can browse our deploy branch and see the exact config and versions rolled out to various clusters and environments. The Helm chart was updated to add PodDisruptionBudgets, adjust alert rules and other improvements to make it easier to automate the deployment.

This release is the first version of the Mirror Node with preliminary support for non-fungible tokens (NFTs). NFT support is being added to the Hedera nodes as outlined in HIP 17. We spent time designing how that NFT support will look like for the Mirror Node. Modifications to the schema were made to add new tables and fields and the Importer was updated to ingest NFT transactions. The existing REST APIs were updated to add NFT related fields to the response. This includes adding a type field to the token related APIs to indicate fungibility and anft_transfers to /api/v1/transactions/{id}:

{
  "transactions": [{
      "consensus_timestamp": "1234567890.000000001",
      "name": "CRYPTOTRANSFER",
      "nft_transfers": [
        {
          "receiver_account_id": "0.0.121",
          "sender_account_id": "0.0.122",
          "serial_number": 104,
          "token_id": "0.0.14873"
        }
      ]
  }]
}

One thing to note is that we did not add NFT transfers to the list transactions endpoint in an effort to reduce the size and improve the performance of that endpoint. In the next release we will add new NFT specific REST APIs.

Continuing upon the theme of the last release, we made additional changes to the Rosetta API to bring it up to par with the rest of the components. Rosetta now includes support for HTS via both is data and construction APIs.

The Importer saw a large focus on improving performance and resiliency. It is now highly available (HA) when run inside Kubernetes. This allows more than one instance to run at a time and to failover to the secondary instance when the primary becomes unhealthy. A special Kubernetes ConfigMap named leaders is used to atomically elect the leader.

We’re improving our ingestion time dramatically for entity creation. Previously those were database finds followed by updates. Since inserts are always faster than find and updates, we’ve optimized this to insert the updates into a temporary table and at the end upsert those to the final table. A record file with 6,000 new entities went from 21 seconds to 600 ms, making it 35x improvement. Balance file processing was optimized to greatly reduce memory by only keeping one file in memory at a time.

Breaking Changes

In honor of Juneteenth and as part of general industry-wide movement, we renamed our master branch to main. If you have a clone or fork of the Mirror Node Git repository, you will need to take the below steps to update it to use main:

git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a

As part of our optimization to reduce memory usage, we now process some things earlier in the lifecycle. Due to this we had to rename some properties to reflect this change. We also changed the disk structure if you are using the keepFiles (now renamed to writeFiles) properties to write the stream files to disk after download. It is no longer archived into folders by day. Instead, the folder structure will exactly match the structure in the bucket. This opens the possibility for a mirror node to download and mirror the bucket itself using a S3 compatible API like MinIO. Below is a summary of the renamed properties:

  • Renamed hedera.mirror.importer.downloader.balance.keepSignatures to hedera.mirror.importer.downloader.balance.writeSignatures
  • Renamed hedera.mirror.importer.parser.balance.keepFiles to hedera.mirror.importer.downloader.balance.writeFiles
  • Renamed hedera.mirror.importer.parser.balance.persistBytes to hedera.mirror.importer.downloader.balance.persistBytes
  • Renamed hedera.mirror.importer.downloader.event.keepSignatures to hedera.mirror.importer.downloader.event.writeSignatures
  • Renamed hedera.mirror.importer.parser.event.keepFiles to hedera.mirror.importer.downloader.event.writeFiles
  • Renamed hedera.mirror.importer.parser.event.persistBytes to hedera.mirror.importer.downloader.event.persistBytes
  • Renamed hedera.mirror.importer.downloader.record.keepSignatures to hedera.mirror.importer.downloader.record.writeSignatures
  • Renamed hedera.mirror.importer.parser.record.keepFiles to hedera.mirror.importer.downloader.record.writeFiles
  • Renamed hedera.mirror.importer.parser.record.persistBytes to hedera.mirror.importer.downloader.record.persistBytes

Enhancements

  • Remove NFT transfers from transactions list endpoint (cherry-pick) #2183
  • Rename references from master to main (cherry-pick) #2170
  • Improve acceptance accountId and retry logic (cherry-pick) (#2162) #2169
  • Add a PodDisruptionBudget to gRPC and REST #2138
  • Add NFT support to existing REST APIs #2129
  • Adjust Traefik rate limit #2125
  • Add high availability to importer #2124
  • Nft importer #2109
  • Automate deploy to integration #2102
  • Add Rosetta HTS support #2093
  • Add workflow for building on windows #2089
  • Add a global hostname, pullPolicy and podAnnotations properties to chart #2073
  • NFT Database Schema #2070
  • Bump versions for v0.36.0-SNAPSHOT #2068
  • NFT Design Doc V2 #2061
  • NFT existing REST APIs #2058
  • NFT design update #2057
  • NFT database schema #2056
  • Fix slow domain object ingestion #2006
  • NFT importer support #1996
  • Slow record parsing with high number of created entities #1926
  • Rosetta HTS support #1920
  • Enable importer leader election #1899
  • Migrate to Flux 2 #1811
  • Utilize cache for EntityRecordItemListener bulk insert/update operations on domain objects #1440
  • Adding config to swagger stats (#2204) #2206

Bug Fixes

  • Fix helm test failing during retry (0.36) #2203
  • Deduplicate NFT transfers (cherry-pick) #2168
  • Fix Grafana & adjust alerts (0.36) #2165
  • Add multi batch support to upsert pgcopy flow to release 0.36 #2155
  • Upsert pgcopy flow attempt to create already present temp table #2154
  • Adjust alert thresholds & fix alert dashboard #2150
  • Duplicate nft transfers returned by /transactions rest api #2139
  • Increase verify timeout to 2s in RedisEntityListenerTest #2128
  • RedisEntityListenerTest.onSlowPublish fails in github CI #2127
  • Simplify automated release workflow #2126
  • Optimize importer memory footprint #2103
  • Fix transactions query duplicate timestamps issue #2097
  • Dissociate accounts from tokens post run #2090
  • OOMKilled in performance Kubernetes #2087
  • Update HTS Acceptance Tests to Dissociate payer on complete [#2069](https://github.com/hashgraph/hedera-mirror-node/issu...
Read more