Skip to content

Releases: cardano-foundation/cardano-rosetta-java

2.1.2

21 Apr 08:43
688f2f9

Choose a tag to compare

Cardano Rosetta Java v2.1.2 is a hotfix release that restores chain synchronization on Preview, stabilizes sync-status reporting under brief indexer connectivity blips, and improves operator-facing error diagnostics.

Cardano-Node compatibility: 10.5.4.

⚠️ This is not a mandatory release.

Key Improvements

  • Fixed a chain synchronization failure on Preview caused by a CBOR parsing error on blocks.
  • Reduced spurious out-of-sync readings by widening the default sync grace window, so short-lived HTTP instability between the API and the indexer no longer flips the reported sync state.
  • Enriched gateway error logging to include the target URL, response body, and full exception chain, making yaci-indexer communication failures easier to diagnose in production.

Upgrade / Compatibility

  • From v2.1.1 and v2.1.0: fully compatible, no resync required.
  • From v2.0.0: fully compatible, no resync required.
  • From v1.x.x: requires a full yaci-indexer resync only (Cardano Node data can be kept). See the resync procedure.
  • No deployment method or infrastructure changes. Existing Docker Compose and Helm deployments continue to work; operators only need to update the image tag to 2.1.2.

API / Configuration

  • /network/status sync toleranceSyncStatusService now reports a node as in-sync while it is within 200 slots of tip (previously 100). This only affects the synced flag computation; no endpoint response shape or status code changes.
  • Environment updates:
    • SYNC_GRACE_SLOTS_COUNT: 100 → 200 (also reflected in .env.docker-compose, .env.docker-compose-preprod, .env.h2, application.yaml, application-offline.yaml, and Helm values.yaml / values-preprod.yaml / charts/rosetta-api/values.yaml). Override by setting the variable explicitly in your deployment.
    • RELEASE_VERSION: 2.1.1 → 2.1.2 (Docker image tag for API and Indexer).
    • Helm global.releaseVersion: "2.1.1" → "2.1.2".

What's Changed

Full Changelog: 2.1.1...2.1.2

2.1.1

10 Apr 10:41
68f5bc3

Choose a tag to compare

Cardano Rosetta Java v2.1.1 is a maintenance release focused on reference Kubernetes deployment, container health probes, endpoint input validation fixes, and a security hardening of the search path.

Cardano-Node compatibility: 10.5.4.

⚠️ This is not a mandatory release.

Key Improvements

  • Kubernetes deployment is now supported via reference Helm charts alongside the existing Docker Compose flow
  • Liveness and readiness probes added to all containers, giving orchestrators accurate sync and index-readiness signals
  • Security fix: hardened input validation and query construction on the search endpoint, resolved with domain validators and JOOQ bind parameters
  • Fixed several endpoints that previously ignored invalid input or silently defaulted to wrong values
  • Tunable connection pool for the yaci-indexer database
  • Fixed a rare crash with UTxO pruning enabled when the indexer was temporarily unavailable

Upgrade / Compatibility

  • From v2.1.0: Compatible, no resync required.
  • From v2.0.0: Compatible, no resync required.
  • From v1.x.x: Requires a full yaci-indexer resync only (Cardano Node data can be kept). See the resync procedure.
  • New deployment option: Kubernetes Helm charts are now available. Existing Docker Compose deployments continue to work unchanged.

API / Configuration

  • Security fix — /search/transactions: currency input validation and parameterized queries.

    • A report identified an issue in the search path where policyId and symbol were concatenated into raw JOOQ DSL.condition() SQL with only superficial escaping. The fix introduces strict domain validation (PolicyIdValidator, SymbolValidator, TokenNameValidator) and rewrites the H2 and PostgreSQL currency condition builders to use JOOQ bind parameters instead of string interpolation. Invalid values now return 400 with error 4023 (invalid policyId), 4024 (invalid token name), or 5059 (currency symbol not hex), matching the existing behavior of /account/balance and /account/coins.
  • /construction/derive: invalid address_type now rejected.

    • Previously, unrecognized values (e.g., "InvalidType") silently defaulted to Enterprise. Now returns 400 with error 4016 ("Provided address type is invalid"). Valid values are unchanged: Base, Enterprise, Reward.
  • /network/options: call_methods now populated.

    • Previously returned an empty list despite /call supporting methods. Now reports the supported methods (get_parse_error_blocks, mark_parse_error_block_checked), consistent with the /call endpoint.
  • /search/transactions: malformed coin_identifier now returns a structured error.

    • Previously threw an unhandled exception (HTTP 500) when the identifier lacked a : separator or had a non-numeric output index. Now returns 400 (not retriable) with a descriptive message.
  • Spring Boot Actuator liveness and readiness probes added to API and yaci-indexer containers.

    • API exposes GET /actuator/health/liveness and GET /actuator/health/readiness. The readiness probe reports ready only when the node is at chain tip AND all required database indexes are applied (sync stage LIVE). The yaci-indexer exposes equivalent probes gated on Yaci connection and sync state. See the updated Kubernetes deployment guide for probe configuration details.
  • YaciHttpGateway: InterruptedException no longer leaks to the request thread on IO errors.

    • When the yaci-indexer was temporarily unavailable, the request thread was left with its interrupted flag set, causing JDBC to abort the next DB query with "Unable to rollback against JDBC Connection". This was most visible on deployments with UTxO pruning enabled, where the subsequent oldest_block_identifier query would crash. InterruptedException and IOException are now handled separately.

Environment updates:

  • INDEXER_DB_POOL_MIN_COUNT: 12 (new, HikariCP minimum idle for the yaci-indexer DB pool)
  • INDEXER_DB_POOL_MAX_COUNT: 12 (new, HikariCP maximum pool size)
  • INDEXER_DB_POOL_MAX_LIFETIME_MS: 2000000 (new)
  • INDEXER_DB_POOL_CONNECTION_TIMEOUT_MS: 100000 (new)
  • INDEXER_DB_KEEP_ALIVE_MS: 60000 (new)
  • INDEXER_DB_LEAK_CONNECTIONS_WARNING_MS: 60000 (new)
  • INDEXER_DB_SHOW_SQL: false (new, toggles Hibernate SQL logging in the indexer)
  • INDEXER_DB_MONITOR_PERFORMANCE: false (new, toggles HikariCP JMX MBean registration)

What's Changed

Full Changelog: 2.1.0...2.1.1

2.1.0

17 Feb 13:54
3f95fb2

Choose a tag to compare

Cardano Rosetta Java v2.1.0

Cardano Rosetta Java v2.1.0 introduces full support for 2 Conway-era governance operations across both construction and data endpoints.

⚠️ This is not a mandatory release.

Key Improvements

  • Full support for 2 governance operations (Voltaire / Conway era): SPO Voting and DRep Vote Delegation, now available in both construction and data endpoints
  • Operations are now sorted by index (ascending order)
  • Full support for CIP-129 (automatic DRep type inference from prefixed IDs)
  • Added experimental admin UI for the indexer at http://yaci-indexer:9095/admin-ui/

Upgrade / Compatibility

  • From v2.0.0: Compatible, no resync required.
  • From v1.x.x: Requires full genesis resync of the yaci-indexer only (Cardano Node data can be kept). See the data volume removal procedure for steps.

API / Configuration

  • Breaking: HTTP status codes aligned with error classification.

    • All non-retriable errors now return 400 Bad Request instead of 500 Internal Server Error across all endpoints. Clients relying on 500 for validation or not-found errors must update their error handling.
  • /construction/preprocess and /construction/payloads: CIP-129 DRep type inference.

    • DRep IDs with a 29-byte CIP-129 prefix no longer require an explicit type field, the type is inferred from the header byte. Raw 28-byte IDs still require type. See the DRep Delegation guide for usage examples.
  • /block, /block/transaction, and /search/transactions: governance operations included.

    • Responses now contain VOTE_DREP_DELEGATION and POOL_GOVERNANCE_VOTE operations for Conway-era transactions. See the Pool Operations guide for SPO voting details.

Environment updates:

  • CARDANO_NODE_VERSION: 10.5.3 → 10.5.4
  • YACI_VERSION: 0.10.5 → 0.10.6

What's Changed

New Contributors

Full Changelog: 2.0.0...2.1.0

2.0.0

04 Feb 13:52

Choose a tag to compare

Cardano Rosetta Java v2.0.0

Cardano Rosetta Java v2.0.0 introduces major infrastructure upgrades, a unified schema, and a cleaner architecture, establishing a strong foundation for upcoming features. This release also delivers significant performance and reliability improvements, reducing sync time from ~52 hours to ~37 hours.

⚠️ This is not a mandatory release.

Key Improvements

  • Unified database schema replaces per-network schemas, simplifying deployment and maintenance
  • Deferred index creation speeds up initial sync by applying database indexes only after ingestion completes. See the Boot Sequence and Index Management documentation.
  • Sync status now reports three stages, giving operators visibility into sync progress and index readiness
  • PostgreSQL upgraded from v14 to v18
  • Mithril upgraded from 2537.0 to 2543.1-hotfix
  • Yaci Store upgraded from 0.1.5 to 2.0.0, contributing to reduced sync times
  • Single Docker image deployment removed; Docker Compose is now the only supported method

Upgrade / Compatibility

  • From v1.4.3 and older versions: a full resync of yaci-indexer is required (Cardano Node data can be kept). The database schema has changed from network-specific (e.g., mainnet) to public, and PostgreSQL was upgraded from 14 to 18, existing databases are not compatible. See the resync procedure.
  • The single Docker image (docker/Dockerfile) has been removed. All deployments should use Docker Compose (or equivalent orchestration).
  • A new index-applier one-shot container is included in the Docker Compose stack. It runs automatically after sync completes and requires no manual intervention.
  • Default DB_PATH and CARDANO_NODE_DIR now use absolute paths under /opt/cardano-rosetta-java/. Existing volume mounts must be updated.

API / Configuration

  • /network/status: new stage field in sync_status.
    • The sync_status.stage field is now set to one of three values: SYNCING (catching up to tip), APPLYING_INDEXES (tip reached, indexes being created), or LIVE (fully operational). The synced boolean remains true only at LIVE. Clients that only check synced are unaffected.

Environment updates:

  • PG_VERSION_TAG: REL_14_11REL_18_0
  • DB_SCHEMA: ${NETWORK}public
  • DB_PATH: data/opt/cardano-rosetta-java/mainnet/sql_data
  • CARDANO_NODE_DIR: /node/opt/cardano-rosetta-java/mainnet/node_data
  • MITHRIL_VERSION: 2537.02543.1-hotfix
  • CARDANO_CONFIG_CONTAINER_PATH: /config (new)
  • RELEASE_VERSION: 2.0.0 (new, replaces API_DOCKER_IMAGE_TAG and INDEXER_DOCKER_IMAGE_TAG)
  • API_DOCKER_IMAGE_TAG (removed, replaced by RELEASE_VERSION)
  • INDEXER_DOCKER_IMAGE_TAG (removed, replaced by RELEASE_VERSION)
  • ROSETTA_VERSION (removed)

What's Changed

New Contributors

Full Changelog: 1.4.3...2.0.0

Documentation

https://cardano-foundation.github.io/cardano-rosetta-java/

1.4.3

21 Nov 16:27
5a49e83

Choose a tag to compare

Highlights

  • Upgrade to cardano-node 10.5.3

Please use this version instead of 1.4.2!

Important

  • Pruning is now enabled by default (REMOVE_SPENT_UTXOS)

Full Changelog: 1.4.2...1.4.3

1.4.2

21 Nov 14:06
8675a26

Choose a tag to compare

Highlights

  • Upgrade to cardano-node 10.5.2

Important

  • Pruning is now enabled by default (REMOVE_SPENT_UTXOS)

What's Changed

New Contributors

Full Changelog: 1.4.1...1.4.2

1.4.1

06 Nov 13:53
21b61af

Choose a tag to compare

Highlights

  • chore: Cardano-Node 10.5.1 with Ouroboros Genesis enabled
  • feat: PeerSnapshot used on startup in /network/options
  • fix: search by asset name (asset name is now a hex)
  • chore: Mithril 2537
  • refactor: remove assetName from Yaci-Store (making handling CIP-68 more complicated)
  • fix: docker image tags for external components such as (postgres, cardano-node, etc) have now original version tags

Full Changelog: 1.4.0...1.4.1

1.4.0

28 Oct 13:43
aa68703

Choose a tag to compare

Highlights

  • Support for optional token metadata enrichment
  • Prunning (REMOVE_SPENT_UTXOS) enabled by default
  • Prometheus / Grafana Server Dashboard Monitoring
  • Re-wrote integration tests in Python and ran against pre-prod environment

Depreciation

  • Single docker image deployment has been deprecated for some time now and starting from 2.x.x release line we are planning to remove a single docker deployment and it will be possible to deploy rosetta only via docker-compose or using Kubernetes via helm charts

What's Changed

Full Changelog: 1.3.3...1.4.0

1.3.3

26 Sep 12:20
9067e7b

Choose a tag to compare

Highlights

  • fixing a regression issue to do with writing transaction symbols as ascii instead of hex #609.

What's Changed

  • feat: add a new set of integration tests for construction endpoints by @linconvidal in #583
  • docs: misc docs updates for v1.3.2 release by @linconvidal in #586
  • fix: update expected error codes in DRep delegation test cases by @linconvidal in #592
  • fix: update schema validation to use Draft4Validator and improve code formatting by @linconvidal in #605
  • chore: 1.3.3 version upgrade. by @matiwinnetou in #611

Full Changelog: 1.3.2...1.3.3

1.3.2

03 Sep 15:27
73871a4

Choose a tag to compare

🌟 Highlights

Search Improvements

  • Currency Filtering: Enhanced search functionality with improved currency filtering capabilities
  • Performance Optimizations: Significant performance improvements for large-scale address searches and UTXO handling
  • Bug Fixes: Fixed operation ordering (now sorted by slot), resolved missing transaction issues, and corrected account/transaction identifier test operations (AND/OR logic)

Network Enhancements

  • Peer Management: Added static peer support in /network/ endpoint with dynamic peer discovery available via configuration

Infrastructure Updates

  • Yaci-Store Upgrade: Updated to latest yaci-store v0.1.5 from 0.1.x release line for improved stability

Testing & Quality Assurance

  • Contract Testing: Comprehensive PostMan collection and Python-based contract tests for all construction endpoints
  • End-to-End Testing: New Python-based flow tests for native asset transfers

⚠️ Known Issues

  • Byron Era Transactions: Some Byron era transactions are currently missing (fix coming in upcoming release)
  • Operation Type Search: Searching by operation type is not yet supported
  • Currency Symbol Format: currency.symbol should use hex strings instead of ASCII (fixed in v1.3.3)

🚨 Important Upgrade Notes

Database Migration Required: This release includes new search-related indexes. On synced instances, allow several hours for full stack synchronization (primarily yaci-indexer).

Deployment Recommendation: Only enable this Rosetta version after full synchronization is complete. Monitor /network/status endpoint and ensure sync_status.synced shows true before switching over.

⚙️ Configuration Changes

SEARCH_LIMIT=100          # New: Limits search results
PEER_DISCOVERY=false      # New: Controls dynamic peer discovery

📋 Detailed Changes

Features

  • Currency filtering and address search optimization for large UTXO sets ([#554](#554))
  • Static and dynamic peer management ([#561](#561))
  • End-to-end testing for native asset transfers ([#576](#576))

Fixes

  • Missing transaction resolution in search results ([#563](#563))
  • Search index creation issues ([#577](#577))

Maintenance

  • Yaci-store upgrade to v0.1.5 ([#566](#566))
  • Updated performance documentation with v1.3.1 benchmarks ([#558](#558))
  • Enhanced PostMan collection review ([#578](#578))

🔗 Additional Resources

Full Changelog: [v1.3.1...v1.3.2](1.3.1...1.3.2)

Contributors: @matiwinnetou, @tienna, @Kartiiyer12, @linconvidal