fix: sync with leios prototype-2026w25
Disable and remove parts of the merged CIP-0164 support for Linear Leios
to mimic what the Haskell reference node has implemented.
- Enabled Dijkstra and Leios networking automatically for -n leios / magic
164, not just runMode: leios or startEra: dijkstra, in config.go:373.
- Split Leios protocol knobs so the standalone leios-votes mini-protocol is
disabled against prototype peers, while votes are handled inline over
leios-notify; wired this in node.go:220 and ouroboros/ouroboros.go:130.
- Changed EB handling so a MsgBlockOffer fetches and stores only the EB
manifest; transaction bodies are fetched only after MsgBlockTxsOffer, because
fetching earlier resets the prototype relay connection in
ouroboros/leiosnotify.go:270.
- Added batched EB transaction fetching: one 64-tx bitmap window at a time,
re-requesting missing txs, using response bitmaps when present and prefix
fallback when absent in ouroboros/leiosnotify.go:454.
- Routed pushed full votes from MsgVotesOffer.FullVotes into the Leios vote
manager in ouroboros/leiosnotify.go:412.
- Stopped trying to merge/splice endorser txs into ranking-block CBOR; the
ranking block’s body hash covers only its own body. Instead, Dingo resolves
the EB from the Dijkstra header extension and exposes cached EB txs to ledger
via EndorserBlockTxsByHash in ouroboros/leios_merged.go:263.
- Added ledger-side EB application: decode standalone EB transactions, persist
their CBOR as a standalone blob with DOFF offsets, apply their UTxO effects
before the referencing ranking block, and record metadata under the ranking
block so rollback removes it in ledger/leios_apply.go:38.
- Adjusted Dijkstra validation: run per-tx validation only when the referenced
EB was applied; otherwise skip because historical/current missing EBs make
inputs unresolvable. Validation disagreements on EB-applied Dijkstra blocks
are logged and trusted for now in ledger/state.go:3523.
- Added sync recovery fixes for Leios-style one-relay sync: local ledger
reconcile on plateau before recycling peers, and no recycling when there is
only one eligible upstream in node_chainsync_recycler.go:184.
- Fixed deep rollback cleanup for SQLite by chunking deleted transaction hash
lists so rollback does not exceed SQLite bind-variable limits in
database/plugin/metadata/sqlite/transaction.go:4633.
Signed-off-by: Chris Gianelloni <[email protected]>