Skip to main content

Handling Unparsed Blocks

1. Overview​

In some cases, yaci-core may not be able to parse certain Cardano blocks due to unexpected or malformed data. To address this, yaci-store has introduced a feature that allows these unparsed blocks to be ignored and stored in a separate error table in the database, instead of halting the indexing process.

With this graceful error handling in place, it's now possible to surface these parse-error blocks to exchanges and integrators so they can:

  • Detect if any of their transactions are present in an errored block.
  • Review and “mark checked” blocks if they do not impact their users or operations.

This capability is exposed as Cardano network-specific procedure calls, using Coinbase Mesh’s generic /call endpoint, which supports dynamic method routing. This allows clients to query and update the state of errored blocks in a flexible and standardized way.

Starting from Rosetta-java version 1.3.0, the parameter CONTINUE_PARSING_ON_ERROR=true|false has been introduced:

  • When it is set to true, yaci-core will skip unparsed blocks and add them to the error table.
  • When it is set to false, yaci-core will stop indexing when it encounters an unparsed block.

2. How to Use​

You can interact with the parse-error block system through the /call endpoint. Below are the available operations.

2.1 Review blocks that could not be fully parsed​

Use this call to get the list of blocks that failed to parse.

Request​

curl --location 'http://localhost:8082/call' \
--header 'Content-Type: application/json' \
--data '{
"network_identifier": {
"blockchain": "cardano",
"network": "preprod"
},
"method": "get_parse_error_blocks",
"parameters": {
"status": "UNREVIEWED"
}
}'
note
  • Pagination is not required, as the number of errored blocks is expected to be low.

Response​

{
"result": {
"parse_error_blocks": [
{
"error_id": 1,
"block_number": 3686994,
"status": "UNREVIEWED",
"lastUpdated": "2025-07-18T16:18:00.266457",
"note": "Please review all transactions within a block, https://explorer.cardano.org/block/3686994"
},
{
"error_id": 2,
"block_number": 3686995,
"status": "UNREVIEWED",
"lastUpdated": "2025-07-18T16:18:00.266457",
"note": "Please review all transactions within a block, https://explorer.cardano.org/block/3686995"
}
]
},
"idempotent": false
}

📚 For detailed information, please see the API page.

2.2 Mark blocks as “checked” if they do not affect users or transactions​

After reviewing a block, you can mark it as reviewed with a comment and status.

Request​

curl --location 'http://localhost:8082/call' \
--header 'Content-Type: application/json' \
--data '{
"network_identifier": {
"blockchain": "cardano",
"network": "preprod"
},
"method": "mark_parse_error_block_checked",
"parameters": {
"block_number": 3686994,
"status": "REVIEWED_DOES_NOT_AFFECT_US",
"comment": "no impact to operation",
"checked_by": "Admin"
}
}
note
  • block_number specifies which block to update.
  • status reflects the outcome of your review, e.g., REVIEWED_DOES_NOT_AFFECT_US.
  • Use comment and checked_by fields to provide audit context.

Response​

{
"result": {
"parse_error_blocks_response": [
{
"error_id": 1,
"block_number": 3686994,
"status": "REVIEWED_DOES_NOT_AFFECT_US",
"comment": "no impact to operation",
"checked_by": "Admin",
"lastUpdated": "2025-07-28T04:25:57.632987219"
}
]
},
"idempotent": true
}

📚 For detailed information, please see the API page.

2.3 What to do when unparsed blocks are detected​

When yaci-core encounters unparsed blocks, and you want to attempt parsing them again after resolving the issue (e.g. upgrading parser logic), follow these steps:

  1. Upgrade yaci-core to the latest version that supports parsing the problematic block(s).
  2. Remove the data volume used by the indexer.
 docker compose --env-file .env.docker-compose \
--env-file .env.docker-compose-profile-mid-level \
-f docker-compose.yaml stop yaci-indexer

docker volume rm cardano-rosetta-java_data

  1. Restart the indexer service using Docker Compose:
 docker compose --env-file .env.docker-compose \
--env-file .env.docker-compose-profile-mid-level \
-f docker-compose.yaml start yaci-indexer