Releases: cardano-foundation/cardano-rosetta-java
2.1.2
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.
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/statussync tolerance —SyncStatusServicenow reports a node as in-sync while it is within 200 slots of tip (previously 100). This only affects thesyncedflag 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 Helmvalues.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
- fix: raise SYNC_GRACE_SLOTS_COUNT to 200 and enrich gateway error logs by @matiwinnetou in #742
- fix: bump yaci to 0.4.1 by @matiwinnetou in #743
- chore: bump version to 2.1.2 by @linconvidal in #747
- chore: prepare 2.1.2 by @matiwinnetou in #744
Full Changelog: 2.1.1...2.1.2
2.1.1
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.
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: invalidaddress_typenow rejected.- Previously, unrecognized values (e.g.,
"InvalidType") silently defaulted to Enterprise. Now returns400with error4016("Provided address type is invalid"). Valid values are unchanged:Base,Enterprise,Reward.
- Previously, unrecognized values (e.g.,
-
/network/options:call_methodsnow populated.- Previously returned an empty list despite
/callsupporting methods. Now reports the supported methods (get_parse_error_blocks,mark_parse_error_block_checked), consistent with the/callendpoint.
- Previously returned an empty list despite
-
/search/transactions: malformedcoin_identifiernow 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 returns400(not retriable) with a descriptive message.
- Previously threw an unhandled exception (HTTP 500) when the identifier lacked a
-
Spring Boot Actuator liveness and readiness probes added to API and yaci-indexer containers.
- API exposes
GET /actuator/health/livenessandGET /actuator/health/readiness. The readiness probe reports ready only when the node is at chain tip AND all required database indexes are applied (sync stageLIVE). The yaci-indexer exposes equivalent probes gated on Yaci connection and sync state. See the updated Kubernetes deployment guide for probe configuration details.
- API exposes
-
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_identifierquery would crash.InterruptedExceptionandIOExceptionare now handled separately.
- 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
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
- docs: align v2.1.0 guides (drep, staking, pool ops) and env vars by @linconvidal in #692
- feat: add connection pool for indexer by @Sotatek-DucPhung in #707
- fix: [issue-706] network/options returns empty call_methods despite /call supporting methods by @Sotatek-DucPhung in #710
- fix: [Issue-705] construction/derive silently defaults to Enterprise on invalid address_type by @Sotatek-DucPhung in #709
- feat: add helm charts kubernetes by @Sotatek-DucPhung in #704
- chore: prepare 2.1.1 by @matiwinnetou in #712
- fix: removal of -config suffix by @Sotatek-DucPhung in #724
- docs: add performance test results for v2.0.0 and v2.1.0 by @linconvidal in #703
- fix: align policyId validation in search endpoint and introduce domain validators by @matiwinnetou in #726
- feat: add liveness and readiness probes to all containers by @Sotatek-DucPhung in #718
- fix: separate InterruptedException from IOException in YaciHttpGatewayImpl by @linconvidal in #733
- chore: add release notes generation skill by @linconvidal in #702
Full Changelog: 2.1.0...2.1.1
2.1.0
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.
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 Requestinstead of500 Internal Server Erroracross all endpoints. Clients relying on500for validation or not-found errors must update their error handling.
- All non-retriable errors now return
-
/construction/preprocessand/construction/payloads: CIP-129 DRep type inference.- DRep IDs with a 29-byte CIP-129 prefix no longer require an explicit
typefield, the type is inferred from the header byte. Raw 28-byte IDs still requiretype. See the DRep Delegation guide for usage examples.
- DRep IDs with a 29-byte CIP-129 prefix no longer require an explicit
-
/block,/block/transaction, and/search/transactions: governance operations included.- Responses now contain
VOTE_DREP_DELEGATIONandPOOL_GOVERNANCE_VOTEoperations for Conway-era transactions. See the Pool Operations guide for SPO voting details.
- Responses now contain
Environment updates:
CARDANO_NODE_VERSION: 10.5.3 → 10.5.4YACI_VERSION: 0.10.5 → 0.10.6
What's Changed
- refactor: operations parsing refak by @matiwinnetou in #649
- feat: drep vote delegation now visible in /network as an operation by @matiwinnetou in #648
- feat: SPO voting in data operations by @matiwinnetou in #665
- fix(docs): remove broken SingleDocker component references by @linconvidal in #681
- test: fix preprod test compatibility for v2.1.0 by @linconvidal in #682
- chore: update cardano-node to 10.5.4 and yaci-cli to 0.10.6 by @matiwinnetou in #688
- test: add governance data endpoint tests and golden examples by @linconvidal in #687
- chore: reorganize e2e tests + support preview by @linconvidal in #689
- chore: allure3 migration by @linconvidal in #690
- fix: infer DRep type from CIP-129 by @Sotatek-DucPhung in #683
- refactor: align HTTP status codes with error classification by @Sotatek-DucPhung in #686
- feat(yaci-indexer): add admin UI with Rosetta branding by @matiwinnetou in #677
- chore: prepare 2.1.0 by @matiwinnetou in #644
New Contributors
- @Sotatek-DucPhung made their first contribution in #683
Full Changelog: 2.0.0...2.1.0
2.0.0
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.
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) topublic, 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-applierone-shot container is included in the Docker Compose stack. It runs automatically after sync completes and requires no manual intervention. - Default
DB_PATHandCARDANO_NODE_DIRnow use absolute paths under/opt/cardano-rosetta-java/. Existing volume mounts must be updated.
API / Configuration
/network/status: newstagefield insync_status.- The
sync_status.stagefield is now set to one of three values:SYNCING(catching up to tip),APPLYING_INDEXES(tip reached, indexes being created), orLIVE(fully operational). Thesyncedboolean remainstrueonly atLIVE. Clients that only checksyncedare unaffected.
- The
Environment updates:
PG_VERSION_TAG:REL_14_11→REL_18_0DB_SCHEMA:${NETWORK}→publicDB_PATH:data→/opt/cardano-rosetta-java/mainnet/sql_dataCARDANO_NODE_DIR:/node→/opt/cardano-rosetta-java/mainnet/node_dataMITHRIL_VERSION:2537.0→2543.1-hotfixCARDANO_CONFIG_CONTAINER_PATH:/config(new)RELEASE_VERSION:2.0.0(new, replacesAPI_DOCKER_IMAGE_TAGandINDEXER_DOCKER_IMAGE_TAG)API_DOCKER_IMAGE_TAG(removed, replaced byRELEASE_VERSION)INDEXER_DOCKER_IMAGE_TAG(removed, replaced byRELEASE_VERSION)ROSETTA_VERSION(removed)
What's Changed
- Update StakePoolVerificationKeyParser.java by @LeanAira10 in #656
- fix: update Flyway schema from preprod.flyway_schema_history to public.flyway_schema_history by @matiwinnetou in #666
- refactor: remove obsolete error table workaround migration by @matiwinnetou in #671
- chore: single docker cleanup by @matiwinnetou in #672
- chore: yaci-store 2.0.0-rc1 by @matiwinnetou in #673
- feat: apply db optional db indexes at the end of rosetta sync from genesis by @matiwinnetou in #667
- chore: yaci 2.0 final by @matiwinnetou in #676
- test: qa improvements for v2.0.0 by @linconvidal in #658
- docs: add boot sequence documentation for v2.0 deployment by @linconvidal in #674
- refactor(config): replace image tag vars and add config path by @linconvidal in #678
- chore: prepare 2.0.0 by @matiwinnetou in #623
New Contributors
- @LeanAira10 made their first contribution in #656
Full Changelog: 1.4.3...2.0.0
Documentation
1.4.3
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)
- fix: cardano-node 10.5.3 by @matiwinnetou in #654
Full Changelog: 1.4.2...1.4.3
1.4.2
Highlights
- Upgrade to cardano-node 10.5.2
Important
- Pruning is now enabled by default (REMOVE_SPENT_UTXOS)
What's Changed
- fix: Fix the incorrect API URL in the documentation. by @ruofei-wang in #650
- chore: update cardano-node version to 10.5.2 by @matiwinnetou in #653
New Contributors
- @ruofei-wang made their first contribution in #650
Full Changelog: 1.4.1...1.4.2
1.4.1
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
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
- fix: increase pruning interval by @Kartiiyer12 in #591
- feat: adding new server health monitoring dashboard by @Kartiiyer12 in #607
- fix: Docker compose offline mode feature by @Kartiiyer12 in #608
- refactor: token registry service now returns a specialised domain object and api.yml, currency response metadata will no longer have decimals. by @matiwinnetou in #613
- test: add Python test suite and automated CI for data endpoints (#599) by @linconvidal in #622
- docs: enable token metadata by @Kartiiyer12 in #625
- test: pytest fixes release 1.4.0 by @linconvidal in #628
Full Changelog: 1.3.3...1.4.0
1.3.3
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
🌟 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.symbolshould 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