Skip to content

Known Issues

Michael Fazio edited this page May 23, 2026 · 6 revisions

Known Issues

Current known issues in Dugite, with status and workarounds where available. Last updated: 2026-05-23.

Active Issues

#83 — Extract Tests from state/mod.rs

Severity: Low (code quality) Status: Open

state/mod.rs contains ~7,840 lines of inline tests. Should be extracted to a separate tests.rs file for navigation and compile time improvements.

#76 — Evaluate blake2b_simd Performance on x86_64

Severity: Low (performance investigation) Status: Open

Performance evaluation of blake2b_simd vs the current blake2b implementation on x86_64 hardware. No correctness impact.

Dependabot: 2 Low-Severity Vulnerabilities

Severity: Low Status: Tracked

Two low-severity dependency vulnerabilities flagged by Dependabot. They do not affect runtime security.

Sustained Block Production Confidence

Severity: Low (statistical observation gap) Status: Soak testing ongoing — Sandstone Pool [SAND] on preview testnet

A dugite-forged block was accepted by a cardano-node 10.6.2 relay on 2026-05-04 (verified on-chain, no header errors). The block was orphaned by a slot-battle, which is expected behaviour and not a defect. Sandstone's stake share is σ ≈ 0.0000247 (~0.1 blocks/epoch), so building statistical confidence in sustained block production requires hundreds of hours of observation. Tracked but no longer a known defect.


Resolved Issues

Block Forging End-to-End (Verified 2026-05-04)

OpCert signature failure fixed and verified on-chain: a dugite-forged block was accepted by a cardano-node 10.6.2 relay (no header errors). Orphaned by slot-battle, not by any dugite defect. Block production pipeline (VRF, KES, opcert, forge, announce) is end-to-end functional on a live network.

Block Diffusion Failure (Fixed 2026-04-29)

Block announcements between BP and relay were dropped on simultaneous-open / loopback topologies. Fixed via:

  • ConnectionId tuple keying (replacing single-PeerId keying that collided on simultaneous open)
  • "Overwritten" handling for simultaneous-open races
  • SO_REUSEPORT on the listener

Verified end-to-end on a loopback BP+relay pair: PromotedToHotRemote + InboundIdleSt Duplex observed.

Immutable-Tip Anchor Switch (Fixed 2026-04-22)

switch_chain now accepts a fork whose ancestry terminates at the immutable tip. Fixes a long stall when a fork landed below VolatileDB.

Peer Rollback Cascade (Fixed 2026-04-21)

MsgRollBackward no longer regresses the global ledger; only TriggeredFork does. Prevents a single peer's rollback from cascading into a global ledger reset.

Phase-1 Validation Divergence (Fixed 2026-03-20)

Transaction outputs were conditionally inserted depending on the is_valid flag even for blocks already confirmed on-chain. The fix ensures outputs are always inserted for confirmed blocks, matching the Haskell ledger rule.

VRF Epoch Nonce for Cross-Epoch Batches (Fixed 2026-03-20)

Epoch nonce was not computed per-block during batch sync across epoch boundaries, causing nonce divergence when a batch spanned multiple epochs. Fixed by computing the nonce contribution on each block individually during batch application.

Fork Recovery: 3-Peer Threshold Before Origin Reset (Fixed 2026-03-20)

A single-peer disagreement could trigger an Origin reset, causing unnecessary full replays. The fix requires 3 peers to agree that the local chain is unknown before resetting to Origin.

Treasury 2.16x Divergence (Fixed 2026-03-20)

RUPD timing was incorrect: reward update was computed before epoch rotation but applied after, causing treasury to accumulate incorrectly (observed as 2.16x inflation vs expected values). Fixed by computing the reward update after epoch rotation and applying it immediately.

Forge Ticker Pipeline Guard Removed (Fixed 2026-03-20)

The forge ticker was gated behind a pipeline_depth check that prevented forge attempts when the node was in sync mode with a full pipeline. Removed the guard so the forge ticker fires correctly when at tip.

N2C Transaction Submission (Fixed 2026-03-20)

LocalTxSubmission responses were not wrapped in CBOR tag 24 as required by the wire format spec. Additionally, rejection reasons were not decoded correctly. Both issues are resolved.

#80 — Plutus Budget Swap (Fixed in v0.3.0-alpha)

eval_phase_two_raw was called with (mem, steps) instead of (steps, mem), giving scripts a 714x CPU undercount (14M instead of 10B). Root cause: argument field order mismatch.

#81 — FeeTooSmall Off-by-One (Fixed in v0.3.0-alpha)

Haskell's toCBORForSizeComputation uses a 3-element array (omitting is_valid), but we used the full 4-element CBOR size. The 1-byte difference = 44 lovelace overcounting.

#82 — ScriptDataHash Reference Scripts (Fixed in v0.3.0-alpha)

Reference script language scan was gated behind an all-or-nothing guard that only fired when NO languages were detected. Mixed V1 witness + V2 reference script transactions failed.

Plutus V1/V2 Success Criteria (Fixed post v0.3.0-alpha)

dugite-uplc's failed() required Bool(true) or Unit for all versions. Haskell accepts ANY non-error result for V1/V2. Scripts returning Data values were incorrectly rejected. Fixed in-house in dugite-uplc.

Byron EBB Handling (Fixed in v0.2.0-alpha)

Epoch Boundary Blocks silently discarded by ChainSync. Fixed with three-layer EBB hash tracking.

PageOverflow for Large UTxO Values (Fixed in v0.2.0-alpha)

SSTable pages couldn't handle entries >4088 bytes. Fixed with jumbo pages and 64KB default page size.

Stale Peer Detection on Mainnet (Fixed in v0.2.0-alpha)

current_wall_clock_slot() didn't account for Byron era 20-second slots.

Architecture Review Issues #84-#93 (All Fixed)

10 of 11 findings from the 2026-03-16 architectural review resolved: tempfile gating, mutex poisoning, BigInt overflow, module visibility, SAFETY comments, doc comments, dead code, serde_json deps, SPO voting fallback warning.

Clone this wiki locally