Summary
FollowTip permanently fails with a gRPC Internal / "recursion limit reached" protobuf decode error when re-serving a specific historical block on Cardano Preview, even though Dolos's own chain-following/ingestion already applied that same block to its local ledger without any error. The failure is 100% deterministic and repeats on every reconnect attempt — a client following from an intersection at or before this point can never make progress past it.
Evidence
Stuck point: slot 122726711 (hash 8369713d5dd25692475ff9a71fbf0c4575a7303a79707384dc831fae5771132f) is the last good intersection. The very next block, slot 122726746 (hash c6ce58758d3634f06056c05a9425cacc07ae7581192f28ef7e15afe47e4b5dbb), cannot be served.
Client-side error (via utxorpc/CardanoSyncClient::follow_tip), repeating verbatim on every retry:
status: Internal, message: "failed to decode Protobuf message:
PlutusDataArray.items: PlutusData.plutus_data: PlutusDataArray.items: PlutusData.plutus_data: [... repeats ~45 times ...]
Redeemer.payload: TxInput.redeemer: Tx.inputs: BlockBody.tx: Block.body: AnyChainBlock.chain: FollowTipResponse.action: recursion limit reached"
Dolos's own ingestion log for the same block shows a clean apply, no error, at the time it was originally processed at the tip:
INFO stage{stage="apply"}:execute:roll_forward:work_unit{name=roll}:shard{index=0 total=1 resumed=false}:
dolos_cardano::roll::work_unit: rolling forward point=122726746(c6ce58758d3634f06056c05a9425cacc07ae7581192f28ef7e15afe47e4b5dbb)
So the data is ingested and applied fine; the failure is specific to re-serving it via FollowTip (e.g. on a client reconnect/replay after this point has already been committed).
Version bisection
Confirmed by comparing two independently-run Dolos instances following the same canonical Preview chain:
| Dolos version |
Behavior at slot 122726746 |
1.1.0 |
Serves it fine — that instance is now hundreds of thousands of slots ahead with no issue |
1.6.0 |
Fails with the recursion-limit error above, on every single retry, indefinitely |
This points to a regression introduced somewhere between 1.1.0 (2026-04-30) and 1.6.0 (2026-07-27) in the Cardano→protobuf mapping for PlutusData/Redeemer used by FollowTip.
Impact
Any UtxoRPC client using FollowTip (e.g. sundae-sync-v2) that reconnects with an intersection at or before slot 122726711 gets permanently stuck — every retry hits the identical decode error, with no way to progress past this block via the sync API.
Ask
- Confirm whether this is a known regression in the PlutusData/Redeemer protobuf mapping between 1.1.0 and 1.6.0.
- If useful, I can help narrow the exact redeemer/datum shape that triggers this — I wasn't able to extract the raw bytes without pausing a live instance, but the exact slot/block above should reproduce it deterministically against Preview.
Environment
- Dolos 1.6.0 (failing), Dolos 1.1.0 (working)
- Network: Cardano Preview testnet
- Client:
utxorpc Rust crate 0.13.0, CardanoSyncClient::follow_tip
Summary
FollowTippermanently fails with a gRPCInternal/ "recursion limit reached" protobuf decode error when re-serving a specific historical block on Cardano Preview, even though Dolos's own chain-following/ingestion already applied that same block to its local ledger without any error. The failure is 100% deterministic and repeats on every reconnect attempt — a client following from an intersection at or before this point can never make progress past it.Evidence
Stuck point: slot
122726711(hash8369713d5dd25692475ff9a71fbf0c4575a7303a79707384dc831fae5771132f) is the last good intersection. The very next block, slot122726746(hashc6ce58758d3634f06056c05a9425cacc07ae7581192f28ef7e15afe47e4b5dbb), cannot be served.Client-side error (via
utxorpc/CardanoSyncClient::follow_tip), repeating verbatim on every retry:Dolos's own ingestion log for the same block shows a clean apply, no error, at the time it was originally processed at the tip:
So the data is ingested and applied fine; the failure is specific to re-serving it via
FollowTip(e.g. on a client reconnect/replay after this point has already been committed).Version bisection
Confirmed by comparing two independently-run Dolos instances following the same canonical Preview chain:
1.1.01.6.0This points to a regression introduced somewhere between
1.1.0(2026-04-30) and1.6.0(2026-07-27) in the Cardano→protobuf mapping forPlutusData/Redeemerused byFollowTip.Impact
Any UtxoRPC client using
FollowTip(e.g.sundae-sync-v2) that reconnects with an intersection at or before slot 122726711 gets permanently stuck — every retry hits the identical decode error, with no way to progress past this block via the sync API.Ask
Environment
utxorpcRust crate 0.13.0,CardanoSyncClient::follow_tip