Apr 13, 9-10 AM (51)
Apr 13, 10-11 AM (75)
Apr 13, 11-12 PM (35)
Apr 13, 12-1 PM (55)
Apr 13, 1-2 PM (80)
Apr 13, 2-3 PM (42)
Apr 13, 3-4 PM (20)
Apr 13, 4-5 PM (31)
Apr 13, 5-6 PM (25)
Apr 13, 6-7 PM (18)
Apr 13, 7-8 PM (13)
Apr 13, 8-9 PM (15)
Apr 13, 9-10 PM (22)
Apr 13, 10-11 PM (29)
Apr 13, 11-12 AM (13)
Apr 14, 12-1 AM (6)
Apr 14, 1-2 AM (8)
Apr 14, 2-3 AM (15)
Apr 14, 3-4 AM (4)
Apr 14, 4-5 AM (4)
Apr 14, 5-6 AM (63)
Apr 14, 6-7 AM (50)
Apr 14, 7-8 AM (101)
Apr 14, 8-9 AM (33)
Apr 14, 9-10 AM (21)
Apr 14, 10-11 AM (34)
Apr 14, 11-12 PM (42)
Apr 14, 12-1 PM (72)
Apr 14, 1-2 PM (96)
Apr 14, 2-3 PM (44)
Apr 14, 3-4 PM (35)
Apr 14, 4-5 PM (9)
Apr 14, 5-6 PM (20)
Apr 14, 6-7 PM (22)
Apr 14, 7-8 PM (14)
Apr 14, 8-9 PM (10)
Apr 14, 9-10 PM (11)
Apr 14, 10-11 PM (24)
Apr 14, 11-12 AM (24)
Apr 15, 12-1 AM (3)
Apr 15, 1-2 AM (9)
Apr 15, 2-3 AM (8)
Apr 15, 3-4 AM (1)
Apr 15, 4-5 AM (1)
Apr 15, 5-6 AM (32)
Apr 15, 6-7 AM (7)
Apr 15, 7-8 AM (25)
Apr 15, 8-9 AM (49)
Apr 15, 9-10 AM (40)
Apr 15, 10-11 AM (127)
Apr 15, 11-12 PM (53)
Apr 15, 12-1 PM (60)
Apr 15, 1-2 PM (43)
Apr 15, 2-3 PM (45)
Apr 15, 3-4 PM (29)
Apr 15, 4-5 PM (44)
Apr 15, 5-6 PM (21)
Apr 15, 6-7 PM (33)
Apr 15, 7-8 PM (15)
Apr 15, 8-9 PM (17)
Apr 15, 9-10 PM (5)
Apr 15, 10-11 PM (20)
Apr 15, 11-12 AM (16)
Apr 16, 12-1 AM (12)
Apr 16, 1-2 AM (6)
Apr 16, 2-3 AM (7)
Apr 16, 3-4 AM (3)
Apr 16, 4-5 AM (4)
Apr 16, 5-6 AM (8)
Apr 16, 6-7 AM (33)
Apr 16, 7-8 AM (32)
Apr 16, 8-9 AM (31)
Apr 16, 9-10 AM (27)
Apr 16, 10-11 AM (50)
Apr 16, 11-12 PM (56)
Apr 16, 12-1 PM (58)
Apr 16, 1-2 PM (30)
Apr 16, 2-3 PM (40)
Apr 16, 3-4 PM (46)
Apr 16, 4-5 PM (47)
Apr 16, 5-6 PM (56)
Apr 16, 6-7 PM (17)
Apr 16, 7-8 PM (68)
Apr 16, 8-9 PM (38)
Apr 16, 9-10 PM (11)
Apr 16, 10-11 PM (23)
Apr 16, 11-12 AM (23)
Apr 17, 12-1 AM (12)
Apr 17, 1-2 AM (8)
Apr 17, 2-3 AM (3)
Apr 17, 3-4 AM (4)
Apr 17, 4-5 AM (3)
Apr 17, 5-6 AM (9)
Apr 17, 6-7 AM (26)
Apr 17, 7-8 AM (96)
Apr 17, 8-9 AM (70)
Apr 17, 9-10 AM (53)
Apr 17, 10-11 AM (41)
Apr 17, 11-12 PM (58)
Apr 17, 12-1 PM (64)
Apr 17, 1-2 PM (39)
Apr 17, 2-3 PM (44)
Apr 17, 3-4 PM (36)
Apr 17, 4-5 PM (13)
Apr 17, 5-6 PM (9)
Apr 17, 6-7 PM (25)
Apr 17, 7-8 PM (15)
Apr 17, 8-9 PM (3)
Apr 17, 9-10 PM (16)
Apr 17, 10-11 PM (24)
Apr 17, 11-12 AM (16)
Apr 18, 12-1 AM (2)
Apr 18, 1-2 AM (2)
Apr 18, 2-3 AM (6)
Apr 18, 3-4 AM (1)
Apr 18, 4-5 AM (2)
Apr 18, 5-6 AM (2)
Apr 18, 6-7 AM (1)
Apr 18, 7-8 AM (2)
Apr 18, 8-9 AM (4)
Apr 18, 9-10 AM (4)
Apr 18, 10-11 AM (1)
Apr 18, 11-12 PM (6)
Apr 18, 12-1 PM (7)
Apr 18, 1-2 PM (8)
Apr 18, 2-3 PM (9)
Apr 18, 3-4 PM (0)
Apr 18, 4-5 PM (2)
Apr 18, 5-6 PM (6)
Apr 18, 6-7 PM (2)
Apr 18, 7-8 PM (2)
Apr 18, 8-9 PM (4)
Apr 18, 9-10 PM (9)
Apr 18, 10-11 PM (21)
Apr 18, 11-12 AM (23)
Apr 19, 12-1 AM (1)
Apr 19, 1-2 AM (4)
Apr 19, 2-3 AM (1)
Apr 19, 3-4 AM (0)
Apr 19, 4-5 AM (0)
Apr 19, 5-6 AM (2)
Apr 19, 6-7 AM (0)
Apr 19, 7-8 AM (2)
Apr 19, 8-9 AM (1)
Apr 19, 9-10 AM (1)
Apr 19, 10-11 AM (4)
Apr 19, 11-12 PM (7)
Apr 19, 12-1 PM (6)
Apr 19, 1-2 PM (8)
Apr 19, 2-3 PM (22)
Apr 19, 3-4 PM (7)
Apr 19, 4-5 PM (4)
Apr 19, 5-6 PM (3)
Apr 19, 6-7 PM (8)
Apr 19, 7-8 PM (3)
Apr 19, 8-9 PM (8)
Apr 19, 9-10 PM (6)
Apr 19, 10-11 PM (25)
Apr 19, 11-12 AM (23)
Apr 20, 12-1 AM (4)
Apr 20, 1-2 AM (5)
Apr 20, 2-3 AM (2)
Apr 20, 3-4 AM (7)
Apr 20, 4-5 AM (1)
Apr 20, 5-6 AM (6)
Apr 20, 6-7 AM (7)
Apr 20, 7-8 AM (25)
Apr 20, 8-9 AM (24)
Apr 20, 9-10 AM (1)
3,738 commits this week Apr 13, 2026 - Apr 20, 2026
fix(pollux): replace generic Error with domain-specific PolluxError/CastorError in JWT utils
Replaces 13 instances of generic `throw new Error()` with domain-specific
error types (`PolluxError.InvalidCredentialError`, `CastorError.NotPossibleToResolveDID`,
`CastorError.InvalidKeyError`) across the JWT/SDJWT utility layer.

This enables callers to programmatically distinguish between error types
(e.g., invalid DID document vs invalid key vs invalid credential), which
is essential for the Identity Portal to display meaningful error messages.

Files changed:
- SDJWT.ts: 6 errors replaced
- JWT.ts: 4 errors replaced
- ResolveDID.ts: 1 error replaced
- CreateJwt.ts: 1 error replaced
- CreateSDJWT.ts: 1 error replaced
- Added tests for error type verification

Signed-off-by: Abhigyan Singh <[email protected]>
bench: fix integration test data-file paths for Nix/Hydra builds
Bare relative paths broke under Hydra where the working directory is a
build sandbox unrelated to the source tree. Declare the example YAML and
trace files as cabal data-files and resolve their location at runtime via
Paths_cardano_recon_framework.getDataDir, which cabal/Nix wire up to the
correct installed path in every environment.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
docs: chore: bump dependencies and adapt code for cardano-node 10.7.1 (#5250) ## Summary Bump all dependencies to cardano-node 10.7.1 and adapt wallet code to upstream API changes. ## Upstream pins (both on main) - **cardano-ledger-read**: cardano-foundation/cardano-ledger-read@cc9ca75 (10.7.1) - **cardano-balance-tx**: cardano-foundation/cardano-balance-transaction@5d69cc9 (main HEAD — [PR #40](https://github.com/cardano-foundation/cardano-balance-transaction/pull/40) merged 2026-04-17, added `SafeToHash (NativeScript era)` to `RecentEraConstraints`) ## Code changes ### Deprecated API migrations - `ppMinFeeAL` → `ppTxFeePerByteL` (returns `CoinPerByte`, unwrap with `fromCompact . unCoinPerByte`) - `ppMinFeeBL` → `ppTxFeeFixedL` - `StakeCredential` → `Credential Staking` - `PaymentCredential` → `Credential Payment` - `RewardAccount` → `AccountAddress` with `AccountId` wrapper - `decodeRewardAccount` → `decodeAccountAddress` - `serialiseRewardAccount` → `serialiseAccountAddress` - `raNetwork` → `aaNetworkId`, `raCredential` → `unAccountId . aaId` - `PoolParams` pattern `pp*` fields → `StakePoolParams` with `spp*` fields - `Ouroboros.Network.NodeToClient` → `Cardano.Network.NodeToClient.Version` ### Other fixes - Removed redundant imports (`Cardano.Ledger.Plutus.Language`, `Cardano.Ledger.Shelley.API`, `Cardano.Ledger.Keys`, `Cardano.Ledger.MemoBytes`) - Added `BangPatterns` for unbanged strict patterns (`SBS.SBS ba`, `BA.ByteArray ba`) - Added `GuardNativeScriptNotSupportedInConway` pattern match in API error handler - Fixed `HF.Bound` construction (new `boundPerasRound` field via record update from `initBound`) - Replaced `ouroboros-network` dep with `cardano-diffusion:api` / `ouroboros-network:api` where needed - cabal-fmt applied to all changed `.cabal` files - Dijkstra era stubs remain (`error "TODO"`) ## nix/haskell.nix changes Three distinct concerns, kept in separate commits: **1. `28a9e5f9` — Adapt nix shell for ouroboros-consensus 1.0** ouroboros-consensus 1.0.0.0 absorbed `consensus-cardano`, `protocol`, `diffusion` into sublibraries (`ouroboros-consensus:{cardano,protocol,diffusion}`), and ouroboros-network 1.1.0.0 absorbed `network-api`, `framework`, `protocols` (`ouroboros-network:{api,framework,protocols}`). Two problems: - **Sublibraries missing in the dev shell's GHC package db** (haskell.nix [#1662](https://github.com/input-output-hk/haskell.nix/issues/1662)). Added `shell.additional` to explicitly register the sublibraries we consume. Also switched `withHoogle = false` because Hoogle index generation trips on the sublibrary resolution. - **`lmdb` / `liburing` system libs**. haskell.nix evaluates every sublibrary of `ouroboros-consensus` during plan resolution (including `lmdb` and `lsm`), even though the wallet doesn't use them. Without the C libs on `nativeBuildInputs` via `pkg-config`, nix eval fails. The libs are not linked into the wallet binary. - **shellHook CHaP workaround**. Even with `additional`, `cabal build` inside `nix develop` still fails to resolve the sublibraries against the installed package db. Workaround: materialize CHaP as a local repo via `mkLocalHackageRepo` and write a `cabal.project.local` that points cabal at it, bypassing the broken GHC package db. Added `cabal.project.local` to `.gitignore`. **2. `24a4c552` — cabal 3.16 / haskell.nix index mismatch** cabal 3.16 expects `00-index.tar.gz` in a local repo, but `mkLocalHackageRepo` only writes `01-index.tar.gz`. Two workarounds: - In the shell hook, clear `~/.cache/cabal/packages/cardano-haskell-packages-local` before recreating the project.local — stale caches referenced the old (non-existent) tarball path and caused cabal to try to download packages that only live as an index. - In `scripts/ci/check-haskell-nix-cabal.sh`, copy the CHaP repo to a writable temp dir and symlink `00-index.tar.gz` → `01-index.tar.gz` so `cabal update` succeeds under 3.16. **3. `68166a09` — balance-tx pin bump** cabal.project tag + sha256, plus the matching `inputMap` / `extra-hackages` references in `nix/haskell.nix`. **4. `3fb88c5e` — HLS CI step fix** The "Check HLS Works" CI step was loading the shellHook-generated `cabal.project.local` and re-running resolution against the local CHaP repo, which HLS can't load. Remove the file before invoking HLS. ## Known issues (follow-ups, not blockers) - haskell.nix sublibrary resolution bug: https://github.com/input-output-hk/haskell.nix/issues/1662 (the shellHook workaround above is in place until fixed upstream) - ProtocolParameters type alignment: https://github.com/cardano-foundation/cardano-wallet/issues/5252 Closes https://github.com/cardano-foundation/cardano-wallet/issues/5247 Source commit: 0338ccf8286c60e26cea17b5035c9f2b667e51f4
chore: bump dependencies and adapt code for cardano-node 10.7.1 (#5250)
## Summary

Bump all dependencies to cardano-node 10.7.1 and adapt wallet code to
upstream API changes.

## Upstream pins (both on main)

- **cardano-ledger-read**:
cardano-foundation/cardano-ledger-read@cc9ca75 (10.7.1)
- **cardano-balance-tx**:
cardano-foundation/cardano-balance-transaction@5d69cc9 (main HEAD — [PR
#40](https://github.com/cardano-foundation/cardano-balance-transaction/pull/40)
merged 2026-04-17, added `SafeToHash (NativeScript era)` to
`RecentEraConstraints`)

## Code changes

### Deprecated API migrations
- `ppMinFeeAL` → `ppTxFeePerByteL` (returns `CoinPerByte`, unwrap with
`fromCompact . unCoinPerByte`)
- `ppMinFeeBL` → `ppTxFeeFixedL`
- `StakeCredential` → `Credential Staking`
- `PaymentCredential` → `Credential Payment`
- `RewardAccount` → `AccountAddress` with `AccountId` wrapper
- `decodeRewardAccount` → `decodeAccountAddress`
- `serialiseRewardAccount` → `serialiseAccountAddress`
- `raNetwork` → `aaNetworkId`, `raCredential` → `unAccountId . aaId`
- `PoolParams` pattern `pp*` fields → `StakePoolParams` with `spp*`
fields
- `Ouroboros.Network.NodeToClient` →
`Cardano.Network.NodeToClient.Version`

### Other fixes
- Removed redundant imports (`Cardano.Ledger.Plutus.Language`,
`Cardano.Ledger.Shelley.API`, `Cardano.Ledger.Keys`,
`Cardano.Ledger.MemoBytes`)
- Added `BangPatterns` for unbanged strict patterns (`SBS.SBS ba`,
`BA.ByteArray ba`)
- Added `GuardNativeScriptNotSupportedInConway` pattern match in API
error handler
- Fixed `HF.Bound` construction (new `boundPerasRound` field via record
update from `initBound`)
- Replaced `ouroboros-network` dep with `cardano-diffusion:api` /
`ouroboros-network:api` where needed
- cabal-fmt applied to all changed `.cabal` files
- Dijkstra era stubs remain (`error "TODO"`)

## nix/haskell.nix changes

Three distinct concerns, kept in separate commits:

**1. `28a9e5f9` — Adapt nix shell for ouroboros-consensus 1.0**

ouroboros-consensus 1.0.0.0 absorbed `consensus-cardano`, `protocol`,
`diffusion` into sublibraries
(`ouroboros-consensus:{cardano,protocol,diffusion}`), and
ouroboros-network 1.1.0.0 absorbed `network-api`, `framework`,
`protocols` (`ouroboros-network:{api,framework,protocols}`). Two
problems:

- **Sublibraries missing in the dev shell's GHC package db**
(haskell.nix
[#1662](https://github.com/input-output-hk/haskell.nix/issues/1662)).
Added `shell.additional` to explicitly register the sublibraries we
consume. Also switched `withHoogle = false` because Hoogle index
generation trips on the sublibrary resolution.
- **`lmdb` / `liburing` system libs**. haskell.nix evaluates every
sublibrary of `ouroboros-consensus` during plan resolution (including
`lmdb` and `lsm`), even though the wallet doesn't use them. Without the
C libs on `nativeBuildInputs` via `pkg-config`, nix eval fails. The libs
are not linked into the wallet binary.
- **shellHook CHaP workaround**. Even with `additional`, `cabal build`
inside `nix develop` still fails to resolve the sublibraries against the
installed package db. Workaround: materialize CHaP as a local repo via
`mkLocalHackageRepo` and write a `cabal.project.local` that points cabal
at it, bypassing the broken GHC package db. Added `cabal.project.local`
to `.gitignore`.

**2. `24a4c552` — cabal 3.16 / haskell.nix index mismatch**

cabal 3.16 expects `00-index.tar.gz` in a local repo, but
`mkLocalHackageRepo` only writes `01-index.tar.gz`. Two workarounds:

- In the shell hook, clear
`~/.cache/cabal/packages/cardano-haskell-packages-local` before
recreating the project.local — stale caches referenced the old
(non-existent) tarball path and caused cabal to try to download packages
that only live as an index.
- In `scripts/ci/check-haskell-nix-cabal.sh`, copy the CHaP repo to a
writable temp dir and symlink `00-index.tar.gz` → `01-index.tar.gz` so
`cabal update` succeeds under 3.16.

**3. `68166a09` — balance-tx pin bump**

cabal.project tag + sha256, plus the matching `inputMap` /
`extra-hackages` references in `nix/haskell.nix`.

**4. `3fb88c5e` — HLS CI step fix**

The "Check HLS Works" CI step was loading the shellHook-generated
`cabal.project.local` and re-running resolution against the local CHaP
repo, which HLS can't load. Remove the file before invoking HLS.

## Known issues (follow-ups, not blockers)

- haskell.nix sublibrary resolution bug:
https://github.com/input-output-hk/haskell.nix/issues/1662 (the
shellHook workaround above is in place until fixed upstream)
- ProtocolParameters type alignment:
https://github.com/cardano-foundation/cardano-wallet/issues/5252

Closes https://github.com/cardano-foundation/cardano-wallet/issues/5247
chore(deps): bump the docusaurus group in /website with 6 updates
Bumps the docusaurus group in /website with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [@docusaurus/core](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus) | `3.9.2` | `3.10.0` |
| [@docusaurus/preset-classic](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-preset-classic) | `3.9.2` | `3.10.0` |
| [@docusaurus/theme-mermaid](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-theme-mermaid) | `3.9.2` | `3.10.0` |
| [@docusaurus/module-type-aliases](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-module-type-aliases) | `3.9.2` | `3.10.0` |
| [@docusaurus/tsconfig](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-tsconfig) | `3.9.2` | `3.10.0` |
| [@docusaurus/types](https://github.com/facebook/docusaurus/tree/HEAD/packages/docusaurus-types) | `3.9.2` | `3.10.0` |


Updates `@docusaurus/core` from 3.9.2 to 3.10.0
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.10.0/packages/docusaurus)

Updates `@docusaurus/preset-classic` from 3.9.2 to 3.10.0
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.10.0/packages/docusaurus-preset-classic)

Updates `@docusaurus/theme-mermaid` from 3.9.2 to 3.10.0
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.10.0/packages/docusaurus-theme-mermaid)

Updates `@docusaurus/module-type-aliases` from 3.9.2 to 3.10.0
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.10.0/packages/docusaurus-module-type-aliases)

Updates `@docusaurus/tsconfig` from 3.9.2 to 3.10.0
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.10.0/packages/docusaurus-tsconfig)

Updates `@docusaurus/types` from 3.9.2 to 3.10.0
- [Release notes](https://github.com/facebook/docusaurus/releases)
- [Changelog](https://github.com/facebook/docusaurus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/docusaurus/commits/v3.10.0/packages/docusaurus-types)

---
updated-dependencies:
- dependency-name: "@docusaurus/core"
  dependency-version: 3.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docusaurus
- dependency-name: "@docusaurus/preset-classic"
  dependency-version: 3.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docusaurus
- dependency-name: "@docusaurus/theme-mermaid"
  dependency-version: 3.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: docusaurus
- dependency-name: "@docusaurus/module-type-aliases"
  dependency-version: 3.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: docusaurus
- dependency-name: "@docusaurus/tsconfig"
  dependency-version: 3.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: docusaurus
- dependency-name: "@docusaurus/types"
  dependency-version: 3.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: docusaurus
...

Signed-off-by: dependabot[bot] <[email protected]>
chore(deps-dev): bump typescript from 6.0.2 to 6.0.3 in /website
Bumps [typescript](https://github.com/microsoft/TypeScript) from 6.0.2 to 6.0.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/compare/v6.0.2...v6.0.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 6.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
chore(deps): bump actions/upload-pages-artifact from 4 to 5
Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-pages-artifact/releases)
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-pages-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <[email protected]>
fix: raise SYNC_GRACE_SLOTS_COUNT default to 200 and enrich gateway error logs (#742)
Bumps the default sync grace window from 100 to 200 slots across env files,
Spring config, Helm values, and docs. The previous value caused the synced
flag on /network/status to flap when the HTTP link between rosetta-api and
yaci-indexer was briefly unstable.

Enriches the logs in YaciHttpGatewayImpl for both getStakeAccountRewards
and getDiscoveredPeers: non-2xx branches now include the target URL and
response body alongside the status code, and IOException/InterruptedException
branches include the URL plus the exception (full cause chain) so SSL and
connection errors are visible in the logs.

Co-authored-by: Mateusz Czeladka <[email protected]>
Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]>
Don't decrement TTL while node is catching up
  When a node restarts and catches up with the chain, all network messages
  (including ReqTx) are rejected with WaitOnNodeInSync and re-enqueued with
  decremented TTL. Since ReqTx has TTL=5 (500ms of retries) while chain
  catch-up typically takes longer, ReqTx messages are dropped before the
  node finishes syncing. This means the node never receives transactions
  referenced by subsequent ReqSn messages, causing WaitOnTxs and permanent
  snapshot deadlock.

  Fix: preserve TTL when the wait reason is WaitOnNodeInSync, since the
  message cannot be processed yet and burning retries is wasteful.

Signed-off-by: Sasha Bogicevic <[email protected]>